Пометка имен с использованием Lucene / Java - PullRequest
2 голосов
/ 31 августа 2011

У меня есть имена всех сотрудников моей компании (5000+).Я хочу написать движок, который может на лету найти имена в онлайн-статьях (блоги / вики / справочные документы) и пометить их тегом "mailto" с электронной почтой пользователей.

На данный момент я планируюудалите все стоп-слова из статьи, а затем найдите каждое слово в индексе люцены.Но даже в этом случае я вижу много запросов, попадающих в индексы, например, если есть статья с 2000 словами и только двумя ссылками на имена людей, то, скорее всего, будет 1000 запросов lucene.

Есть лиспособ уменьшить эти запросы?Или совершенно другой способ достижения того же самого?Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 01 сентября 2011

Если у вас есть только 5000 имен, я бы просто вставил их в хеш-таблицу в памяти, вместо того, чтобы возиться с Lucene.Вы можете хэшировать их несколькими способами (например, псевдонимами, первым-последним или последним-первым и т. Д.) И при этом иметь сравнительно небольшой объем памяти и действительно эффективную производительность.

1 голос
/ 01 сентября 2011

http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
Этот алгоритм может быть полезен для вас. Чтобы это работало, вы сначала скомпилируете весь список имен в гигантский конечный автомат (что, вероятно, займет некоторое время), но затем, когда этот конечный автомат создан, вы можете запустить его через любое количество документов и обнаруживать имена довольно эффективно.
Я думаю, что он будет смотреть на каждый символ в каждом документе только один раз, так что это должно быть намного эффективнее, чем разбивать документ на документы и сравнивать каждое слово со списком известных имен.
В сети доступно множество реализаций для разных языков. Проверьте это.

...