Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从MS word docx文件逐页提取文本_Python_Python 3.x_Document_Extraction_Text Extraction - Fatal编程技术网

使用python从MS word docx文件逐页提取文本

使用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

我有一个MS docx文件,我需要从中逐页提取文本。 我尝试过使用pythondocx,但它可以提取整个文本,但不能按页面进行。 我还将docx转换为pdf,然后尝试文本提取。问题是,转换后docx的页面结构发生了变化。例如,在转换时,字体大小发生了变化,docx的一个页面中的文本内容占用了pdf中的多个页面

我正在寻找一个稳定的解决方案,可以从docx中提取页面文本(对于我的整个解决方案来说,不转换为pdf会更好)。有人能帮我吗?

试试这个


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()