2015-09-05 88 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