我有我公司所有员工的名字(5000+)。我想编写一个引擎,可以动态地在线文章(博客/维基/帮助文档)中找到名称,并用用户电子邮件标记“mailto”标签。
截至目前,我计划从文章中删除所有停用词,然后在lucene索引中搜索每个单词。但即使在这种情况下,我也会看到大量的查询命中索引,例如,如果有一篇文章有2000个单词而且只有两个人名参考,那么很可能会有1000个lucene查询。
有没有办法减少这些查询?还是完全相同的另一种方式? 提前致谢
答案 0 :(得分:5)
如果你只有5000个名字,我会把它们放在记忆中的哈希表中,而不是用Lucene打扰。您可以通过多种方式对它们进行哈希处理(例如,昵称,倒数第一或最后一次等),并且仍然具有相对较小的内存占用和非常高效的性能。
答案 1 :(得分:1)
http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
该算法可能对您有用。这样做的方法是首先将整个名称列表编译成一个巨大的有限状态机(这可能需要一段时间),但是一旦构建了这个状态机,你可以通过你想要的任意数量的文件来运行它。非常有效地检测姓名
我认为它只会查看每个文档中的每个字符一次,因此它应该比标记文档并将每个单词与已知名称列表进行比较更有效。
Web上有许多可用于不同语言的实现。看看吧。