TLDR;版本:
有没有人使用.NET包装器为Tesseract拥有可用的“bazaar”配置文件,我可以看到吗?
我相信这就是我想要的(只识别列表中的一些单词),但它似乎没有任何作用。
我有一个很短的可能字符串列表(1-4个单词)。 Tesseract的文档说明:
如果您想要替换整个字典,则需要解压缩.traineddata文件,创建新的单词dawg文件,然后将文件打包回.traineddata文件中。有关更多详细信息,请参见TrainingTesseract。
听起来像是我想要的!所以我看了看TrainingTesseract并看到:
traineddata文件只是输入文件的串联,其中包含目录表,其中包含已知文件类型的偏移量。请参见源代码中的ccutil/tessdatamanager.h以获取当前接受的文件名列表。
太好了。那么我该如何解包这些简单的输入文件串联,修改内容和标题,然后重新打包呢? :)
这篇文章似乎是相同的问题-它涉及简单地关闭默认字典并改用用户单词:
假设您想要在英语中进行OCR,但抑制正常字典并加载替代单词列表和替代模式列表-这两个文件是最常用的额外数据文件。
如果您的语言包在/path/to/eng.traineddata中,并且hocr配置在/path/to/configs/hocr中,则创建三个新文件:
/path/to/eng.user-words:-snip
/path/to/eng.user-patterns:-snip
/path/to/configs/bazaar:-snip
现在,如果您将单词bazaar作为Tesseract的尾随命令行参数传递,Tesseract将不会加载系统字典或常用单词的字典,并将加载并使用您提供的eng.user-words和eng.user-patterns文件。前者是一个简单的单词列表,每行一个单词。后者的格式在dict/trie.h上记录在read_pattern_list()中。
但是这样做没有任何影响!
我正在使用以下引擎创建:
using (engine = new TesseractEngine(@"C:\src\x\tessdata", "eng", EngineMode.Default, @"C:\src\x\tessdata\engine.config"))
有一个(UTF-8,unix换行符)的文件 engine.config:
load_system_dawg F
load_freq_dawg F
user_words_suffix user-words
user_patterns_suffix user-patterns
同时创建了 eng.user-patterns 和 eng.user-words 文件(UTF-8编码,Unix换行符),这些文件与 eng.traineddata 文件放在同一个目录下。