Python - Apache Tika 单页解析器

4
我想知道是否有使用Tika/Python仅解析第一页或仅提取第一页元数据的方法?目前,当我传递pdf文件时,它会解析每一页。我查看了这个链接:Is it possible to extract text by page for word/pdf files using Apache Tika? 但是,这个链接更多地解释了Java,而我不熟悉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。 - Gagravarr
2个回答

10

谢谢提供这个信息,非常有帮助。以下是我的代码,用于逐页检索内容(有点不太规范,但它可以工作):

    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

4

@Gagravarr提到了XHTML,我发现Tika在读取文件时有一个xmlContent解析。我使用它来捕获XML格式,并使用正则表达式进行捕获。

这对我很有帮助:

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

每个页面分隔符都有一个开始和结束,开始标签为"<div",结束标签为"</div>",需要注意的是只取第一次出现的。我基本上编写了一段小代码来捕获两个子字符串之间的子字符串,并将其存储到变量中以满足我的特定需求。

谢谢您的回答。然而,这似乎只适用于.pdf文件,而不是.docx文件。.docx文件的解析XHTML不包含<div>标签。您知道如何处理吗? - GoodDeeds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接