2015-09-05 15 views
7

私は、文書内のどのページにある単語があるかを見つけるための洗練されたソリューションを探しています。文書内のページにある単語を検索する

私は最初に.docx形式を入力と見なし、検索機能を持つPythonDocxを見ましたが、実際にはdocx/xml形式のページ属性ではありません。 文書を解析すると、xmlツリー内で<w:br w:type="page"/>の出現を探すことができますが、残念なことにこれらは非強制ページ区切りを表示しません。

ファイルを最初にPDFに変換し、ドキュメントをページ単位で解析するためにPDFminerのようなものを使用することさえ考えました。

docxファイルを構成するXMLファイルを解析して文字列の.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

のように発生したページを返すために任意の簡単な解決策があるのは

それは最大の課題と思われますあなたの質問には、ページごとにドキュメントを解析する方法があります。 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