Нечеткая группировка, группировка похожих слов

этот вопрос задавался здесь раньше

Какова хорошая стратегия для группировки похожих слов?

но четкого ответа о том, как «группировать» элементы, не дается. Решение, основанное на difflib, в основном заключается в поиске, для данного элемента difflib может вернуть наиболее похожее слово из списка. Но как это можно использовать для группировки?

Я хотел бы уменьшить

['ape', 'appel', 'apple', 'peach', 'puppy']

к

['ape', 'appel', 'peach', 'puppy']

или

['ape', 'apple', 'peach', 'puppy']

Одна из идей, которые я пробовал, заключалась в том, чтобы для каждого элемента выполнить итерацию по списку, если get _close _совпадений возвращает более одного совпадения, используйте его, если нет, оставьте слово как есть. Это частично сработало, но он может предложить apple вместо appel, затем appel вместо apple, эти слова просто поменяются местами, и ничего не изменится.

Буду признателен за любые указатели, названия библиотек и т. д.

Обратите внимание :также с точки зрения производительности: у нас есть список из 300 000 элементов, и получение _близких _совпадений кажется немного медленным. Кто-нибудь знает решение на основе C/++?

Спасибо,

Примечание :Дальнейшее исследование показало, что kmedoid является правильным алгоритмом (, а также иерархической кластеризацией ), поскольку kmedoid не требует «центров», он берет/использует сами точки данных в качестве центров (эти точки называются медоидами, отсюда и название ). В случае группировки слов медоид будет репрезентативным элементом этой группы/кластера.

6
задан Community 23 May 2017 в 12:13
поделиться