繁体   English   中英

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

[英]How to extract heading numbers from a document using python-docx?

我正在使用 python-docx 库从 docx 文档中提取数据,但是我也想要标题编号/段落编号。 我想构建一个校对工具,我需要知道该信息,但是我既找不到文本中的信息,也找不到段落的样式 有没有办法提取这些信息? 我可以循环遍历相同标题编号的标签,但是如果用户在编写文档时没有使用正确的标题标签怎么办? 或者,如果他们选择不使用默认的单词约定1, 1.1, 1.1.1, a并选择使用他们自己的东西呢?

默认约定

基本上我想要一种方法来提取这些数字, 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}+)+",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))

注意:粗体或斜体在运行级别并不总是存在。 如果你没有得到这些参数,你应该检查 style 和 para level。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM