Phi*_*röm 6 python nlp fuzzy-search
我已经实现了一个模糊匹配算法,我想使用一些带有测试数据的示例查询来评估它的召回率。
假设我有一个包含文本的文档:
{"text": "The quick brown fox jumps over the lazy dog"}
Run Code Online (Sandbox Code Playgroud)
我想看看我是否可以通过测试诸如“sox”或“hazy drog”而不是“fox”和“lazy dog”之类的查询来检索它。
换句话说,我想向字符串添加噪音以生成拼写错误的单词(错别字)。
自动生成带有拼写错误的单词以评估模糊搜索的方法是什么?
我只是创建一个程序来随机改变你的话中的字母。我想你可以详细说明你的案例的具体要求,但总体思路是这样的。
假设你有一个短语
phrase = "The quick brown fox jumps over the lazy dog"
Run Code Online (Sandbox Code Playgroud)
然后定义一个单词改变的概率(比如 10%)
p = 0.1
Run Code Online (Sandbox Code Playgroud)
然后循环遍历短语中的单词,并从每个单词的均匀分布中进行采样。如果随机变量低于您的阈值,则随机更改单词中的一个字母
import string
import random
new_phrase = []
words = phrase.split(' ')
for word in words:
outcome = random.random()
if outcome <= p:
ix = random.choice(range(len(word)))
new_word = ''.join([word[w] if w != ix else random.choice(string.ascii_letters) for w in range(len(word))])
new_phrase.append(new_word)
else:
new_phrase.append(word)
new_phrase = ' '.join([w for w in new_phrase])
Run Code Online (Sandbox Code Playgroud)
就我而言,我得到了以下有趣的短语结果
print(new_phrase)
'The quick brown fWx jumps ovey the lazy dog'
Run Code Online (Sandbox Code Playgroud)
我自己没有使用过这个,但是通过谷歌快速搜索发现了https://www.dcs.bbk.ac.uk/~ROGER/corpora.html,我想你可以用它来获取文本中单词的频繁拼写错误。您还可以使用键盘距离自己生成拼写错误,如下所述,我猜:编辑距离,例如 Levenshtein,考虑键盘上的邻近度 除了 上面提到的数据库/语料库之外,也许还有一些其他频繁拼写错误的数据库/语料库,因为我会猜测只是随机插入/删除/更改总编辑距离为(例如,最大 3)的字符不会对您的系统进行有用的评估,因为人们不会随机犯错误,而是在以下类型中表现出简单的逻辑模式(拼写)错误。