使用python从MS word docx文件逐页提取文本
我有一个MS docx文件,我需要从中逐页提取文本。 我尝试过使用pythondocx,但它可以提取整个文本,但不能按页面进行。 我还将docx转换为pdf,然后尝试文本提取。问题是,转换后docx的页面结构发生了变化。例如,在转换时,字体大小发生了变化,docx的一个页面中的文本内容占用了pdf中的多个页面 我正在寻找一个稳定的解决方案,可以从docx中提取页面文本(对于我的整个解决方案来说,不转换为pdf会更好)。有人能帮我吗?试试这个使用python从MS word docx文件逐页提取文本,python,python-3.x,document,extraction,text-extraction,Python,Python 3.x,Document,Extraction,Text Extraction,我有一个MS docx文件,我需要从中逐页提取文本。 我尝试过使用pythondocx,但它可以提取整个文本,但不能按页面进行。 我还将docx转换为pdf,然后尝试文本提取。问题是,转换后docx的页面结构发生了变化。例如,在转换时,字体大小发生了变化,docx的一个页面中的文本内容占用了pdf中的多个页面 我正在寻找一个稳定的解决方案,可以从docx中提取页面文本(对于我的整个解决方案来说,不转换为pdf会更好)。有人能帮我吗?试试这个 from docx import Document
from docx import Document
document = Document('anydoccumnet.docx')
for para in document.paragraphs:
print(para.text)
在我看来,docx格式(因此也是pythondocx库)只支持段落和节 Microsoft Word不支持硬页的概念。相反 在Word中打开导出的文档时,Word会将其重新分页 同样根据页面大小。() 因此,实际上分页不存储在docx文件中,而是由渲染引擎执行: DOCX文件不包含有关分页的信息。你找不到那个 文档中的页数,除非计算空间大小 您需要为每一行确定页数。()
有更多的背景知识,如果必须保持分页,建议使用PDF 我发现Tika库在读取文件时进行了xmlContent解析。我使用它来捕获xml格式,并使用正则表达式来捕获它。在下面编写适合我的python代码
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
raw_xml=parser.from_文件(文件,xmlContent=True)
body=raw_xml['content'].split(“”)[1]。split(“”)[0]
body_不带标签=body.replace(“”,”).replace(“”,”).replace(“,”).replace(“,”).replace(“,”,”)
text\u pages=body\u,不带标签。拆分(“”“”)[1:]
num\u pages=len(文本页面)
如果num_pages==int(原始xml['metadata']['xmpTPg:NPages']):#检查它是否工作正常
返回文本页面
我最近遇到了类似的情况。以下使用docx2python
的方法对我有效:
from docx2python import docx2python
doc_result = docx2python('page-wise-file.docx')
count = 0
para = 0
pages= []
while para < len(doc_result.body[0][0][0]):
if doc_result.body[0][0][0][para] != "":
current_page = {}
current_page_paras = []
count+=1
while doc_result.body[0][0][0][para]!= "" and para<len(doc_result.body[0][0][0]):
current_page_paras.append(doc_result.body[0][0][0][para])
para+=1
current_page["page_text"] = "\n".join(current_page_paras)
current_page["page_no"] = count
pages.append(current_page)
else:
para+=1
我也尝试过这样做,它将给出整个文档中的所有段落,但不是页面。我正在尝试一页一页地获取文本
from PyPDF2 import PdfFileReader
pdf = PdfFileReader(open("page-wise-file.pdf", "rb"))
page = pdf.getPage(0)
page.extractText()