Частичное совпадение по словарю - PullRequest
2 голосов
/ 06 января 2012

Я работаю с GATE (Java Based NLP Framework) и хочу найти слова с частичным совпадением со словарем.Например, у меня есть словарь болезней со следующими терминами

Congestive cardiac failure
Congestive Heart Failure
Colon Cancer
      .
      . 
      .
Thousands of more terms

Давайте предположим, что у меня есть строка "Father had cardiac failure last year" из этой строки. Я хочу идентифицировать «сердечную недостаточность» как частичное совпадение, потому что это происходит как часть терминав словаре.

Я видел некоторое обсуждение подобной темы в Python, JS и C #, но я не уверен, что может помочь в таком случае здесь.Интересно, смогу ли я использовать здесь Aho-Corrasick.

Ответы [ 3 ]

1 голос
/ 06 января 2012

Возникает вопрос, какие подстроки вы хотите включить в поиск.Если бы вы включили все подстроки, то просто «Сердце» тоже подойдет, но это не совсем болезнь.Возможно, все подстроки с выравниванием по правому краю (слово) (возможно, с длиной> 1) были бы приемлемы.

Итак, одну вещь, которую вы могли бы сделать, - это обучить сопоставителю шаблонов Aho-Corrasick с помощью подстрок, которые вы хотите включить.Чтобы сохранить информацию о том, из какого словарного термина взята подстрока, вам, вероятно, нужно немного изменить алгоритм (если важно сохранить эту информацию) или создать другую структуру данных, чтобы потом ее искать.

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

1 голос
/ 10 января 2012

Дополнение UIMA Concept Mapper включает в себя функциональность, аналогичную той, которую вы ищете.Вы можете рассмотреть:

  • включая использование UIMA внутри GATE: http://gate.ac.uk/userguide/chap:uima
  • разработать аналогичный компонент, используя основные идеи из аддона
1 голос
/ 06 января 2012

Может быть, вы должны использовать Lucene .Обрабатывайте каждую строку словаря как документ, а каждое предложение в тексте - как запрос.

...