【发布时间】:2023-04-07 08:48:01
【问题描述】:
我有一个数百万名人的名字列表(来自 Wikidata),我需要创建一个系统来有效地找到在相当短的文本中提到的所有人:它可以只是一个词(例如,“爱因斯坦” ) 到几页文本(例如维基百科页面)。
我需要系统能够容忍拼写错误(例如 Mikael Jackson 而不是 Michael Jackson)和短格式(例如 M. Jackson)。如果有歧义,它应该返回所有可能的人(例如,“George Bush”应该返回父亲和儿子,可能还有其他同音词)。
这个related question 有一些有趣的答案,包括使用Aho-Corasick algorithm。有多种语言的库,包括in Python。但是,它似乎不支持模糊搜索(即容忍拼写错误)。
我想我可以扩展词汇表以包含每个名称的所有可能拼写,但这会使词汇表太大,所以我宁愿尽可能避免这种情况(此外,我可能希望将此解决方案扩展到更多只有一个人)。
我快速浏览了Lucene/ElasticSearch,但它似乎不支持这个用例(除非我错过了)。
有什么想法吗?
【问题讨论】:
标签: elasticsearch lucene full-text-search aho-corasick