从.docx / .doc文件中提取突出显示的文本

时间:2019-04-16 05:20:42

标签: python-3.x python-docx

首先,我需要从大型文档(主要是docx和pdf文件)中提取特定的单词/短语。到目前为止,我们同意以突出显示的文本形式接收数据,因为将所有单词标记复制粘贴到excel中对他们来说都是不可行的。 尝试提取突出显示的文本时,我发现了这篇文章:How can I get the text by color from a word document with win32com?

在这篇文章中,Bio-Geek提供了一个代码片段,这正是我所需要的,但是我无法运行它,错误是:

NameError:名称'opendocx'未定义

我希望opendocx可以通过-从docx导入中得到照顾*

我尝试了python版本2.7和3.6,并且都抛出了相同的错误。

我尝试通过beautifulsoup来获取XML标签,但是没有运气。我是解析文档的新手。 如果有人可以建议另一种接收数据的方式而又不增加数据团队的工作量,将不胜感激。

这是我之前提到的Bio-Geek的代码段。

from docx import *
document = opendocx(r'test.docx')
words = document.xpath('//w:r', namespaces=document.nsmap)
WPML_URI = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}"
tag_rPr = WPML_URI + 'rPr'
tag_highlight = WPML_URI + 'highlight'
tag_val = WPML_URI + 'val'
tag_t = WPML_URI + 't'
for word in words:
    for rPr in word.findall(tag_rPr):
        high=rPr.findall(tag_highlight)
        for hi in high:
            if hi.attrib[tag_val] == 'yellow':
                print word.find(tag_t).text.encode('utf-8').lower()

NameError:名称'opendocx'未定义

2 个答案:

答案 0 :(得分:2)

假设您想使用 python-docx,您可以使用以下代码段。如果您只想查找以某种颜色突出显示的文本,您可以进一步检查(请参阅 https://python-docx.readthedocs.io/en/latest/api/text.html#docx.text.run.Font.highlight_color


import docx

document = docx.Document("input.docx")

highlights = []
for paragraph in document.paragraphs:
    highlight = ""
    for run in paragraph.runs:
        if run.font.highlight_color:
            highlight += run.text
    if highlight:
        highlights.append(highlight)

for h in highlights:
    print(h)

答案 1 :(得分:1)

opendocx()不再是最新版本的python-docx的一部分。兼容的最后一个版本是在v0.3.0之前。您需要使用“文档”打开文件

document = Document(docx_file_path)

您可以从this discussion

了解更多信息