2013-09-21 18 views
1

我在刪除表格後從.docx中提取文本時遇到了問題。 我正在處理的docx文件包含很多我想在提取文本之前擺脫的表格。 我首先使用docx2html將docx文件轉換爲html,然後使用BeautifulSoup刪除表格標籤並提取文本。如何有效地從docx/xml中刪除表格並提取文本

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中提取文本。

回答

1

docx文件不僅僅是xml文件,而是zipped xml based format,所以你不能直接傳遞一個docx文件到BeautifulSoup。格式似乎很簡單,雖然as the zipped docx contains a file called word/document.xml這可能是你想要解析的xml文件。您可以使用Python的zip文件模塊,提取該文件,並直接傳遞其內容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,這可能會做很多你想要什麼已經。我沒有嘗試過,所以我不能保證它適合您的具體使用情況。

+0

你說得對,關於python-docx。它確實負責從.docx文件中提取文本。在將docx傳遞給python-docx之後,將生成一個lxml.etree.Element,它可以使用lxml解析器進行操作。 –