Интересно, если в Perl/MySQL, если возможно построить список вариантов слов на основе заданного слова, к которому слово может иметь общие ошибки OCR (т.е. 8 вместо b)? Другими словами, если у меня есть список слов, и в этом списке есть слово «Алфавит», то есть способ расширить или построить новый список, чтобы включить мое исходное слово плюс варианты ошибок OCR «Алфавит»? Так что в моем выходе, я мог бы иметь следующие варианты для алфавита, возможно:Автоматическое построение выходного списка возможных слов из ошибок OCR, основанных на заданной совокупности слов
Alphabet
A1phabet
Alpha8et
A1pha8et
Конечно, было бы полезно для кода для большинства, если не всех общих иных ошибок, которые появляются в OCR'ed тексте. Такие вещи, как 8 вместо b, или 1 вместо l. Я не хочу исправлять ошибки, потому что в моих данных я мог бы иметь ошибки OCR, но хочу создать вариантный список слов в качестве моего вывода, основанный на списке слов, которые я даю ему как вход. Поэтому, по моим данным, у меня может быть Alpha8et, но если я сделаю простой поиск алфавита, он не найдет этой очевидной ошибки.
Мой быстрый и грязный подход MySQL
Select * from
(SELECT Word
FROM words
union all
-- Rule 1 (8 instead of b)
SELECT
case
when Word regexp 'b|B' = 1
then replace(replace(Word, 'B','8'),'b','8')
end as Word
FROM words
union all
-- Rule 2 (1 instead of l)
SELECT
case
when Word regexp 'l|L' = 1
then replace(replace(Word, 'L','1'),'l','1')
end as Word
FROM words) qry
where qry.Word is not null
order by qry.Word;
Я думаю, что должно быть более автоматизированный и чистым методом
Спасибо. Решение Ruby выглядит интересно. В p-вариантах («Алфавит») есть способ изменить его так, что он принимает слово из слова «words.txt» (каждое слово в строке), а затем выводит эти вариации в файл (опять один слово в строке)? Мои мысли были бы из командной строки сделать что-то вроде этого «ruby changes.rb words.txt», возможно, – user1236443
@ user1236443. Я добавил пример основного цикла для этого. –
Происходит ли основной цикл до или после вариаций def? – user1236443