我想知道在 Perl/MySQL 中是否可以根据给定的单词构建一个变体单词列表,该单词可能会发生常见的 OCR 错误(即 8 而不是 b)?换句话说,如果我有一个单词列表,并且该列表中有单词“Alphabet”,那么有没有办法扩展或构建一个新列表以包含我的原始单词以及“Alphabet”的 OCR 错误变体?所以在我的输出中,我可能对 Alphabet 有以下变体:
Alphabet
A1phabet
Alpha8et
A1pha8et
当然,为 OCR 文本中出现的大多数(如果不是全部)常见错误编码将很有用。比如 8 代替 b,或 1 代替 l。我不想修复错误,因为在我的数据本身中我可能有 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;
我认为必须有一种更自动化和更清洁的方法