python - 这是我的函数或 Python 中的 docx.Document 的缺陷吗

标签 python python-docx

我正在使用docx.Document提取docx文件中的一些突出显示的文本/单词,但结果非常奇怪,因为提取的一些单词被分成了碎片,如下所示:

['sniffle', 'irritations', 'enzymes', 'abrasive', 'immunoglobulins', 'histamine', 'leukotriene', 'predisposition', 'an', 'aphylaxis', 'syndrome', 'angioedema', 'contact', 'dermatitis', 'frightening', 'tingling', 'eczema', 'nausea', 'wheezing', 'anaphylaxis', 'lump', 'epinephrine', 'venom sac', 'scrape', 'ointment', 'hydrocortisone', 'calamine', 'loose-fitting', 'swatting', 'birch', 'fact sheet', 'urticarial', 'A', 'ngioedema']

“an”、“aphylaxis”实际上来自单词“anaphylaxis”, “A”、“ngioedema”实际上来自“Angioedema”一词

我没有以错误的方式突出显示这两个单词,例如先突出显示“A”,然后突出显示“ngioedema”,这是荒谬的。

逻辑很简单: 打开docx --> 使用段落/运行来浏览文本 --> 将突出显示的单词保存在列表中

def preProcess(filepath):
    document = docx.Document(filepath)
    for para in document.paragraphs:
        for run in para.runs:
            if run.font.highlight_color == WD_COLOR_INDEX.YELLOW:
                keyText.append((run.text.lstrip()).rstrip())
                for key in keyText:
                    if '' in keyText:
                        keyText.remove('')
    extractWdFrmDocx(keyText)

显然,提取时,一个单词不能被破坏

最佳答案

段落中的文本可以在任意点分成多个段落,单个单词跨越多个段落的情况很常见。因此,不能保证游程发生在字边界处。如果您想提取突出显示的单词,您将需要更复杂的方法。

一种方法是将 paragraph.text 拆分为单词,这样您还可以知道运行中每个单词的第一个字符的起始偏移量。然后,您可以遍历运行以识别那些突出显示的运行,累积每次运行开始的偏移量。

您需要一些巧妙的逻辑来识别突出显示的单词中的单词,但提到的所有信息都应该是您执行此操作所需的全部信息。

因此,对于文本为“突出显示的单词”的段落,您的单词偏移量将为:

(0, "a"), (2, "highlighted"), (14, "word")

您突出显示的运行(偏移、长度)对可能是:

(2, 4), (6, 7)

据此,您可以计算出(2,突出显示) 的第一个字符被突出显示,并且突出显示在单词的其余部分中是连续的。

您可以简化逻辑,选择第一个字符突出显示的任何整个单词,而不必担心从单词中间开始的运行,具体取决于您的需要。

关于python - 这是我的函数或 Python 中的 docx.Document 的缺陷吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57917725/

相关文章:

python - 在Python中将UTC字符串转换为本地日期时间字符串?

python - matplotlib 轴标签与数据箱不对齐

python - 使用 pandas read_csv 读取这个以制表符分隔的文件时,行丢失

python - 制作最后一段 - 事件指针

python - 使用python docx合并word文档

python - 将 python-docx 文档上传到 Azure blob 存储

python - 使用Python从docx解析表

Python:通过四舍五入将列表中的#值分配给垃圾箱

python - 如何查看 python-docx 包生成的 XML

python - 从 pandas 数据框中删除大量列