У меня есть список текстов, содержащих названия брендов (Coca-Cola, Pepsi, 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 буква неуместна.
Что я могу сделать, чтобы улучшить свое отвращение? Нужно ли использовать другой алгоритм? Или, может быть, указать другие параметры для этого теста? Я подумал о том, чтобы добавить словарь, содержащий все «новые» слова, которые я нашел, добавить их, затем я могу сравнить каждое слово с ним, но тогда я теряю детализацию сценария.
2
. Разделив на длину слова, получится 2/9, что довольно близко. - person Jongware   schedule 20.11.2016