我有一个包含品牌名称的文本列表(可口可乐、百事可乐、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.compare('Pepsi', 'Pespi')其结果将是:
0.2727272727272727这是一个非常低的‘分数’,但你可以看到,字符串是真的很接近,只有一个字母是错误的。
我能做些什么来提高我的欲望呢?我需要使用不同的算法吗?或者为这个测试指定不同的参数?我想添加一本字典,其中包含我找到的所有“新”单词,然后添加它们,然后我可以比较每个单词与它,但然后我失去了脚本的粒度。
发布于 2016-11-20 11:27:59
从你的问题中可以看出,如果你想拼写-检查输入的正确性,或者你只想把它们分组。例如,如果您的输入看起来像['coka-cola', 'coak-cola', 'coca-coca'],那么您的算法应该做什么?
https://stackoverflow.com/questions/40703243
复制相似问题