В python вы можете использовать библиотеку fuzzywuzzy , чтобы сопоставить набор фраз с каноническим / нормализованным набором фраз через связанный список фраз или слов «синоним». Хитрость заключается в правильном сегментации ваших фраз (например, когда запятые разделяют фразы и когда они объединяют списки связанных слов в фразе?)
Вот структура python dict в RAM. Ваша структура данных в C или базе данных будет похожа:
phrase_dict = {
'alternative phrase': 'canonical phrase',
'alternative two': 'canonical phrase',
'less common phrasing': 'different canonical phrase',
}
from fuzzywuzzy.process import extractOne
phrase_dict[extractOne('unknown phrase', phrase_dict)[0]]
и это возвращает
'canonical phrase'
FuzzyWuzzy, кажется, использует что-то вроде упрощенного расстояния редактирования Левенштейна ... это быстро, но плохо справляется с использованием заглавных букв (сначала нормализуйте ваш случай), звуков слов (есть и другие библиотеки, например soundex , который может хэшировать фразы по тому, как они звучат) или значениям слов (для этого и нужен словарь фраз).