Database 段落中多词短语的模糊匹配算法

Database 段落中多词短语的模糊匹配算法,database,string,algorithm,search,fuzzy-search,Database,String,Algorithm,Search,Fuzzy Search,首先,我不是在寻找实际的模糊匹配算法。我们同时使用了Dice系数和Levenshtein距离。我正在寻找最聪明的方法来利用这些算法 目标: 我试图在文本的一段中,按照城市名称出现的顺序来检测城市名称。我们有大约100万个地点名称的列表。我想搜索一段文字,并检测其中一个位置是否存在,然后存储该城市。位置名称可以是单个或多个单词 示例段落: 嗨,妈妈!山姆和我正在考虑在加拿大进行公路旅行 下个月。我们知道我们已经可以住在魁北克的约翰家了 城市。我知道你在加拿大旅行过很多次,所以我想 你的建议 就像我

首先,我不是在寻找实际的模糊匹配算法。我们同时使用了Dice系数和Levenshtein距离。我正在寻找最聪明的方法来利用这些算法

目标:

我试图在文本的一段中,按照城市名称出现的顺序来检测城市名称。我们有大约100万个地点名称的列表。我想搜索一段文字,并检测其中一个位置是否存在,然后存储该城市。位置名称可以是单个或多个单词

示例段落:

嗨,妈妈!山姆和我正在考虑在加拿大进行公路旅行 下个月。我们知道我们已经可以住在魁北克的约翰家了 城市。我知道你在加拿大旅行过很多次,所以我想 你的建议

就像我说的,我们从魁北克市开始,然后可能开车去 前往哈利法克斯前的米拉米奇。两天后我们想去 布雷顿角。最后,我们想查看Advocate Harbor 芬迪湾、迪格比和圣伊丽莎白码头等

马上跟你说

预期结果

  • 加拿大
  • 魁北克市
  • 加拿大
  • 米拉米奇
  • 哈利法克斯
  • 布雷顿角
  • 倡导者港
  • 芬迪湾
  • 迪格比
  • 圣伊丽莎白码头
问题

我目前的障碍是如何用多个词来检测位置名称。我知道我可以将段落拆分成几个单词,然后将它们与我的列表进行比较,如:

  • 模糊匹配第一个单词与我的位置名称列表
  • 如果不匹配,则根据我的位置名称列表进行模糊匹配(第一个单词+第二个单词)
  • 如果不匹配,则对我的位置名称列表进行模糊匹配(第一个+第二个+第三个单词)
  • …等等

  • 这是我目前的方法,但速度非常慢,效率非常低。有没有一种聪明的方法可以完成我想要的任务?

    我认为一些字符串匹配算法非常适合你

    以下是他们的清单:


    在您的情况下,我认为您需要多个模式字符串匹配一个,例如

    是否可以将段落视为一行字符串,并使用某种字符串匹配算法?例如匹配多个模式(在您的案例中的位置)是的,这正是我要寻找的。它不做模糊匹配,但效果很好。将此作为答案提交,我会将其标记为正确。谢谢。很高兴知道它有帮助:)这很有效!作为其他人的参考,我最终使用了这个gem中的Aho-Corasick实现: