- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道在 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;
我在想必须有一个更自动化和更清洁的方法
最佳答案
如果您有扫描文本的示例,同时包含扫描(原始)版本和更正版本,生成字符更正列表应该相对简单。从足够多的文本中收集这些数据,然后按频率对其进行排序。确定要使其成为“常见”的更正频率,然后仅在列表中保留常见更正。
将列表转换为以正确字母为键的 map ;该值是该字母的常见错误扫描数组。使用递归函数获取单词并生成其所有变体。
这个用 Ruby 编写的例子展示了递归函数。收集可能的错误扫描取决于您:
VARIATIONS = {
'l' => ['1'],
'b' => ['8'],
}
def variations(word)
return [''] if word.empty?
first_character = word[0..0]
remainder = word[1..-1]
possible_first_characters =
[first_character] | VARIATIONS.fetch(first_character, [])
possible_remainders = variations(remainder)
possible_first_characters.product(possible_remainders).map(&:join)
end
p variations('Alphabet')
# => ["Alphabet", "Alpha8et", "A1phabet", "A1pha8et"]
原始单词包含在变体列表中。如果您希望仅 可能的错误扫描,则删除原始单词:
def misscans(word)
variations(word) - [word]
end
p misscans('Alphabet')
# => ["Alpha8et", "A1phabet", "A1pha8et"]
命令行程序的快捷(且未经测试)版本会将上述功能与此“主要”功能相结合:
input_path, output_path = ARGV
File.open(input_path, 'r') do |infile|
File.open(output_path, 'w') do |outfile|
while word = infile.gets
outfile.puts misscans(word)
end
end
end
关于mysql - 根据给定的词群,根据 OCR 错误自动构建可能词的输出列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13824461/
根据 Wikipedia 的说法,“拉丁文打字文本的准确识别现在被认为在很大程度上解决了可以提供清晰成像的应用程序(例如扫描打印文档)的问题。”但是,它没有给出引用。 我的问题是:这是真的吗?当前最先
我在将包含文本图像的 JPG 文件转换为文本文件时遇到问题。我尝试了 ABBYY 的 OCR SDK 和其他一些 OCR 来源,但没有一个包含格鲁吉亚语。 你能告诉我是否有任何可用于格鲁吉亚语的 OC
有人给了我一大堆惊人的信息。它是 200MB 的 .tiff 扫描公告图像,可以追溯到 40 年代。我想将其数字化,但我对 OCR 一无所知。一些早期的 Material 几乎无法被人类阅读,更不用说
我正在尝试通过 python-tesseract 使用 tesseract-OCR 来读取看起来像这样的低分辨率字体: 不幸的是,该图像返回 ZIJZHZI 我认为分辨率太低,这会导致问题。我试过放大
OCR 软件是否能够可靠地将如下图像转换为值列表? 更新: 更详细的任务如下: 我们有一个客户端应用程序,用户可以在其中打开报告。此报告包含一个值表。 但并不是每个报告看起来都一样——不同的字体、不同
我正在尝试使用 Tesseract-OCR检测其中包含纯文本的图像文本,但这些文本具有名为Journal 的手写字体。 例子: 结果不是最好的: Maxima! size` W (35) 有没有可能改
我已经开始了一个简单的项目,它必须获得一个包含带有上标的文本的图像,然后通过使用 OCR(目前我正在使用 tesseract)它必须识别上标字符 + 正常字符。 例如,我们有一个化学方程式,例如 Cl
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我目前正在研究 OCR(波斯语), 尽管“fas.traineddata”在tessdata中可用,但是当我使用以下命令时,什么也没发生: import pytesseract from PIL im
我对文本片段中下标和上标的一般识别有疑问。 示例图片: 我使用 Tesseract 4.1.1 和 https://github.com/tesseract-ocr/tessdata_best 下可用
在过去的 3 个月里,我一直在尝试训练 Tesseract 通过识别我拥有的图像集合,由于真正的缺乏 正确的文档,以及非常高的复杂性,我开始 放弃将 Tesseract 作为解决方案。 我正在寻找一种
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 12 个月前关闭。 Improve this
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
下面是我的电表读数 52425.5(粗略)的图片: 什么程序/技术可以帮助我自动抄表?备注: 这是较为清晰的图像之一。许多图像都有静态。我可以忽略(让程序说“错误”)带有太多静态的图片。 相机有一个固
大写字母OCR(光学字符识别)的常见错误有哪些? 例如FOR -> FOB 最佳答案 要获得最准确的答案,最好使用针对您的问题的特定数据样本自行测试。不同字符/单词组合的错误率可能有很大差异,具体取决
对于我想教 Tesseract 将复选框识别为单词的客户。当 Tesseract 应该识别一个空的复选框时,它工作得很好。 此命令与 this 结合使用教程就像一个魅力,Tesseract 能够找到空
我正在使用 Tesseract OCR将扫描的 PDF 转换为纯文本。总体而言,它非常有效,但我对扫描文本的顺序有疑问。带有表格数据的文档似乎是逐列向下扫描,而更自然的方式是逐行扫描。一个非常小的例子
在哪里可以找到 cube 的 tesseract ocr 土耳其语扩展模式? 文件: tr.cube.fold tr.cube.lm tr.cube.nn tr.cube.params tr.cube
我正在编写一个用于训练 Tesseract OCR 图像的生成器。 在为 Tesseract OCR 的新字体生成训练图像时,最佳值是什么: 新闻部 以磅为单位的字体大小 字体是否应该抗锯齿 边界框是
我的文本带有一些不那么复杂的数学符号,如下所示。 Tesseract OCR 默认无法识别此类数学符号(+-、角度)。我如何通过 tesseract 识别这些数学符号? 最佳答案 只需使用以下语句:
我是一名优秀的程序员,十分优秀!