tif*_*i90 3 python similarity measure
我想测量两个词之间的相似度。想法是使用OCR读取文本并检查关键字的结果。我要寻找的功能应该比较两个单词并以%返回相似度。因此,将单词与自身进行比较应该是100%相似的。我自己编写了一个函数,然后逐个字符比较char,然后返回与长度成比例的匹配数。但是问题是
wordComp('h0t',hot')
0.66
wordComp('tackoverflow','stackoverflow')
0
Run Code Online (Sandbox Code Playgroud)
但是直观的两个示例都应该具有很高的相似度> 90%。加Levenstein距离
import nltk
nltk.edit_distance('word1','word2')
Run Code Online (Sandbox Code Playgroud)
在我的函数中会将第二个结果提高到92%,但第一个结果仍然不好。
我已经找到了针对“ R”的解决方案,可以将此功能与另一种方法结合rpy2使用或agrepy用作另一种方法。但是我想通过更改接受基准来使程序变得越来越敏感(仅接受相似度> x%的匹配项)。
我还有其他可以使用的好方法吗?或者您有什么想法可以改善我的功能?
Mar*_*in 5
您可以只使用difflib。我从一个答案中得到的这个功能对我很有帮助:
from difflib import SequenceMatcher
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
print (similar('tackoverflow','stackoverflow'))
print (similar('h0t','hot'))
0.96
0.666666666667
Run Code Online (Sandbox Code Playgroud)
您可以轻松地附加函数或将其包装在另一个函数中,以解决不同程度的相似性,例如,传递第三个参数:
from difflib import SequenceMatcher
def similar(a, b, c):
sim = SequenceMatcher(None, a, b).ratio()
if sim > c:
return sim
print (similar('tackoverflow','stackoverflow', 0.9))
print (similar('h0t','hot', 0.9))
0.96
None
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |