Избегайте синонимов в массиве, созданном с помощью AutoTag (алгоритм текстовых тегов)

Я работал над задачей анализа текста. Где я должен идентифицировать слова, которые чаще всего используются в абзаце.

Для этой цели я использую пакет algorithmia - npm. Это дает мне слова, которые чаще всего повторяются в моем тексте.

Пакет работает нормально, но все же у меня есть 2 проблемы:

(1) Я получаю массив тегов, как показано ниже:

['интегрировать', 'интеграцию', 'политику', 'беседу', 'демонстрацию', 'тестировать]

Здесь слова "интегрировать" и "интеграция" имеют одинаковое значение. Я хочу избежать здесь "интеграции".

(2) Процесс идентифицирует теги по наиболее повторяющимся словам. У меня есть такие слова, как "цена", "стоимость", "оплата" и т. Д. В моем вводном абзаце, но поскольку это не точное совпадение, я не получаю тег "стоимость" или что-то подобное.

Улучшение любой из логики поможет мне в решении этой задачи.


Я уже перепробовал множество библиотек для синонимов, существительных, глаголов и т. Д. Но вроде не получается. Отметим пакеты, которые я уже пробовал:

thesaurus-com

подобие предложения

подобие струн

компромисс

Wordnet

узел-снежок

развлечения


Я также попытался установить порог и сопоставить слова "интегрировать" и "интеграция", он удаляет тег "интегрировать", но также влияет на некоторые другие мои теги, которые должны быть там.


заранее спасибо

1 ответ

Решение

Ваша проблема лежит глубоко в понимании естественного языка. Вы имеете дело не только с "поиском" похожих слов, вы имеете дело с концепциями, которые подпадают под слова.

В вашем случае "Интеграция" и "Интеграция" совсем не похожи. Это даже не синонимы. Один - глагол, другой - существительное, один - действие, другой - ситуация.

Что они делают, так это то, что у них есть общий семантический корень -> идея объединения вещей как одного, целостного.

Нет доступных инструментов (на данный момент) для этого. Вы можете использовать множество инструментов.

Вы упомянули Wordnet и сказали, что он не работает. Однако это, вероятно, лучший вариант решения вашей проблемы. Собственное объяснение Wordnet показывает, насколько это полезно в вашей ситуации:

"[В WordNet] Существительные, глаголы, прилагательные и наречия сгруппированы в наборы когнитивных синонимов (синсетов), каждый из которых выражает отдельную концепцию. Синсеты взаимосвязаны посредством концептуально-семантических и лексических отношений". а также "WordNet внешне напоминает тезаурус в том, что он группирует слова вместе на основе их значений. Однако есть некоторые важные различия. Во-первых, WordNet связывает не только словоформы - цепочки букв - но и определенные смыслы слов. в результате слова, которые находятся в непосредственной близости друг от друга в сети, семантически устраняют неоднозначность ". - Официальный сайт WordNet

С помощью wordnet вы можете найти настоящие синонимы и сгруппировать их вместе (например, "цена" и "стоимость" - "оплата" - это отдельная история...).

Теперь, что касается ваших исходных 'интегрировать' и 'интеграцию', если вы действительно хотите сгруппировать их вместе, добавьте еще одну эвристику, которая использует стеммер для объединения слов на основе основы слова (не гарантируется, что она будет работать 100% времени, поскольку это зависит от стеммера. правила).

Другие вопросы по тегам