Создать слова с ошибками (опечатки) - PullRequest
0 голосов
/ 28 июня 2018

Я реализовал алгоритм нечеткого сопоставления и хотел бы оценить его отзыв, используя несколько примеров запросов с тестовыми данными.

Допустим, у меня есть документ, содержащий текст:

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

Я хочу посмотреть, смогу ли я получить его, протестировав такие запросы, как "sox" или "hazy drog" вместо "fox" и "lazy dog".

Другими словами, я хочу добавить шум в строки, чтобы генерировать слова с ошибками (опечатки).

Каким будет способ автоматической генерации слов с опечатками для оценки нечеткого поиска?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я бы просто создал программу для случайного изменения букв в ваших словах. Я думаю, что вы можете уточнить конкретные требования вашего случая, но общая идея будет выглядеть следующим образом.

Скажем, у вас есть фраза

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'
0 голосов
/ 28 июня 2018

Сам этим не пользовался, но быстрый поиск в Google нашел https://www.dcs.bbk.ac.uk/~ROGER/corpora.html, который, я полагаю, вы можете использовать для частых опечаток слов в вашем тексте. Вы также можете создавать орфографические ошибки самостоятельно, используя расстояние от клавиатуры, как я объяснил здесь: Редактировать расстояние, например Левенштейн, с учетом близости на клавиатуре Возможно, есть некоторые другие базы данных / корпусы с частыми ошибками, отличные от упомянутых выше, потому что я предполагаю, что просто случайная вставка / удаление / изменение символов с общим расстоянием Левенштейна, скажем, максимум 3, не будет полезной оценкой вашей системы, поскольку люди не делают случайных ошибок, а демонстрируют простые логические схемы в типах (орфографических) ошибок.

...