比较字符串以匹配品牌名称并删除拼写错误

2024-10-01 22:42:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含品牌名称的文本列表(可口可乐、百事可乐、七喜等等)。我编写了一个python脚本,对具有相同内容的所有单元格(完全相同的文本,小写后的所有文本)进行排序和计数,并根据每个文本的计数重新排列列表,这样出现最多的文本将排在第一位,因为我假设大多数人都会正确地编写品牌名称。 例如,如果我有以下列表:

texts = ['Coca-Cola', 'Pepsi', 'Coca-Cola', 'Coca-Cola', 'Pepsi', 'Pespi', 'Pepsi', '7Up', '7up', 'Cola', 'Pepsi']

在第一步之后,列表将是:

^{pr2}$

在第二步中,我将使用ngram包来尝试匹配更接近的文本以更正拼写错误。 重要提示:我的一个关键要求是要有一个对语言不可知的解决方案。在

我的问题是NGRAM在长文本上工作得很好,但是在短文本上却表现得很差。例如,运行时:

ngram.NGram.compare('Pepsi', 'Pespi')

结果将是:

0.2727272727272727

这是一个非常低的'分数',但正如你所看到的字符串非常接近,只有一个字母是错放的。在

我能做些什么来提高我的不信任感?我需要使用不同的算法吗?或者为这个测试指定不同的参数?我考虑过添加一个包含我发现的所有“新”单词的字典,添加它们,然后我可以将每个单词与之进行比较,但是这样我就失去了脚本的粒度。在


Tags: 文本脚本名称内容列表单词计数小写
1条回答
网友
1楼 · 发布于 2024-10-01 22:42:35

如果你想拼写检查输入的正确性,还是只想对它们进行分组,这从你的问题中并不明显。例如,如果您的输入看起来像['coka-cola', 'coak-cola', 'coca-coca'],那么您的算法应该怎么做?在

  • 它是否应该将它们全部分组为{'coka-cola': 3}?意思是总是将输入与第一次出现的比较?在这种情况下,edit distance是有意义的,您可以很容易地找到许多python实现。

  • 它是否应该按照正确的拼写对它们进行分组,所以{'coka-cola': 3}?在这种情况下,你需要一个好的拼写矫正器。这里有几个选项,您可以看看autocorrect包,或者更复杂的解决方案,NLTK包。另一个选择是使用谷歌。我不认为Google有一个支持的API来拼写正确,所以在向Google发出请求时,您必须进行一些刮取来获得建议的结果。

相关问题 更多 >

    热门问题