У меня есть список текстов, содержащих торговые марки (Coca-Cola, Pepsi, 7Up ect.). Я написал скрипт 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
Это очень низкий «счет», но, как вы можете видеть строку очень близко, и есть только одна буква, неуместен.
Что я могу сделать, чтобы улучшить свое желание? Нужно ли использовать другой алгоритм? Или, может быть, указать разные параметры для этого теста? Я подумал о добавлении словаря, который содержит все «новые» слова, которые я нашел, добавить их, затем я могу сравнить каждое слово с ним, но затем я теряю гранулярность скрипта.
Для опечаток было бы [levenshtein distance] (https://en.wikipedia.org/wiki/Levenshtein_distance) работать? – Aufziehvogel
Возможно, «низкий = хороший»? Во всяком случае, лично я предпочитаю использовать расстояние Левенштейна для проверки орфографии. Например, LD «missplaed» против «misplaced» - «2». Разделение на длину слова составляет 2/9, что довольно близко. – usr2564301
В «NGRAM» вы хотите, чтобы оценка была как можно ближе к 1, это означает, что строки идентичны. Я вообще думаю, что лучше всего запустить алгоритм NGRAM, и если бы он не нашел совпадения, чтобы попытаться запустить расстояние levenshtein или просто использовать расстояние levenshtein в этом случае? –