2015-09-05 84 views
7

我正在尋找一個優雅的解決方案來查找文檔中的哪些頁面上存在某個詞,我已經存儲在python詞典/列表中。查找文檔頁面上的文字

我首先考慮.docx格式作爲輸入,並看看PythonDocx它有一個搜索功能,但顯然沒有真正的docx/xml格式的頁面屬性。 如果我解析文檔,我可以在xml樹中查找<w:br w:type="page"/>,但不幸的是這些不會顯示非強制分頁符。

我甚至考慮過先將文件轉換爲PDF格式,然後使用類似PDFminer這樣的文件來解析頁面文檔。

有沒有簡單的解決方案,以搜索字符串的.docx文檔,並且返回頁面它發生在像

[('foo' ,[1, 4, 7 ]), ('bar', [2]), ('baz', [2, 5, 8, 9)] 
+0

我認爲這是你要找的東西: [link](http://stackoverflow.com/questions/12571905/finding-on-which-page-a-search-string-is-located-in -a-pdf-document-using-python) – Roxy

+0

@birgit你還在尋找關於這個話題的解決方案嗎? – mabe02

+0

@ mabe02我還沒有找到工作解決方案,但沒有:/但會有興趣 – birgit

回答

2

解析XML文件組成的docx

看來,最大的挑戰在你的問題是如何能夠逐頁解析文檔。 word文檔的This answer並不總是相同的,它取決於邊距,紙張設置,打開它所用的應用程序等。有關此目的的任何腳本的準確性的完整推理可在google group找到。

但是,如果你能滿意了幾乎100%的準確,你開始尋找解決方案,在這個google group建議:

我發現我可以解壓縮.docx文件並提取docProps/app.xml,然後使用ElementTree解析XML以獲取<Pages></Pages>元素。我發現大部分時間這個數字都是準確的,但是我已經看到了這個元素中的數字不正確的幾個例子。

使用Win32com.Client

另一種方法可以是使用win32com.client打開文件,分頁吧,讓你的搜索,然後在你想要的格式返回結果。

可以在this answer找到語法的例子:

from win32com.client import Dispatch 
#open Word 
word = Dispatch('Word.Application') 
word.Visible = False 
word = word.Documents.Open(doc_path) 

#get number of sheets 
word.Repaginate() 
num_of_sheets = word.ComputeStatistics(2) 

你也可以看看到this answer關於查找和使用win32com.client在Word文檔中替換

+0

@birgit所以它回答你的問題?它有用嗎? – mabe02