2010-06-09 1 views
3

У меня есть список строк (имена компаний, в данном случае), и Java-программа, которая извлекает список вещей, которые выглядят как названия компаний из преимущественно неструктурированного текста. Мне нужно сопоставить каждый элемент выделенного текста с строкой в ​​списке. Предостережение: у неструктурированного текста есть опечатки, такие вещи, как «Бла, Инк.» называемый «Бла» и т. д. Я пробовал «Редактировать расстояние» Левенштейна, но это не удается по предсказуемым причинам. Известны ли наилучшие методы решения этой проблемы? Или вернусь к ручному вводу данных?Disambiguating Named Entities в Java

ответ

3

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

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

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

2

В работе, которую мы делаем в моей компании, мы постоянно сталкиваемся с этим типом проблемы. Наиболее успешные усилия, которые я видел, используют всего несколько страниц кода Python. Python отлично подходит для анализа и анализа струн, и вы можете вызвать подпрограмму Python из вашей Java-программы. Как сказал Грег, правильный ответ сильно зависит от качества вашего неструктурированного текста. Хороший способ начать - количественно охарактеризовать, как он выравнивается с вашим золотым текстом. (Например, вы можете найти, что можете сопоставить 80% этого, просто добавив некоторые обычные чередующиеся строки соответствия, такие как «Бла» и «BLAH INC», а не просто «Blah Inc.»)

4

Возможно, вам стоит взглянуть на Apache Stanbol, он подключает NER-двигатели (я думаю, что он основан на предоставленном вами справочнике географических названий) и связывая двигатели для решения ваших обнаруженных объектов. Я не использовал его сам, и он все еще находится в инкубации, но может подойти к тому, что вы ищете.

Существует также немного исследований в этом пространстве на дорожке популяции TAC Knowledge Base (Entity Linking). Задача всплывает в разных местах, и вам также должно быть повезло на конференциях, таких как ACL, EMNLP, SIGIR и т. Д. (Этот список ни в коем случае не является полным).

Системы TAC ссылаются на подмножество Википедии, что может помочь с изменением имени, поскольку страницы имеют «перенаправления», которые по существу являются псевдонимами для определенной страницы.

Например, следующие страницы перенаправляются на «Apple Inc.», но вы, вероятно, захотите извлечь перенаправления либо из необработанного дампа Википедии, либо из чистого источника, такого как DBPedia или Freebase.

  • AAPL
  • Компания Apple
  • Apple Computer
  • Apple Computer Co.
  • Apple Computer Inc.
  • Apple Computer Инкорпорейтед
  • Apple Computer, Inc
  • Apple Computer, Inc.
  • компании Apple Inc
  • компании Apple Incorporate
  • компании Apple Инкорпорейтед
  • компании Apple compputer
  • компании Apple Computer Inc
  • Apple Inc
  • Apple Inc.
  • ...