【问题标题】:Fuzzy String Matching模糊字符串匹配
【发布时间】:2014-11-02 05:57:24
【问题描述】:

我的应用程序要求将用户输入的字符串值与数据存储区进行模糊匹配。

我基本上是在尝试在将数据添加到系统的过程中找到可能的重复项。

我看过 Metaphone、Double Metaphone 和 SoundEx,我得出的结论是它们在处理单个单词输入字符串时都很好;但是我试图匹配未定义数量的单词(它们实际上是地名)。

我确实考虑过从字符串中实际拆分每个单词(删除我定义为干扰词的任何单词),然后实现一些逻辑来确定我的数据存储中哪些地名最匹配(基于算法中的键我选择);我在这方面看到的优势是我可以选择性地收紧或放松匹配标准以适应应用程序:但这对我来说似乎有点脏。

所以我的问题是:

1:我是否以正确的方式解决这个问题,是的,我知道这会很昂贵;但是(无需深入了解实现)此信息将来自 memcache 数据库。

2:是否有任何算法已经专门用于语音匹配多个单词?如果是这样,请您提供一些关于它们的信息,如果可能的话,它们的优势和局限性。

【问题讨论】:

  • 目前还不是很清楚你到底想做什么。输入是什么?预期的输出是什么?
  • 如果您不想将名称标记为单词,那么字符二元组和三元组值得研究。 en.wikipedia.org/wiki/N-gram
  • 你可以试试 Levensthein 距离,它返回一个数字来表示两个字符串之间的差异。它是否有助于为“语音”找到正确的拼写(你能举一个例子吗?)可以很容易地测试。大多数示例都是针对单个单词的,但它也可以处理更长的字符串。

标签: string algorithm search fuzzy-search


【解决方案1】:

您可能想查看Locality-sensitive Hash,例如Nilsimsa Hash。我使用 Nilsimsa 对各个城市的 craigslist 帖子进行“散列”以搜索重复项(注意:我不是 CL 员工,只是我正在从事的个人项目)。

这些方法中的大多数并不像您希望的那样可调(基本上您可以获得一些松散定义的“编辑距离”指标),并且它们不是语音,仅基于字符。

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2018-05-31
    • 2021-04-19
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多