我正在使用python-docx库从docx文档中提取数据,但是我也想要标题号/段落号。我想构建一个校对工具,我需要知道这些信息,但是我既无法在文本中找到这些信息,也无法找到段落的风格。有没有办法提取这些信息?我可以循环浏览相同标题编号的标签,但是如果用户在编写文档时没有使用正确的标题标签怎么办?或者,如果他们选择不使用默认单词约定 1、1.1、1.1.1、a
并选择使用而是自己的东西?
基本上我想要一种方法来提取这些数字,2,2.1,2.2.1,(a)。
我该怎么做?
我尝试了类似的方法,但用于多语言。
首先,您必须观察标题(1,2,3...)和副标题(2.1,2.2...),并尝试提取一些常见的东西。它们可能具有以下一些独特的模式:
观察这些事情并尝试构建模式。通过使用正则表达式,我们可以提取所需的。
这是正则表达式,它将满足您的情况。即使是多语言。
headings = regex.search("\d+\.\t(\p{Lu}+([\s]+)?)+")
subHeadings =regex.search("\d+\.\d+\t\p{Lu}(\p{Ll}+)+")
python正则表达式(re)不向后兼容。所以使用这个[正则表达式][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))
注意:粗体或斜体在运行级别并不总是存在。如果您没有获得这些参数,则应检查样式和段落级别。