【发布时间】:2016-10-23 16:18:43
【问题描述】:
首先,我不是在寻找实际的模糊匹配算法。我们同时使用 Dice 的系数和 Levenshtein 距离。我正在寻找利用这些算法的最聪明的方法。
目标:
我正在尝试按照它们出现的顺序检测文本段落中的城市名称。我们有一个大约 100 万个位置名称的列表。我想搜索一段文本,并检测其中一个位置何时存在,然后存储该城市。位置名称可以是单个或多个单词。
示例段落:
嗨,妈妈!山姆和我正在考虑穿越加拿大 下个月。我们知道我们已经可以住在魁北克的约翰家了 城市。我知道你在加拿大旅行了很多次,所以我想去 你的建议。
就像我说的,我们将从魁北克市开始,然后可能会开车到 Miramichi,然后前往哈利法克斯。 2天后我们想去 布雷顿角。最后,我们想看看 Advocate Harbor 看看 芬迪湾、迪格比和圣伊丽莎白码头
马上和你谈谈!
预期结果
- 加拿大
- 魁北克市
- 加拿大
- Miramichi
- 哈利法克斯
- 布雷顿角
- 倡导港
- 芬迪湾
- 迪格比
- 圣伊丽莎白码头
问题
我目前的障碍是如何检测包含多个单词的位置名称。我知道我可以将段落拆分为单词,然后将它们与我的列表进行比较,例如:
- 根据我的位置名称列表模糊匹配第一个单词
- 如果不匹配,则对我的位置名称列表进行模糊匹配(第一个单词 + 第二个单词)
- 如果不匹配,对我的位置名称列表进行模糊匹配(第一个 + 第二个 + 第三个单词)
- ...等
这是我目前的方法,但它非常缓慢且效率低下。有没有一种聪明的方法可以完成我正在寻找的东西?
【问题讨论】:
-
能否将段落视为单行字符串,并使用某种字符串匹配算法?例如en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm 匹配多个模式(在您的情况下为位置)
-
是的,这正是我想要的。它不会进行模糊匹配,但效果很好。将此作为答案提交,我会将其标记为正确。
-
谢谢。很高兴知道它有帮助:)
标签: database string algorithm search fuzzy-search