函数使用说明:算法
函数的三个参数分别是“匹配语句”,“匹配语料”,“相关度”;app
匹配语句,和匹配预料中的语句匹配的语句,必须为字符串;函数
匹配语料,被匹配语句来匹配的语句列表,必须为列表;spa
相关度,函数只会输出匹配预料中匹配度大于相关度的的语句;code
函数返回类型为列表;blog
算法原理:从文本内容匹配度与文本顺序匹配度两个维度进行衡量。字符串
a=["早上吃了没",'吃过没','吃了没','刚吃过吗']
b='吃了吗'
ltextmatch(b,a,0.5)
但就从中文来讲,原本写这个主要是由于本身和同窗再尝试作一个智能聊天机与数据分析可视化机器人,本身是负责聊天这一块。因为中文复杂的语法和歧义,在语句匹配中,或者说是在对话匹配中其实最重要的仍是语料库,从理论上来讲只要语料库够全,程序要作的只须要匹配就能够了,算法只能是一个锦上添花的东西,可能这也就是如今没什么人写这个的缘由。源码
源码:数据分析
def ltextmatch(a,b,c): if isinstance(a,str): if isinstance(b,list): if isinstance(c,float)and 0<c<=1: m=[] for z in b: z=str(z) l,k,j,h=0,0,0,0 if len(z)>=len(a): for x in a: if x in z: l+=1 for x in a: if x in z: k=z.index(x) j=a.index(x) break if len(z)-k>=len(a)-j: for x in range(0,len(a)-j): if z[k+x]==a[j+x]: h+=1 else: for x in range(0,len(z)-k): if z[k+x]==a[j+x]: h+=1 if (l*0.2+h*0.8)/len(z)>c: m.append(z) else: for x in z: if x in a: l+=1 for x in z: if x in a: k=z.index(x) j=a.index(x) break if len(z)-k>=len(a)-j: for x in range(0,len(a)-j): if z[k+x]==a[j+x]: h+=1 else: for x in range(0,len(z)-k): if z[k+x]==a[j+x]: h+=1 if (l*0.2+h*0.8)/len(z)>c: m.append(z) return m else: print('相关度必须为浮点型且在0—1之间') else: print('匹配语料必须为列表') else: print('匹配语句必须为字符串')