Пометка имен с использованием Lucene/ Java

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

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

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

2 ответа

Решение

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

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

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