Как мне сделать Entity Extraction в Lucene

Я пытаюсь сделать Entity Extraction (больше похоже на сопоставление) в Lucene. Вот пример рабочего процесса:

Учитывая некоторый текст (из URL) И список имен людей, попробуйте извлечь имена людей из текста.

Замечания:

Имена людей не полностью нормализованы. Например, некоторые из них - мистер X, миссис Y, а некоторые - просто Джон Доу, X и Y. Другие префиксы и суффиксы, о которых стоит подумать: младший, старший, доктор, I, II... и т. д. (не позволяйте мне начать работу с не американскими именами).

Я использую Lucene MemoryIndex для создания в памяти индекса текста из каждого URL-адреса (удаление HTML-тегов) и использую StandardAnalyzer для запроса списка всех имен, по одному (имена 100 КБ, есть ли другой способ сделать это? В среднем это занимает около 8 секунд в среднем текст, который я имею).

Основная проблема заключается в том, что для устранения шума я использую оценку 0,01 в качестве базовой оценки, а запросы типа "Мистер Джон Доу" имеют значительно меньшую оценку по сравнению с "Джон Доу", если текст содержит "Джон Доу" и во многих случаях не хватает порога 0,01.

Другая проблема заключается в том, что если я нормализую все имена и начну удалять все случаи доктора мистера миссис и т. Д., То я начну пропускать хорошие матчи, такие как "доктор Джон Эдвард II", и получаю много ненужных матчей, таких как мистер. Джон Эдвард ".

Я понимаю, что Lucene может быть и не подходящим инструментом для работы, но пока он не оказался слишком плохим. Любая помощь приветствуется.

5 ответов

NEE - это задача НЛП, которая не является частью люцена. Для открытого исходного кода вы можете взглянуть на lingpipe, gate и opennlp. Существуют различные альтернативы за деньги.

GATE полностью основан на правилах, и его будет сложно использовать для высокой точности. Вам понадобится статистический движок для этого; У lingpipe есть один, но вы должны предоставить данные обучения. Я не в курсе содержимого opennlp в этой области.

OpenNPL полезен. http://opennlp.apache.org/

На сайте есть документация и примеры.

Для совсем непосвященных Книга "Укрощение текста": http://www.manning.com/ingersoll/ дает хороший обзор. Вы также можете скачать исходный код из книги по ссылке выше.

Эти проекты могут быть полезны для вас:

http://nlp.stanford.edu/ner/index.shtml

http://cogcomp.cs.illinois.edu/page/software_view/4

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

Вот типичный проект http://code.google.com/p/bibapp/wiki/AuthorAuthorities. И типичная публикация http://www.springerlink.com/content/lk07h1m311t130w4/.

Вот проект по дедупликации записей, который мы считаем полезным для устранения неоднозначности автора http://datamining.anu.edu.au/projects/linkage.html

Вы можете попробовать это.. http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html

Документация понятна, вы также можете использовать веб-сервис DBPedia-Spotlight...

http://spotlight.dbpedia.org/rest/spot/?text=

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