有没有办法对字符串上的单词进行模糊字符串匹配?

Posted

技术标签:

【中文标题】有没有办法对字符串上的单词进行模糊字符串匹配?【英文标题】:Is there a way to do fuzzy string matching for words on string? 【发布时间】:2021-01-04 12:10:48 【问题描述】:

我想对带有单词的字符串进行模糊匹配。

目标字符串可能是这样的。 “你好,我今天去看电影。” 我要搜索的词在哪里。 “flim toda”。

这有望返回“今日电影”作为搜索结果。

我用过这种方法,但似乎只能用一个词。

import difflib

def matches(large_string, query_string, threshold):
    words = large_string.split()
    matched_words = []
    for word in words:
        s = difflib.SequenceMatcher(None, word, query_string)
        match = ''.join(word[i:i+n] for i, j, n in s.get_matching_blocks() if n)
        if len(match) / float(len(query_string)) >= threshold:
            matched_words.append(match)
    return matched_words
large_string = "Hello, I am going to watch a film today"
query_string = "film"
print(list(matches(large_string, query_string, 0.8)))

这仅适用于一个单词,并且在噪音很小时返回。

有什么办法可以对单词进行这种模糊匹配吗?

【问题讨论】:

【参考方案1】:

您正在考虑的功能称为“查询建议”,它确实依赖于拼写检查,但它依赖于基于搜索引擎查询日志构建的马尔可夫链。

话虽如此,您使用的方法类似于此答案中描述的方法:https://***.com/a/58166648/140837

【讨论】:

以上是关于有没有办法对字符串上的单词进行模糊字符串匹配?的主要内容,如果未能解决你的问题,请参考以下文章

模糊搜索算法(近似字符串匹配算法)

Excel VBA,一种模糊匹配

基于条件的 2 个大型数据集上的模糊模糊字符串匹配 - python

mysql关键字匹配度模糊查询

perl 正则表达式 模糊匹配

求一个基于java的模糊匹配算法