我有一个包含品牌名称(可口可乐、百事可乐、7Up 等)的文本列表。我编写了一个 python 脚本,它对所有具有相同内容的单元格进行排序和计数(完全相同的文本,在所有文本小写之后),并根据每个文本的计数重新排序列表,以便出现最多的文本首先出现,因为我认为大多数人都会正确地写出品牌名称。例如,如果我有以下列表:
texts = ['Coca-Cola', 'Pepsi', 'Coca-Cola', 'Coca-Cola', 'Pepsi', 'Pespi', 'Pepsi', '7Up', '7up', 'Cola', 'Pepsi']
在第一步之后,列表将是:
ordered_text = [
{'text': 'Pepsi', count: 4},
{'text': 'Coca-Cola', count: 3},
{'text': '7Up', count: 2},
{'text': 'Cola', count: 1},
{'text': 'Pespi', count: 1},
]
在第二步中,我使用ngram包尝试匹配更接近的文本以纠正拼写错误。重要提示:我的主要要求之一是拥有一个与语言无关的解决方案。
我的问题是 NGRAM 在长文本上效果很好,但在短文本上效果很差。例如运行时:
ngram.NGram.compare('Pepsi', 'Pespi')
结果将是:
0.2727272727272727
这是一个非常低的“分数”,但正如您所见,字符串非常接近,只有 1 个字母放错了位置。
我可以做些什么来改善我的欲望?我需要使用不同的算法吗?或者也许为此测试指定不同的参数?我考虑过添加一个字典,其中包含我找到的所有“新”单词,添加它们,然后我可以将每个单词与之进行比较,但是我失去了脚本的粒度。