如何通过Tika配置为Tesseract OCR添加全部可用语言?
自动加载Tesseract所有已安装语言的最优方案
你手动拼接语言代码的方案可行,但后续维护成本高,新增语言包后还要修改代码。更优的方式是自动遍历Tesseract的tessdata目录,提取所有已安装的语言代码并自动拼接,具体实现如下:
核心思路
Tesseract的语言包都存放在tessdata目录下,文件名格式为[语言代码].traineddata(比如eng.traineddata、jpn.traineddata)。我们可以通过读取该目录下的文件,提取语言代码并自动拼接成Tika要求的lang1+lang2+...格式。
具体代码实现
在你的现有配置代码中加入以下逻辑:
// 你的原有配置代码 TesseractOCRConfig tesserConfig = new TesseractOCRConfig(); tesserConfig.setTesseractPath("E:\\Program Files\\tesseractOCR"); String tessdataPath = "E:\\Program Files\\tesseractOCR\\tessdata"; tesserConfig.setTessdataPath(tessdataPath); tesserConfig.setImageMagickPath("E:\\Program Files\\ImageMagick-7.1.0-Q16-HDRI"); // 新增:自动提取所有已安装的语言代码 File tessdataDir = new File(tessdataPath); if (tessdataDir.exists() && tessdataDir.isDirectory()) { // 遍历目录下所有.traineddata文件 File[] langFiles = tessdataDir.listFiles((dir, name) -> name.endsWith(".traineddata")); if (langFiles != null && langFiles.length > 0) { StringBuilder langBuilder = new StringBuilder(); for (File file : langFiles) { // 提取语言代码(去掉.traineddata后缀) String langCode = file.getName().replace(".traineddata", ""); // 排除osd(方向检测模型,不属于语言包) if (!"osd".equals(langCode)) { if (langBuilder.length() > 0) { langBuilder.append("+"); } langBuilder.append(langCode); } } // 设置自动拼接好的语言列表 if (langBuilder.length() > 0) { tesserConfig.setLanguage(langBuilder.toString()); } } } // 后续原有代码 pc.set(TesseractOCRConfig.class, tesserConfig); parser.parse(is, ch, metadata, pc);
方案优势
- 无需手动维护语言代码列表,新增/删除语言包后无需修改代码
- 自动适配当前Tesseract已安装的所有语言
- 可以灵活过滤不需要的模型(比如示例中的osd模型)
注意事项
- 确保tessdata目录路径配置正确,否则会无法读取语言包文件
- 如果Tesseract版本或目录结构有变化,需调整文件过滤逻辑
内容的提问来源于stack exchange,提问作者Kipoti
相关产品推荐
相关产品推荐

