Избегайте синонимов в массиве, созданном с помощью AutoTag (алгоритм текстовых тегов)
Я работал над задачей анализа текста. Где я должен идентифицировать слова, которые чаще всего используются в абзаце.
Для этой цели я использую пакет algorithmia - npm. Это дает мне слова, которые чаще всего повторяются в моем тексте.
Пакет работает нормально, но все же у меня есть 2 проблемы:
(1) Я получаю массив тегов, как показано ниже:
['интегрировать', 'интеграцию', 'политику', 'беседу', 'демонстрацию', 'тестировать]
Здесь слова "интегрировать" и "интеграция" имеют одинаковое значение. Я хочу избежать здесь "интеграции".
(2) Процесс идентифицирует теги по наиболее повторяющимся словам. У меня есть такие слова, как "цена", "стоимость", "оплата" и т. Д. В моем вводном абзаце, но поскольку это не точное совпадение, я не получаю тег "стоимость" или что-то подобное.
Улучшение любой из логики поможет мне в решении этой задачи.
Я уже перепробовал множество библиотек для синонимов, существительных, глаголов и т. Д. Но вроде не получается. Отметим пакеты, которые я уже пробовал:
thesaurus-com
подобие предложения
подобие струн
компромисс
Wordnet
узел-снежок
развлечения
Я также попытался установить порог и сопоставить слова "интегрировать" и "интеграция", он удаляет тег "интегрировать", но также влияет на некоторые другие мои теги, которые должны быть там.
заранее спасибо
1 ответ
Ваша проблема лежит глубоко в понимании естественного языка. Вы имеете дело не только с "поиском" похожих слов, вы имеете дело с концепциями, которые подпадают под слова.
В вашем случае "Интеграция" и "Интеграция" совсем не похожи. Это даже не синонимы. Один - глагол, другой - существительное, один - действие, другой - ситуация.
Что они делают, так это то, что у них есть общий семантический корень -> идея объединения вещей как одного, целостного.
Нет доступных инструментов (на данный момент) для этого. Вы можете использовать множество инструментов.
Вы упомянули Wordnet и сказали, что он не работает. Однако это, вероятно, лучший вариант решения вашей проблемы. Собственное объяснение Wordnet показывает, насколько это полезно в вашей ситуации:
"[В WordNet] Существительные, глаголы, прилагательные и наречия сгруппированы в наборы когнитивных синонимов (синсетов), каждый из которых выражает отдельную концепцию. Синсеты взаимосвязаны посредством концептуально-семантических и лексических отношений". а также "WordNet внешне напоминает тезаурус в том, что он группирует слова вместе на основе их значений. Однако есть некоторые важные различия. Во-первых, WordNet связывает не только словоформы - цепочки букв - но и определенные смыслы слов. в результате слова, которые находятся в непосредственной близости друг от друга в сети, семантически устраняют неоднозначность ". - Официальный сайт WordNet
С помощью wordnet вы можете найти настоящие синонимы и сгруппировать их вместе (например, "цена" и "стоимость" - "оплата" - это отдельная история...).
Теперь, что касается ваших исходных 'интегрировать' и 'интеграцию', если вы действительно хотите сгруппировать их вместе, добавьте еще одну эвристику, которая использует стеммер для объединения слов на основе основы слова (не гарантируется, что она будет работать 100% времени, поскольку это зависит от стеммера. правила).