<强>编辑距离强>
编辑距离,又称为Levenshtein距离,是用于计算一个字符串转换为另一个字符串时,插入,删除和替换的次数。例如,将‘爸爸’转换为“坏”需要一次替换操作,编辑距离为1 .
nltk.metrics.distance.edit_distance函数实现了编辑距离。
从nltk.metrics。距离进口edit_distance str1='坏' str2='爸爸' 打印(edit_distance (str1, str2)) >之前<强> N元语法相似度强>
n元语法只是简单地表示文本中n个标记的所有可能的连续序列.元语法具体是这样的
进口nltk #这里展示2元语法 text1=笆紫葱泄佟? #三元考虑匹配开头和结束,所有使用pad_right和pad_left ceo_bigrams=nltk.bigrams (text1.split (), pad_right=True, pad_left=True) print(列表(ceo_bigrams)) ((没有,“首席”),(“首席”,“执行”), (“执行”,“官”)(“官”,没有一个) >之前2元语法相似度计算
进口nltk #这里展示2元语法 def bigram_distance (text1 text2): #三元考虑匹配开头和结束,所以使用pad_right和pad_left text1_bigrams=nltk.bigrams (text1.split (), pad_right=True, pad_left=True) text2_bigrams=nltk.bigrams (text2.split (), pad_right=True, pad_left=True) #交集的长度 距离=len(集(text1_bigrams) .intersection(设置(text2_bigrams))) 返回的距离 首席执行官text1='是经理 首席技术官text2='是技术经理 print (bigram_distance (text1 text2) #相似度为3 >之前<强> jaccard相似性强>
jaccard距离度量的两个集合的相似度,它是由(集合1交集合2)/(结合1交结合2)计算而来的。
实现方式
从nltk.metrics。距离进口jaccard_distance #这里我们以单个的字符代表文本 set2=中的设置([a, b, c, ' d ', ' ']) 关于我校=组([a, b,‘e’,‘g’, ' ']) 打印(jaccard_distance (set2,中的)) >之前0.6666666666666666
<强>马西距离强>
马西距离度量是jaccard相似度的加权版本,当集合之间存在部分重叠时,通过调整得分来生成小于jaccard距离值。
从nltk.metrics。距离进口jaccard_distance masi_distance #这里我们以单个的字符代表文本 set2=中的设置([a, b, c, ' d ', ' ']) 关于我校=组([a, b,‘e’,‘g’, ' ']) 打印(jaccard_distance (set2,中的)) 打印(masi_distance (set2,中的)) >之前0.6666666666666666
0.22000000000000003
<强>余弦相似度强>
nltk提供了余弦相似性的实现方法,比如有一个词语空间
word_space=(w1 w2, w3, w4) text1=' w1 w2 w1 w4 w1 ' text2=' w1 w3 w2 ' #按照word_space位置,计算每个位置词语出现的次数 text1_vector=[3, 1, 0, 1] text2_vector=(1, 1, 1, 0) >之前[3, 1, 0, 1]意思是指w1出现了3次,w2出现了1次,w3出现0次,w4出现1次。
好了下面看代码,计算text1与text2的余弦相似性
从nltk.cluster。util进口cosine_distance text1_vector=[3, 1, 0, 1] text2_vector=(1, 1, 1, 0) 打印(cosine_distance (text1_vector, text2_vector)) >之前0.303689376177
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
python文本数据相似度的度量