我已经实现了一个模糊匹配算法,我想使用一些样本查询和测试数据来评估它的召回率。
假设我有一个包含文本的文档:
{"text": "The quick brown fox jumps over the lazy dog"}我想看看我是否可以通过测试诸如"sox“或"hazy drog”之类的查询来检索它,而不是“狐狸”和“懒狗”。
换句话说,我想要在字符串中添加噪声,以生成拼写错误的单词(排字)。
,有什么方法可以自动生成带有排字的单词,,用于评价模糊搜索?
发布于 2018-06-28 10:27:40
我会创建一个程序随机改变字母在你的话。我想你可以详细说明你的案件的具体要求,但总的想法是这样的。
说你有个短语
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'发布于 2018-06-28 10:22:40
我本人也没有用过这个词,但是谷歌快速搜索发现了https://www.dcs.bbk.ac.uk/~ROGER/corpora.html,我想你可以用它来频繁地拼写你的文本中的单词。您也可以使用键盘距离来产生拼写错误,正如这里所解释的:Edit distance such as Levenshtein taking into account proximity on keyboard可能除了上面提到的错误外,还有其他一些常见拼写错误的数据库/语料库,因为我想,仅仅是随机插入/删除/更改字符(例如,最大值3)并不是对系统的有用评估,因为人们不会随机出错,而是在所犯的(拼写)错误类型中表现出简单的逻辑模式。
https://stackoverflow.com/questions/51079986
复制相似问题