Để đọc một tài liệu word, chúng tôi nhờ sự trợ giúp của mô-đun có tên docx. Đầu tiên chúng tôi cài đặt docx như hình dưới đây. Sau đó viết chương trình sử dụng các chức năng khác nhau trong mô-đun docx để đọc toàn bộ tệp theo đoạn văn
Chúng tôi sử dụng lệnh dưới đây để đưa mô-đun docx vào môi trường của chúng tôi
pip install docx
Trong ví dụ dưới đây, chúng tôi đọc nội dung của tài liệu từ bằng cách nối từng dòng vào một đoạn văn và cuối cùng in ra toàn bộ nội dung đoạn văn
import docx def readtxt[filename]: doc = docx.Document[filename] fullText = [] for para in doc.paragraphs: fullText.append[para.text] return '\n'.join[fullText] print [readtxt['path\Tutorialspoint.docx']]
Khi chúng tôi chạy chương trình trên, chúng tôi nhận được đầu ra sau -
Tutorials Point originated from the idea that there exists a class of readers who respond better to online content and prefer to learn new skills at their own pace from the comforts of their drawing rooms. The journey commenced with a single tutorial on HTML in 2006 and elated by the response it generated, we worked our way to adding fresh tutorials to our repository which now proudly flaunts a wealth of tutorials and allied articles on topics ranging from programming languages to web designing to academics and much more.
Đọc các đoạn riêng lẻ
Chúng ta có thể đọc một đoạn cụ thể từ tài liệu từ bằng cách sử dụng thuộc tính đoạn văn. Trong ví dụ dưới đây, chúng tôi chỉ đọc đoạn thứ hai từ tài liệu từ
Bài đăng này sẽ nói về cách đọc Tài liệu Word bằng Python. Chúng tôi sẽ đề cập đến ba gói khác nhau – docx2txt, docx và yêu thích cá nhân của tôi. docx2python
Gói docx2txt
Trước tiên hãy nói về docx2text. Đây là gói Python cho phép bạn cạo văn bản và hình ảnh từ Tài liệu Word. Ví dụ dưới đây đọc trong Tài liệu Word có chứa Zen of Python. Như bạn có thể thấy, khi chúng tôi đã nhập docx2txt, tất cả những gì chúng tôi cần là một dòng mã để đọc văn bản từ Tài liệu Word. Chúng ta có thể đọc trong tài liệu bằng một phương thức trong gói có tên process, lấy tên của tệp làm đầu vào. Văn bản thông thường, các mục được liệt kê, văn bản siêu liên kết và văn bản bảng đều sẽ được trả về trong một chuỗi
import docx2txt # read in word file result = docx2txt.process["zen_of_python.docx"]
Nếu tập tin có hình ảnh thì sao? . Khi chúng ta chạy phương thức process, chúng ta có thể truyền một tham số bổ sung chỉ định tên của thư mục đầu ra. Đang chạy docx2txt. quá trình sẽ trích xuất bất kỳ hình ảnh nào trong Tài liệu Word và lưu chúng vào thư mục được chỉ định này. Văn bản từ tệp cũng sẽ được trích xuất và lưu trữ trong biến kết quả
import docx2txt result = docx2txt.process["zen_of_python_with_image.docx", "C:/path/to/store/files"]
Hình ảnh minh họa
docx2txt cũng sẽ loại bỏ bất kỳ văn bản nào khỏi bảng. Một lần nữa, điều này sẽ được trả về thành một chuỗi với bất kỳ văn bản nào khác được tìm thấy trong tài liệu, điều đó có nghĩa là văn bản này có thể khó phân tích cú pháp hơn. Ở phần sau của bài đăng này, chúng ta sẽ nói về docx2python, cho phép bạn quét các bảng theo định dạng có cấu trúc hơn
gói docx
Mã nguồn đằng sau docx2txt được lấy từ mã trong gói docx, mã này cũng có thể được sử dụng để quét Tài liệu Word. docx là một thư viện mạnh mẽ để thao tác và tạo Tài liệu Word, nhưng cũng có thể [với một số hạn chế] đọc văn bản từ tệp Word
Trong ví dụ bên dưới, chúng tôi mở một kết nối đến tệp từ mẫu của mình bằng docx. phương pháp tài liệu. Ở đây chúng tôi chỉ nhập tên của tệp mà chúng tôi muốn kết nối với. Sau đó, chúng tôi có thể cạo văn bản từ từng đoạn trong tệp bằng cách sử dụng khả năng hiểu danh sách kết hợp với tài liệu. đoạn văn. Điều này sẽ bao gồm việc cạo các dòng riêng biệt được xác định trong Tài liệu Word cho các mục được liệt kê. Không giống như docx2txt, docx, không thể cạo hình ảnh từ Tài liệu Word. Ngoài ra, docx sẽ không loại bỏ các siêu liên kết và văn bản trong các bảng được xác định trong Tài liệu Word
import docx # open connection to Word Document doc = docx.Document["zen_of_python.docx"] # read in each paragraph in file result = [p.text for p in doc.paragraphs]
Gói docx2python
docx2python là một gói khác mà chúng ta có thể sử dụng để cạo Tài liệu Word. Nó có một số tính năng bổ sung ngoài docx2txt và docx. Ví dụ: nó có thể trả về văn bản được lấy từ một tài liệu ở định dạng có cấu trúc hơn. Hãy kiểm tra Tài liệu Word của chúng tôi với docx2python. Chúng tôi sẽ thêm một bảng đơn giản vào tài liệu để chúng tôi cũng có thể trích xuất bảng đó [xem bên dưới]
docx2python chứa một phương thức có cùng tên. Nếu chúng ta gọi phương thức này với tên của tài liệu làm đầu vào, chúng ta sẽ lấy lại một đối tượng có một số thuộc tính
from docx2python import docx2python # extract docx content doc_result = docx2python['zen_of_python.docx']
Mỗi thuộc tính cung cấp văn bản hoặc thông tin từ tệp. Ví dụ: hãy xem xét rằng tệp của chúng tôi có ba thành phần chính – văn bản chứa Zen của Python, một bảng và một hình ảnh. Nếu chúng ta gọi doc_result. nội dung, mỗi thành phần này sẽ được trả về dưới dạng các mục riêng biệt trong danh sách
# get separate components of the document doc_result.body # get the text from Zen of Python doc_result[0] # get the image doc_result[1] # get the table text doc_result[2]
Cạo một bảng tài liệu từ với docx2python
Kết quả văn bản của bảng được trả về dưới dạng danh sách lồng nhau, như bạn có thể thấy bên dưới. Mỗi hàng [bao gồm cả tiêu đề] được trả về dưới dạng danh sách phụ riêng biệt. Phần tử thứ 0 của danh sách đề cập đến tiêu đề – hoặc hàng thứ 0 của bảng. Phần tử tiếp theo đề cập đến hàng tiếp theo trong bảng, v.v. Đổi lại, mỗi giá trị trong một hàng được trả về dưới dạng một danh sách con riêng lẻ trong danh sách tương ứng của hàng đó
Chúng tôi có thể chuyển đổi kết quả này thành định dạng bảng bằng pandas. Khung dữ liệu vẫn còn hơi lộn xộn – mỗi ô trong khung dữ liệu là một danh sách chứa một giá trị. Giá trị này cũng có khá nhiều “\t”[đại diện cho không gian tab]
________số 8_______Ở đây, chúng tôi sử dụng phương thức applymap để áp dụng hàm lambda bên dưới cho mọi ô trong khung dữ liệu. Hàm này nhận giá trị riêng lẻ trong danh sách ở mỗi ô và loại bỏ tất cả các phiên bản của “\t”
import pandas as pd pd.DataFrame[doc_result.body[1][1:]].\ applymap[lambda val: val[0].strip["\t"]]
Tiếp theo, hãy thay đổi tiêu đề cột thành những gì chúng ta thấy trong tệp Word [tệp này cũng được trả về cho chúng tôi trong doc_result. thân hình]
df.columns = [val[0].strip["\t"] for val in doc_result.body[1][0]]
Trích xuất hình ảnh
Chúng ta có thể trích xuất hình ảnh của tệp Word bằng thuộc tính images của đối tượng doc_result. doc_result. hình ảnh bao gồm một từ điển trong đó các khóa là tên của tệp hình ảnh [không được ghi tự động vào đĩa] và các giá trị tương ứng là các tệp hình ảnh ở định dạng nhị phân
type[doc_result.images] # dict doc_result.images.keys[] # dict_keys[['image1.png']]
Chúng ta có thể ghi hình ảnh định dạng nhị phân ra một tệp vật lý như thế này
for key,val in doc_result.images.items[]: f = open[key, "wb"] f.write[val] f.close[]
Ở trên, chúng tôi chỉ lặp qua các khóa [tên tệp hình ảnh] và giá trị [hình ảnh nhị phân] trong từ điển và viết từng tệp ra tệp. Trong trường hợp này, chúng tôi chỉ có một hình ảnh trong tài liệu, vì vậy chúng tôi chỉ lấy một hình ảnh được viết ra
thuộc tính khác
Kết quả docx2python có một số thuộc tính khác mà chúng tôi có thể sử dụng để trích xuất văn bản hoặc thông tin từ tệp. Ví dụ: nếu chúng tôi muốn lấy tất cả văn bản của tệp trong một chuỗi [tương tự như docx2txt], chúng tôi có thể chạy doc_result. chữ
import docx2txt result = docx2txt.process["zen_of_python_with_image.docx", "C:/path/to/store/files"]0
Ngoài văn bản, chúng tôi cũng có thể lấy siêu dữ liệu về tệp bằng thuộc tính thuộc tính. Điều này trả về thông tin như người tạo tài liệu, ngày tạo/sửa đổi lần cuối và số lần sửa đổi
import docx2txt result = docx2txt.process["zen_of_python_with_image.docx", "C:/path/to/store/files"]1
Nếu tài liệu bạn đang cạo có đầu trang và chân trang, bạn cũng có thể loại bỏ chúng như thế này [lưu ý phiên bản số ít của “đầu trang” và “chân trang”]
import docx2txt result = docx2txt.process["zen_of_python_with_image.docx", "C:/path/to/store/files"]2
Chú thích cuối trang cũng có thể được trích xuất như thế này
import docx2txt result = docx2txt.process["zen_of_python_with_image.docx", "C:/path/to/store/files"]3
Nhận HTML được trả về bằng docx2python
Chúng tôi cũng có thể chỉ định rằng chúng tôi muốn nhận một đối tượng HTML được trả về bằng phương thức docx2python hỗ trợ một số loại thẻ bao gồm phông chữ [kích thước và màu sắc], văn bản in nghiêng, in đậm và gạch chân. Chúng ta chỉ cần xác định tham số “html = True”. Trong ví dụ bên dưới, chúng ta thấy The Zen of Python được in đậm và gạch chân. Tương ứng với điều này, chúng ta có thể thấy phiên bản HTML của điều này trong ảnh chụp nhanh thứ hai bên dưới. Tính năng HTML hiện không hỗ trợ các thẻ liên quan đến bảng, vì vậy tôi khuyên bạn nên sử dụng phương pháp chúng tôi đã thực hiện ở trên nếu bạn đang tìm cách loại bỏ các bảng khỏi tài liệu Word