Я пытаюсь сделать Entity Extraction (больше похоже на сопоставление) в Lucene.Вот пример рабочего процесса:
Учитывая некоторый текст (из URL) И список имен людей, попробуйте извлечь имена людей из текста.
Примечание:
Имена людей не полностью нормализованы.Например, некоторые из них - мистер X, миссис Y, а некоторые - просто Джон Доу, X и Y. Другие префиксы и суффиксы, о которых стоит подумать: младший, старший, доктор, I, II ... и т. д. (не позволяйте мненачать работу с неамериканскими именами.)
Я использую Lucene MemoryIndex для создания в памяти индекса текста из каждого URL-адреса (удаление HTML-тегов) и использую StandardAnalyzer длязапросить список всех имен, по одному (100 тыс. имен, есть ли другой способ сделать это? В среднем это занимает около 8 секунд в среднем у меня есть текст).
AОсновная проблема заключается в том, что для устранения шума я использую оценку 0,01 в качестве базовой оценки, а запросы типа «Мистер Джон Доу» имеют значительно меньшую оценку по сравнению с «Джон Доу», если текст содержит «Джон Доу» и во многих случаях.дела не достигают порогового значения 0,01.
Другая проблема заключается в том, что если я нормализую все имена и начну удалять все случаи доктора мистера миссис и т. д., то я начну пропускать хорошие совпадения, такие как «доктор Джон Эдвард II»и в конечном итоге много нежелательных матчей, как"Мистер.Джон Эдвард ".
Я понимаю, что Lucene может быть и не подходящим инструментом для работы, но пока он не оказался слишком плохим. Любая помощь приветствуется.