生成拼写错误的单词(错别字)

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”之类的查询来检索它。

换句话说,我想向字符串添加噪音以生成拼写错误的单词(错别字)。

自动生成带有拼写错误的单词以评估模糊搜索的方法是什么?

kos*_*nik 5

我只是创建一个程序来随机改变你的话中的字母。我想你可以详细说明你的案例的具体要求,但总体思路是这样的。

假设你有一个短语

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)


Igo*_*gor 3

我自己没有使用过这个,但是通过谷歌快速搜索发现了https://www.dcs.bbk.ac.uk/~ROGER/corpora.html,我想你可以用它来获取文本中单词的频繁拼写错误。您还可以使用键盘距离自己生成拼写错误,如下所述,我猜:编辑距离,例如 Levenshtein,考虑键盘上的邻近度 除了 上面提到的数据库/语料库之外,也许还有一些其他频繁拼写错误的数据库/语料库,因为我会猜测只是随机插入/删除/更改总编辑距离为(例如,最大 3)的字符不会对您的系统进行有用的评估,因为人们不会随机犯错误,而是在以下类型中表现出简单的逻辑模式(拼写)错误。