Python - Apache Tika 单页解析器

Posted

技术标签:

【中文标题】Python - Apache Tika 单页解析器【英文标题】:Python - Apache Tika Single Page parser 【发布时间】:2019-04-05 05:16:56 【问题描述】:

我想知道是否有任何方法使用 Tika/Python 仅解析第一页或仅从第一页提取元数据?现在,当我传递 pdf 时,它正在解析每一页。 我看了这个链接:Is it possible to extract text by page for word/pdf files using Apache Tika? 但是,此链接在我不熟悉的 java 中解释了更多内容。我希望有一个python解决方案吗?谢谢!

from tika import parser
# running: java -jar tika-server1.18.jar before executing code below. 
parsedPDF = parser.from_file('C:\\path\\to\\dir\\sample.pdf')

fulltext = parsedPDF['content']

metadata_dict = parsedPDF['metadata']
title = metadata_dict['title']
author = metadata_dict['Author'] # capturing all the names from lets say 15 pages. Just want it to capture from first page 
pages = metadata_dict['xmpTPg:NPages']

【问题讨论】:

简短回答 - 不。你能做的最好的是将内容获取为 Xhtml,然后只抓取第一页的 div 【参考方案1】:

感谢您提供此信息,真的很有帮助。这是我逐页检索内容的代码(有点脏,但它有效):

    raw_xml = parser.from_file(file, xmlContent=True)
    body = raw_xml['content'].split('<body>')[1].split('</body>')[0]
    body_without_tag = body.replace("<p>", "").replace("</p>", "").replace("<div>", "").replace("</div>","").replace("<p />","")
    text_pages = body_without_tag.split("""<div class="page">""")[1:]
    num_pages = len(text_pages)
    if num_pages==int(raw_xml['metadata']['xmpTPg:NPages']) : #check if it worked correctly
         return text_pages

【讨论】:

【参考方案2】:

@Gagravarr cmets 关于 XHTML,我发现 Tika 在读取文件时有一个 xmlContent 解析。我用它来捕获xml格式并使用正则表达式来捕获它。

这对我有用:

parsed_data_full = parser.from_file(file_name,xmlContent=True) 
parsed_data_full = parsed_data_full['content']

每个页面分隔符都有一个开始和结束,以"&lt;div" 开头并以"&lt;/div&gt;" 第一次出现结束。基本上写了一个小代码来捕获2个子字符串之间的子字符串,并根据我的具体要求存储到一个变量中。

【讨论】:

感谢您的回答。但是,这似乎只适用于 .pdf 文件,而不适用于 .docx 文件。 .docx 文件的已解析 XHTML 不包含 &lt;div&gt; 标记。你知道有什么方法可以处理吗?

以上是关于Python - Apache Tika 单页解析器的主要内容,如果未能解决你的问题,请参考以下文章

空解析器 tika python

Apache Tika 和文件访问而不是 Java 输入流

Python Tika 无法从 url 解析 pdf

跟踪更改的docx在Apache Tika中产生错误的输出

将 tika 与 python 一起使用,运行时错误:无法启动 tika 服务器

Python - Tika Parser - 内容未加载