Hướng dẫn python read docx page by page - python đọc từng trang docx

Tôi có một tệp MS Docx và tôi cần trích xuất văn bản từ nó. Tôi đã thử với Python-docx nhưng nó có thể trích xuất toàn bộ văn bản nhưng không phải trang. Tôi cũng đã chuyển đổi tài liệu của mình thành PDF và sau đó thử trích xuất văn bản. Vấn đề là, sau khi chuyển đổi cấu trúc trang của docx đã được thay đổi. Ví dụ, trong khi được chuyển đổi, kích thước phông chữ đã được thay đổi và nội dung văn bản trong một trang của DOCX đã mất nhiều hơn một trang trong PDF.

Tôi đã tìm kiếm một giải pháp ổn định sẽ trích xuất văn bản khôn ngoan từ DOCX (mà không chuyển đổi sang PDF sẽ tốt hơn cho toàn bộ giải pháp của tôi). Ai đó có thể giúp tôi về điều này?

Hỏi ngày 18 tháng 12 năm 2019 lúc 4:53Dec 18, 2019 at 4:53

Hướng dẫn python read docx page by page - python đọc từng trang docx

Dường như với tôi rằng định dạng DOCX (và do đó cũng là thư viện Python Docx) chỉ hỗ trợ các đoạn và các phần.

Microsoft Word không hỗ trợ khái niệm các trang cứng. Thay vào đó, khi tài liệu được xuất được mở trong Word, Word sẽ sửa lại nó một lần nữa dựa trên kích thước trang. (nguồn)

Vì vậy, trên thực tế, phân trang không được lưu trữ trong tệp DOCX, mà được thực hiện bởi công cụ kết xuất:

Các tập tin docx không chứa thông tin về phân trang. Bạn đã giành được số lượng trang trong tài liệu trừ khi bạn tính toán số lượng không gian bạn cần cho mỗi dòng để xác định số lượng trang. (nguồn)

Trang này có thêm một số nền tảng và khuyến nghị sử dụng PDF nếu phải giữ phân trang.

Đã trả lời ngày 18 tháng 12 năm 2019 lúc 7:18Dec 18, 2019 at 7:18

GerdgerdGerd

2.4101 Huy hiệu vàng7 Huy hiệu bạc19 Huy hiệu đồng1 gold badge7 silver badges19 bronze badges

Tôi đã phải đối mặt với một kịch bản tương tự gần đây. Điều sau đây sử dụng docx2python đã làm việc cho tôi:

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

Mặc dù điều này sẽ dẫn đến mất bất kỳ thông tin định dạng hoặc bất kỳ siêu dữ liệu nào khác từ văn bản, nếu trích xuất văn bản là mục tiêu duy nhất thì điều này sẽ hoạt động.

Như GERD đã đề cập, việc chuyển đổi tệp thành PDF và sau đó xử lý nó cũng có thể giúp ích vì các thư viện như PYPDF2 cho phép bạn đọc các trang riêng lẻ, ví dụ:

from PyPDF2 import PdfFileReader
pdf = PdfFileReader(open("page-wise-file.pdf", "rb"))
page = pdf.getPage(0)
page.extractText()

Đã trả lời ngày 18 tháng 4 năm 2021 lúc 5:11Apr 18, 2021 at 5:11

Tôi thấy rằng Thư viện Tika có phân tích cú pháp XMLContent khi đọc tệp. Tôi đã sử dụng nó để chụp định dạng XML và sử dụng regex để nắm bắt nó. Viết dưới mã Python làm việc cho tôi.Tika library had a xmlContent parsing when reading the file. I used it to capture xml format and used regex to capture it. Writing below the python code that worked for me.

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

Đã trả lời ngày 9 tháng 1 năm 2020 lúc 6:49Jan 9, 2020 at 6:49

Hướng dẫn python read docx page by page - python đọc từng trang docx

AlfyfaisyalfyfaisyAlfyFaisy

2943 Huy hiệu bạc15 Huy hiệu Đồng3 silver badges15 bronze badges

1

import win32com.client
import comtypes.client
import pdfplumber
word = win32com.client.Dispatch('Word.Application')
wdFormatPDF = 17
in_file = Filepath
out_file = "out.pdf"
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open(in_file)
doc.SaveAs(out_file, FileFormat=wdFormatPDF)
doc.Close()
word.Quit()
with pdfplumber.open(out_file) as pdf:       
    for page in pdf.pages:
        out=page.extract_text()            
        print(out)

    
        

Theo như tôi biết, lưu tệp pdf với win32com là một ngã ba 1: 1

Đã trả lời ngày 2 tháng 4 lúc 7:43Apr 2 at 7:43

Hướng dẫn python read docx page by page - python đọc từng trang docx

thử cái này


from docx import Document

document = Document('anydoccumnet.docx')
for para in document.paragraphs:
    print(para.text)

Đã trả lời ngày 18 tháng 12 năm 2019 lúc 5:23Dec 18, 2019 at 5:23

DebidebiDebi

Phù hiệu bằng đồng 1866 bronze badges

1