我已经实现了模糊匹配算法,我想使用一些带有测试数据的示例查询来评估其召回率。
假设我有一个包含以下文字的文档:
{"text": "The quick brown fox jumps over the lazy dog"}
我想看看是否可以通过测试“ sox”或“ hazy drog”而不是“ fox”和“ lazy dog”等查询来检索它。
换句话说,我想给字符串添加噪音以生成拼写错误的单词(打字错误)。
自动生成带有错字的单词以评估模糊搜索的方法是什么?
答案 0 :(得分:2)
我只会创建一个程序来随机更改您单词中的字母。我想您可以详细说明您的案例的特定要求,但是总体思路是这样的。
说你有一个短语
phrase = "The quick brown fox jumps over the lazy dog"
然后定义一个单词更改的可能性(例如10%)
p = 0.1
然后循环遍历您的词组,并从每个词组的均匀分布中取样。如果随机变量低于阈值,则从单词中随机更改一个字母
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])
就我而言,我得到了以下有趣的短语结果
print(new_phrase)
'The quick brown fWx jumps ovey the lazy dog'
答案 1 :(得分:1)
我自己没有使用过此功能,但我通过Google进行了快速搜索SQL Translate API,我想您可以用它来频繁地拼写文字中的单词。您还可以使用键盘距离自己生成拼写错误,如我所解释的,我猜:https://www.dcs.bbk.ac.uk/~ROGER/corpora.html 也许除了上面提到的数据库之外,还有其他一些数据库/语料库经常发生拼写错误,因为我猜想,随机插入/删除/更改字符的总levenhstein距离(例如,最大3)不会对有用的评估。您的系统,因为人们不会随机地犯错误,但是会在所犯的(拼写)错误类型中表现出简单的逻辑模式。