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

时间:2018-06-28 09:59:33

标签: python nlp fuzzy-search

我已经实现了模糊匹配算法,我想使用一些带有测试数据的示例查询来评估其召回率。

假设我有一个包含以下文字的文档:

{"text": "The quick brown fox jumps over the lazy dog"}

我想看看是否可以通过测试“ sox”或“ hazy drog”而不是“ fox”和“ lazy dog”等查询来检索它。

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

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

2 个答案:

答案 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)不会对有用的评估。您的系统,因为人们不会随机地犯错误,但是会在所犯的(拼写)错误类型中表现出简单的逻辑模式。