"language_model_penalty_non_dict_word" 在 tesseract 3.01 中无效
"language_model_penalty_non_dict_word" has no effect in tesseract 3.01
我正在通过 Tesseract 3.01 的配置文件设置 language_model_penalty_non_dict_word
,但它的值没有任何效果。我尝试过使用多张图片和多个值,但每张图片的输出始终相同。另一位用户注意到了相同的 in a comment in another question.
编辑: 查看源代码后,变量 language_model_penalty_non_dict_word
仅在函数 float LanguageModel::ComputeAdjustedPathCost
.
内部使用
但是,这个函数从来没有被调用过!它仅由 2 个函数引用 - LanguageModel::UpdateBestChoice()
和 LanguageModel::AddViterbiStateEntry()
。我在这些函数中放置了断点,但它们也没有被调用。
经过一些调试,我终于找到了原因 - 函数 Wordrec::SegSearch()
没有被调用(它在 LanguageModel::ComputeAdjustedPathCost()
的调用图中)。
来自这段代码:
if (enable_new_segsearch) {
SegSearch(&chunks_record, word->best_choice,
best_char_choices, word->raw_choice, state);
} else {
best_first_search(&chunks_record, best_char_choices, word,
state, fixpt, best_state);
}
所以你需要在配置文件中设置enable_new_segsearch
:
enable_new_segsearch 1
language_model_penalty_non_freq_dict_word 0.2
language_model_penalty_non_dict_word 0.3
我正在通过 Tesseract 3.01 的配置文件设置 language_model_penalty_non_dict_word
,但它的值没有任何效果。我尝试过使用多张图片和多个值,但每张图片的输出始终相同。另一位用户注意到了相同的 in a comment in another question.
编辑: 查看源代码后,变量 language_model_penalty_non_dict_word
仅在函数 float LanguageModel::ComputeAdjustedPathCost
.
但是,这个函数从来没有被调用过!它仅由 2 个函数引用 - LanguageModel::UpdateBestChoice()
和 LanguageModel::AddViterbiStateEntry()
。我在这些函数中放置了断点,但它们也没有被调用。
经过一些调试,我终于找到了原因 - 函数 Wordrec::SegSearch()
没有被调用(它在 LanguageModel::ComputeAdjustedPathCost()
的调用图中)。
来自这段代码:
if (enable_new_segsearch) {
SegSearch(&chunks_record, word->best_choice,
best_char_choices, word->raw_choice, state);
} else {
best_first_search(&chunks_record, best_char_choices, word,
state, fixpt, best_state);
}
所以你需要在配置文件中设置enable_new_segsearch
:
enable_new_segsearch 1
language_model_penalty_non_freq_dict_word 0.2
language_model_penalty_non_dict_word 0.3