阅读Word文档并获取每个标题的文本

时间:2018-08-03 10:03:12

标签: python python-docx

我有一个Microsoft Word文档,我需要提取文本并将其按文档的每个部分结构化为数据框。文档的每个部分均以标题开头。标题在Word中的格式设置为“标题2”。例如:

  

这是第一节

     

这是第一部分的文字。

     

这是文档的第二部分

     

这是第二部分的文字。

我需要获取数据框中每个节的文本,其中在A列中将具有节名称,在B列中将具有节文本。

我是Python的新手,我正在尝试使用docx软件包,但我唯一能做的就是根据我在stackoverflow中找到的函数获取全文

功能(readDocx):

#! python3
from docx import Document

def getText(filename):
    doc = Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)

获取文本的代码:

import readDocx

test = readDocx.getText('THE FILE.docx')

我能够找到标识标题的循环。问题是如何遍历文档并获得数据框中的每个标题和文本:

from docx import Document
from docx.shared import Inches


docs = Document("THE FILE.docx")

for paragraph in docs.paragraphs:
    if paragraph.style.name=='Heading 2':
        print (paragraph.text)

2 个答案:

答案 0 :(得分:1)

对于看起来像这样的docx

enter image description here

这可能是一个起点:

from docx import Document
from docx.shared import Inches

document = Document("demo.docx")
headings = []
texts = []
for paragraph in document.paragraphs:
    if paragraph.style.name == "Heading 2":
        headings.append(paragraph.text)
    elif paragraph.style.name == "Normal":
        texts.append(paragraph.text)

for h, t in zip(headings, texts):
    print(h, t)

输出:

Heading, level 2 A plain paragraph having some bold and some italic.
Heading, level 2 Foo
Heading, level 2 Bar

我不了解Pandas,但是应该很容易地从元组列表(由zip生成)到数据框。

答案 1 :(得分:0)

使用此:

from docx import Document
from docx.shared import Inches

document = Document("demo.docx")
headings = []
texts = []
para = []
for paragraph in document.paragraphs:
    if paragraph.style.name.startswith("Heading"):
        if headings:
            texts.append(para)
        headings.append(paragraph.text)
        para = []
    elif paragraph.style.name == "Normal":
        para.append(paragraph.text)
if para or len(headings)>len(texts):
    texts.append(texts.append(para))

for h, t in zip(headings, texts):
    print(h, t)