如何使用pythondocx从文档中提取标题号?
我使用PythonDocx库从docx文档中提取数据,但是我还需要标题号/段落号。我想建立一个校对工具,我需要知道这些信息,但是我在文本中找不到这些信息,也找不到段落的风格。有没有办法提取这些信息? 我可以循环浏览相同标题号的标签,但是如果用户在编写文档时没有使用正确的标题标签呢? 或者,如果他们选择不使用默认的单词约定如何使用pythondocx从文档中提取标题号?,python,parsing,ms-word,python-docx,Python,Parsing,Ms Word,Python Docx,我使用PythonDocx库从docx文档中提取数据,但是我还需要标题号/段落号。我想建立一个校对工具,我需要知道这些信息,但是我在文本中找不到这些信息,也找不到段落的风格。有没有办法提取这些信息? 我可以循环浏览相同标题号的标签,但是如果用户在编写文档时没有使用正确的标题标签呢? 或者,如果他们选择不使用默认的单词约定1,1.1,1.1.1,a,而是选择使用自己的东西,那又该怎么办 基本上我想要一种提取这些数字的方法,2,2.1,2.2.1,(a)。我怎么做呢?我试过一个类似的方法,但适用于
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}+)+")
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))
python正则表达式(re)不向后兼容。所以使用这个[regex][1],特别是当你的文本是多语言的时候
headings = regex.search("\d+\.\t(\p{Lu}+([\s]+)?)+")
subHeadings =regex.search("\d+\.\d+\t\p{Lu}(\p{Ll}+)+")
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))
导入正则表达式
从docx导入文档
单据=单据(“”)
#反复阅读段落(在一个词中,一切都是段落)
甚至连空白行都是段落
对于索引,枚举中的段落(文件段落):
跳过空白段落
如果(第段):
headers=regex.search(“\d+\。\t(\p{Lu}+([\s]+)?)+”,段落文本,regex.UNICODE)
subHeadings=regex.search(“\d+\.\d+\t\p{Lu}(\p{Ll}+”),para.text,regex.UNICODE)
如果标题:
如果第1.2段运行:
对于磨合段运行:
#在运行级别检查粗体或斜体。
如果为run.bold:
打印(“粗体标题:”,标题组(0))
如果为run.italic:
打印(“斜体标题:”,标题组(0))
如副标题为:
如果第1.2段运行:
对于磨合段运行:
#在运行级别检查粗体或斜体。
如果为run.bold:
打印(“粗体子目:”,子目。第(0)组)
如果为run.italic:
打印(“斜体子目:”,子目。第(0)组)
注意:粗体或斜体在运行级别并不总是存在。如果没有获得这些参数,则应检入样式和段落级别