Как мне сделать 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://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...