database - 一段中多个词短语的模糊匹配算法

标签 database string algorithm search fuzzy-search

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

目标:

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

示例段落:

Hi Mom! Sam and I are thinking of road tripping through Canada in the next month. We know we can already stay at John's house in Quebec City. I know you have traveled a lot in Canada, so I wanted to get your advice.

Like I said, we'd start in Quebec city, then probably drive to Miramichi before heading to Halifax. After 2 days we want to go to Cape Breton. Finally, we want to check out Advocate Harbor to see things like the Bay of Fundy, Digby, and the Pier of St. Elizabeth

Talk to you soon!

预期结果

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

问题

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

  1. 将第一个词与我的位置名称列表进行模糊匹配
  2. 如果没有匹配,则与我的位置名称列表进行模糊匹配(第一个词 + 第二个词)
  3. 如果没有匹配,则与我的位置名称列表进行模糊匹配(第一个 + 第二个 + 第三个词)
  4. ...等等

这是我目前的方法,但它非常缓慢且效率低下。有没有一种聪明的方法可以实现我正在寻找的东西?

最佳答案

我认为某些字符串匹配算法非常适合您,

这是他们的列表:String Matching Algorithms

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

关于database - 一段中多个词短语的模糊匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955905/

相关文章:

c++ - 如何在 C 或 C++ 中反转字符串?

java - 判断一个数独是否有唯一解

javascript - 使用javascript删除内爆变量的值

algorithm - 图 - 如何计算从 v1 到 v2 所需的最小 "broken roads"数量?

java - 优化算法java

database - 图数据库建模

mysql - 数据库责任

sql - Excel导入Access

database - MQTT-Broker 与 WebServer 和数据库相遇

C++ 错误 : warning: multi-character character constant/atof usage