Python ngrams的结果令人惊讶

Python ngrams的结果令人惊讶,python,python-3.x,n-gram,Python,Python 3.x,N Gram,在尝试使用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.comp

在尝试使用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 >代码>与竞争的分数相比。

< P>使用一点领域知识,使用你考虑的1G和曲线拟合,我认为两个字符串S和T的微笑是通过

计算的。

其中ngrams仅给出字符串的ngrams,大括号表示集合,条形/管道表示该集合中元素的计数

如果这个公式成立,你得到的结果是正确的,因此这个公式的结果是正确的。也许最适合你的是


也许您需要检查以下内容,另外,您可能需要检查是否提供了所需的相似性分数

也许这是因为字符串的长度不同?浏览比较法的文档串,我还没有发现相似性是如何衡量的。是的,可能是这样。但我无法截断值进行比较。那么,有什么可以用n-gram来做的,这样我就能得到合适的结果了吗results@Alexander酷。。。但是python也有什么答案吗。否则,我需要用python实现它。我的应用程序设计是用python完成的,我不希望包含任何来自其他语言的模块。但是如果没有选择余地,那么我肯定会这么做。你试过N=2吗?我试过
levenstein Distance
。也通过了
Fuuzywuzzy
库,尝试了
Jaro
算法等,但没有得到解决方案。在n-gram,我至少取得了令人满意的结果。但我认为,n-gram并不令人满意。您是否有要比较的字符串的一般定义?也许你需要执行规范化,比如删除空格等。亲爱的,我已经试过了你所说的每一件事,甚至其他的事情。结果对一个人是好的,而对其他人则是坏的。因此,我们需要一个尽可能好的算法来帮助我们。到目前为止,n-gram给了我大约85%的结果准确率,但我至少需要90%以上的准确率才能说结果是好的。也许,你可以试试word2vec,你可能想检查一下,对不起,但我认为这在我的情况下不起作用。但这是一个很好的选择,我可以考虑使用和制作某些向量。