0

我有一个包含超过 200 万个名称、阶段、位置等的数据库/字典。样本数据如下:

“A person who never made a mistake never tried anything new”

“Nelson Mandela”

“United States of America”

“I didn't attend the funeral, but I sent a nice letter saying I approved of it.”

“Joseph Campbell”

“Insanity: doing the same thing over and over again and expecting different results”

“United Kingdom of Great Britain and Northern Ireland”

对于每个条目,都有一个 ID。

现在,当用户向我的网站提交文本时,将对文本进行分析,并以一定的容错性(近似匹配)查找文本中所有出现的名称、阶段和位置。举些例子:

  1. “精神错乱:一遍又一遍地做同样的事情”阶段将与完整的阶段“精神错乱:一遍又一遍地做同样的事情并期待不同的结果”相匹配</li>
  2. “精神错乱:一遍又一遍地做同样的事情并期待不同的结果”阶段将与完整的阶段“精神错乱:一遍又一遍地做同样的事情并期待不同的结果”相匹配< /li>

我不知道这是否是命名实体问题,因为我的数据库的阶段长度超过 2 行。我也不想找到确切的相位,我想近似匹配。

我正在寻找开源解决方案。提前致谢

4

2 回答 2

2

一种可能的解决方案是查看像Lucene这样的搜索引擎。它基本上创建了自己的数据库,您可以在其中放置文档 - 在您的情况下是“精神错乱:一遍又一遍地做同样的事情并期待不同的结果”。然后你可以用“Insanity, over and over”进行搜索,引擎会给你一个有序的结果列表。它是高度可配置的。

根据您的任务,您可能可以使用您需要匹配的可能短语来实现自己的倒排索引。或者,您可以实施增强的Levenshtein 距离,为特定短语提供更好的分数。

于 2013-08-27T07:30:44.993 回答
0

我知道这是一个老问题,但我找到了解决这个问题的方法,我想与大家分享。

https://github.com/flaxsearch/luwak现在是 Lucene 8.2 版本的一部分,它是一个“高性能存储查询引擎。简单地说,它允许您定义一组搜索查询,然后监控一个流任何可能匹配这些查询的文档:也称为“反向搜索”和“文档路由”的功能。”

于 2021-07-19T19:11:24.140 回答