我尝试了一个类似的,但用于多语言。
首先你必须观察标题(1, 2, 3 ..) 和副标题(2.1, 2.2 ..) 并尝试提取一些常见的东西。它们可能具有以下一些独特的模式:
- 粗体字
- 字体、大小
- 标题以 int(2) 开头,副标题以 float (2.1) 开头
- 文本之前和数字之后的分隔符('\t' 或'空格')是什么
观察这些事情并尝试构建模式。通过使用正则表达式,我们可以提取所需的内容。
这是正则表达式,它将满足您的情况。即使是多语言。
headings = regex.search("\d+\.\t(\p{Lu}+([\s]+)?)+")
subHeadings =regex.search("\d+\.\d+\t\p{Lu}(\p{Ll}+)+")
python 正则表达式 ( re ) 不向后兼容。所以使用这个 [regex][1] 特别是如果你的文本是多语言的。
import regex
from docx import Document
doc = Document("<<Your doc file name here>>")
# Iterate through paragraphs ( in a word everything is a paragraph)
# Even the blank lines are paragraphs
for index, para in enumerate(doc.paragraphs):
# Skipping the blank paragraphs
if(para.text):
headings = regex.search("\d+\.\t(\p{Lu}+([\s]+)?)+",para.text,regex.UNICODE)
subHeadings = regex.search("\d+\.\d+\t\p{Lu}(\p{Ll}+)+",para.text,regex.UNICODE)
if headings:
if para.runs:
for run in para.runs:
# At run level checking for bold or italic.
if run.bold:
print("Bold Heading :",headings.group(0))
if run.italic:
print("Italic Heading :",headings.group(0))
if subHeadings :
if para.runs:
for run in para.runs:
# At run level checking for bold or italic.
if run.bold:
print("Bold subHeadings :",subHeadings .group(0))
if run.italic:
print("Italic subHeadings :",subHeadings .group(0))
注意:粗体或斜体在运行级别并不总是存在。如果你没有得到这些参数,你应该检查样式和参数级别。