有没有办法对字符串上的单词进行模糊字符串匹配?
Is there a way to do fuzzy string matching for words on string?
我想对字符串和单词进行模糊匹配。
目标字符串可能是这样的。
"你好,我今天去看电影。"
我要搜索的词在哪里。
"flim toda".
这有望 return“今日电影”作为搜索结果。
我用过这个方法,但是好像只用一个字就可以了。
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)))
这只适用于一个词,并且在噪音很小的情况下 returns。
有什么办法可以用词做这种模糊匹配吗?
您想到的功能称为“查询建议”,确实依赖于拼写检查,但它依赖于从搜索引擎查询日志构建的马尔可夫链。
也就是说,您使用的方法类似于此答案中描述的方法:
我想对字符串和单词进行模糊匹配。
目标字符串可能是这样的。
"你好,我今天去看电影。"
我要搜索的词在哪里。
"flim toda".
这有望 return“今日电影”作为搜索结果。
我用过这个方法,但是好像只用一个字就可以了。
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)))
这只适用于一个词,并且在噪音很小的情况下 returns。
有什么办法可以用词做这种模糊匹配吗?
您想到的功能称为“查询建议”,确实依赖于拼写检查,但它依赖于从搜索引擎查询日志构建的马尔可夫链。
也就是说,您使用的方法类似于此答案中描述的方法: