【问题标题】:Changing language in tika在 tika 中改变语言
【发布时间】:2020-10-24 04:42:43
【问题描述】:

是否可以更改 tika 的语言(默认检测)?

我正在尝试使用泰米尔语的 pdf 文件。 (语言代码“ta”)。但 tika 将其检测为“th”(泰语)。 虽然大多数字符都被很好地识别,但它并没有背叛少数字符。

请参阅下面的示例,其中一些“o”出现在文本之间。

ஓவச -அக்ைரும்பாகலைளில்பாய்வதால்ஓகெயும்ஓகெயும்ஓகெயும்; வவவலச்சங்கின் -ஓவச -நீர்க்நீர்க்ெங்குைளிடமிருந்து

from tika import language
print(language.from_file(u'pdf/KambaRamayanam1.pdf' ))

结果是'th'。 预期是“ta”

【问题讨论】:

  • 看看github.com/apache/tika/blob/main/tika-core/src/main/resources/…github.com/apache/tika/blob/main/tika-core/src/main/java/org/…。 Tika 显然支持 28 种语言,泰语 (th) 是其中之一。不支持泰米尔语。无论如何,Tika 显然使用 n-gram 分析进行语言检测。这是一种统计方法,永远不会非常精确。我刚刚尝试了两个德语 PDF,它检测到语言为“en”和“th”...
  • 感谢@RobertPetermeier。我也是这么想的。感谢您的回复。
  • 看这里:medium.com/@masreis/… 在“识别语言”部分。 Tika 端点语言/流用于识别语言。它适用于本机 pdf,但对于扫描的 pdf,返回值为“th”。根本原因是:OCR 不用于语言检测(仅用于简单的文本提取),因此当需要 ocr 时(扫描的 pdf 或 jpgs)比检测到的值是 th

标签: python nlp apache-tika tamil


【解决方案1】:
  1. 在TesseractOCRConfig类中,有一个方法setLanguage
  2. 使用tika服务器时可以设置语言头:X-Tika-OCRanguage tesseract 语言列表在这里:https://github.com/tesseract-ocr/tessdata

【讨论】:

  • 感谢您的回复@marek.kapowicki。我可以通过 tesseract 单独完成此操作(为此,我首先将 pdf 转换为 jpg)。但是对于 Tika,我直接给出了 PDF。我不确定如何在 Tika 中集成 Tesserect 语言选项。根据您的回复,我知道有可能。你介意指导我写任何关于相同的文章吗?
  • tika 可以通过以下几种方式从 pdf 中提取文本:tika.apache.org/1.24/api/org/apache/tika/parser/pdf/… 1. no_ocr -> 适用于原生 pdf。 Tika 在不使用 tesseract 的情况下从 pdf 中提取文本 2. ocr_only -> tika 在后台使用 tesseract 对给定的 pdf 进行 ocr(比你可以使用 tesseract 参数。tika.apache.org/1.24/api/org/apache/tika/parser/ocr/… 看这里:github.com/marekkapowicki/nlp
【解决方案2】:

Tika 可以在 ocr 模式(适用于扫描的 pdf)或 no_ocr 模式下处理 pdf - 然后 tika 将请求发送到 tesseract

  1. 确保您的 tika 在代码中使用 ocr

    PDFParserConfig::setExtractInlineImages(true) //很重要 PDFParserConfig::setOcrStrategy(PDFParserConfig.OCR_STRATEGY.OCR_ONLY)

或在 tika 服务器中使用标头:

X-Tika-PDFextractInlineImages: true, X-Tika-PDFocrStrategy: OCR_ONLY
  1. 你的 tika 正在使用 tesseract,你可以更改 tesseract 配置:https://tika.apache.org/1.24/api/org/apache/tika/parser/ocr/TesseractOCRConfig.html

强烈建议我查看我的 java 项目 https://github.com/marekkapowicki/nlp 和博客文章:https://medium.com/@masreis/text-extraction-and-ocr-with-apache-tika-302464895e5f

【讨论】:

    【解决方案3】:

    如果我理解正确的话,这个问题似乎有两个部分; OCR 和语言检测。从我对 cme​​ts 的理解到其他问题和答案,它们相互关联。

    印度语言的 OCR

    在 OCR 方面,默认情况下,Apache Tika 仅使用 eng​​em> Tesseract 模型,除非您告诉它使用其他模型。您可以通过在 TesseractOCRConfig 中设置它们来做到这一点,或者通过:

    1. 创建您自己的 TesseractOCRConfig.properties 文件并将其放置在相应包的类路径中
    2. 在 REST 调用中将请求的适当标头发送到 Tika 服务器。

    (选项 2 也可用于覆盖您在其中设置的默认值)

    这允许您提供一个或多个 Tesseract 模型的列表以在 OCR 期间加载以供使用。

    您可以使用一些由 Tesseract 提供的模型,或自定义的模型,例如您安装或构建的印度语言 here 的 Tesseract 模型。

    安装后,您只需在TesseractOCRConfig 中的语言列表中使用相关模型名称

    在 Wiki 上有更详细的解释: https://cwiki.apache.org/confluence/display/TIKA/TikaOCR

    语言检测

    因为您使用的是 tika-python 模型,而该模型又使用 Tika 服务器,所以您没有从另一个答案中引用的 tika-core 调用语言检测器。您实际上正在使用 OptimaizeLangDetector,它是默认模型,支持here 显示的语言的配置文件。

    在您使用的 /language 端点中没有进行解析,因此没有 OCR,它仅使用原始字符串或它在发送的 InputStream 中读取的内容。

    为了最大限度地提高获得好结果的机会,您需要使用:

    from tika import parser, language
    content = parser.from_file("sample.pdf") 
    print(language.from_buffer(content))
    

    TesseractOCRConfig 设置一起使用与您发送的脚本匹配的适当模型,您应该会得到合理的结果。

    from tika import parser, language
    headers = { "X-Tika-OCRLanguage": "eng+tam" }
    content = parser.from_file("sample.pdf", xmlContent=False, requestOptions={'headers': headers})
    print(language.from_buffer(content))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      相关资源
      最近更新 更多