1

删除表格后,我在从 .docx 中提取文本时遇到问题。我正在处理的 docx 文件包含许多我想在提取文本之前删除的表格。我先用docx2html把一个docx文件转成html,然后用BeautifulSoup去掉table标签,提取文本。

from docx2html import convert
from bs4 import BeautifulSoup
...
temp = convert(FileToConvert)
soup = BeautifulSoup(temp)
for i in range(0,len(soup('table'))):
    soup.table.decompose()
Text = soup.get_text()

虽然这个过程有效并产生了我需要的东西,但 docx2html.convert() 存在一些效率问题。由于 .docx 文件实际上是 .xml 文件,是否可以跳过将 docx 转换为 html 的过程,并在删除表格后从 xml 中提取文本。

4

1 回答 1

1

docx 文件不仅仅是 xml 文件,而是基于 xml 的压缩格式,因此您无法将 docx 文件直接传递给 BeautifulSoup。格式看起来很简单,因为压缩的 docx 包含一个名为word/document.xml的文件,它可能是您要解析的 xml 文件。您可以使用 Python 的 zipfile 模块来提取此文件并将其内容直接传递给 BeautfulSoup:

import sys
import zipfile

from bs4 import BeautifulSoup

with zipfile.ZipFile(sys.argv[1], 'r') as zfp:
    with zfp.open('word/document.xml') as fp:
        soup = BeautifulSoup(fp.read(), 'xml')

print soup

但是,您可能还想查看https://github.com/mikemaccana/python-docx,它可能已经做了很多您想要的事情。我还没有尝试过,所以我不能保证它是否适合您的特定用例。

于 2013-09-21T16:48:33.757 回答