基于字典的文本分析与近似匹配

时间:2013-07-11 21:45:27

标签: search lucene named-entity-recognition text-analysis named-entity-extraction

我有一个包含超过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. 阶段“疯狂:一遍又一遍地做同样的事情”将与完整阶段“疯狂:一遍又一遍地做同样的事情并期待不同的结果
  2. 阶段“疯狂:再次做同样的事情并期待不同的结果”将与完整阶段“疯狂:再次对做同样的事情并期待不同的结果”相匹配< / LI>

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

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

2 个答案:

答案 0 :(得分:2)

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

根据您的任务,您可能会使用您需要匹配的短语来实现自己的inverted index。或者你可以实现一个增强的Levenshtein distance,为特定的短语提供更好的分数。

答案 1 :(得分:0)

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

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