只是尝试使用 Python 的 ngram
库,我遇到了一个与字符串相似性相关的问题。比率输出有点困惑。看看我尝试了什么:
>>> ngram.NGram.compare('alexp','Alex Cho',N=1)*100
30.0
>>>
>>> ngram.NGram.compare('alexp','Alex Plutzer',N=1)*100
21.428571428571427
>>> ngram.NGram.compare('alexp','Alex Plutzer'.lower(),N=1)*100
41.66666666666667
>>> ngram.NGram.compare('alexp','Alex Cho'.lower(),N=1)*100
44.44444444444444
>>> ngram.NGram.compare('alexp','AlexCho'.lower(),N=1)*100
50.0
>>> ngram.NGram.compare('alexp','AlexPlutzer'.lower(),N=1)*100
45.45454545454545
最相似的必须是具有 alexp
的那个,即 Alex Plutzer
但更多的分数被分配给前一个,即 Alex Cho
可以做些什么来获得适当的结果,与竞争者相比,我得到的输出为 Alex Plutzer
且得分较高?
凭借一些领域知识,使用你考虑的 1-grams 和曲线拟合,我声称两个字符串 S 和 T 的相似度是通过以下方式计算的
其中 ngrams 仅给出字符串的 ngrams,大括号表示集合,竖线/竖线表示该集合中元素的数量。
所以如果这个公式成立,你得到的结果是正确的,那么关于这个公式的结果是正确的。也许更适合您的需要的可能是 Levensthein-Distance
也许您想检查以下 stackoverflow thread ,此外,您可能想检查是否 nltk提供您需要的相似度分数
我是一名优秀的程序员,十分优秀!