我有一个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)
答案 0 :(得分:1)
对于看起来像这样的docx
这可能是一个起点:
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)