【问题标题】:Generate misspelled words (typos)生成拼写错误的单词(错字)
【发布时间】:2018-12-07 08:45:36
【问题描述】:

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

假设我有一个包含文本的文档:

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

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

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

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

【问题讨论】:

  • 您可以通过多种方式生成查询,但最难的部分是确定您想要覆盖的范围。您是否只对完全错误输入的单词感兴趣,或者我可以只对部分单词感兴趣(例如“jun”代表“jum”)。我可以使用不连续的单词(“quick sox”)吗?只有一个错字还是可能更多?缺少 withespace(“lazydog”)?拼写错误是随机的还是与键盘位置有关(例如,假设 qwerty,“n”代表“m”,而不是“q”代表“m”)?区分大小写重要吗?是否有任何 unicode 拼写错误(从口音到表情符号……)?我的意思是我想它可以像你想要的一样难或简单。
  • @jdehesa 我同意这是一个广泛的问题,但我认为任何关于特定范围的答案,例如键盘位置,可能很有用。然后,您可以通过从拼写错误生成器池中随机化来生成错误输入的单词。

标签: python nlp fuzzy-search


【解决方案1】:

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

假设你有一个短语

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'

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2015-05-06
      • 2010-10-16
      • 2018-11-25
      • 2020-12-20
      • 2020-06-02
      • 2021-10-05
      • 2020-09-22
      • 2014-11-10
      相关资源
      最近更新 更多