Perl/MySQL で、特定の単語に基づいて、その単語に一般的な OCR エラーが発生する可能性がある (つまり、b ではなく 8) 異体字のリストを作成できるかどうか疑問に思います。つまり、単語のリストがあり、そのリストに「Alphabet」という単語がある場合、元の単語と「Alphabet」の OCR エラーバリアントを含めるために新しいリストを拡張または作成する方法はありますか? したがって、私の出力では、Alphabet に次のバリアントを含めることができます。
Alphabet
A1phabet
Alpha8et
A1pha8et
もちろん、OCR されたテキストに現れる一般的なエラーのすべてではないにしても、ほとんどをコーディングすることは有用です。b の代わりに 8、l の代わりに 1 のようなもの。データ自体にOCRエラーが発生する可能性があるため、エラーを修正するつもりはありませんが、入力として与える単語のリストに基づいて、出力として単語のバリアントリストを作成したいと考えています。したがって、私のデータには Alpha8et があるかもしれませんが、Alphabet を単純に検索しても、この明らかなエラーは見つかりません。
私の手っ取り早い 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;
もっと自動化された、よりクリーンな方法が必要だと思います