如何使用python-docx从文档中提取标题编号?

问题描述

我正在使用python-docx库从docx文档中提取数据,但是我还想要标题号/段落号。我想构建一个校对工具,我需要了解该信息,但是我无法在文本或段落样式中找到该信息。有什么方法可以提取这些信息? 我可以循环浏览相同标题的标签,但是如果用户在编写文档时未使用正确的标题标签怎么办? 或者,如果他们选择不使用默认的1,1.1,1.1.1,a字词约定,而是选择使用自己的字词怎么办?

Default convention

基本上,我想要一种提取这些数字的方法2,2.1,2.2.1,(a)。我该怎么办?

解决方法

我尝试过类似的语言,但是使用的是多语言。

首先,您必须观察标题(1、2、3 ..)和子标题(2.1、2.2 ..),并尝试提取一些常见的东西。他们可能具有以下一些独特的模式:

  1. 粗体
  2. 字体,大小
  3. 标题以int(2)开头,子标题以float(2.1)
  4. 文本前和数字后的分隔符('\ t'或'space')是什么

观察这些内容,然后尝试构图图案。通过使用正则表达式,我们可以提取所需的内容。

这里是正则表达式,它将满足您的情况。即使是多国语言。

headings = regex.search("\d+\.\t(\p{Lu}+([\s]+)?)+")
subHeadings =regex.search("\d+\.\d+\t\p{Lu}(\p{Ll}+)+")

python regex(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}+)+",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))

注意:粗体字或斜体字并不总是在运行级别出现。如果未获取这些参数,则应签入样式和参数级别。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...