50

Word 2007 ファイル (.docx) でテキスト文字列を検索したいと思います。たとえば、Word 内の検索で見つかる可能性がある、または見つかる可能性がある「特別な語句」などです。

Python からテキストを表示する方法はありますか? 書式設定には興味がありません。ドキュメントを「特別なフレーズ」があるかどうかで分類したいだけです。

4

10 に答える 10

156

上記の投稿を読んだ後、この特定の問題を解決するために、100% ネイティブの Python docx モジュールを作成しました。

# Import the module
from docx import *

# Open the .docx file
document = opendocx('A document.docx')

# Search returns true if found    
search(document,'your search string')

docx モジュールはhttps://python-docx.readthedocs.org/en/latest/にあります。

于 2009-12-30T12:08:33.283 に答える
35

より正確には、.docx ドキュメントは OpenXML 形式の Zip アーカイブです。最初に解凍する必要があります。
サンプル (Google:いくつかの検索用語 filetype:docx ) をダウンロードし、解凍した後、いくつかのフォルダーを見つけました。wordフォルダーには、ファイルdocument.xml内のドキュメント自体が含まれています。

于 2008-09-22T17:22:10.097 に答える
16

Word文書のXMLファイル内を検索する際の問題は、テキストを任意の文字の要素に分割できることです。たとえばHelloWorldのように、フォーマットが異なる場合は、確実に分割されます。ただし、いつでも分割でき、OOXMLで有効です。したがって、フレーズの途中でフォーマットが変更されなくても、このようなXMLを処理することになります。

<w:p w:rsidR="00C07F31" w:rsidRDefault="003F6D7A">

<w:r w:rsidRPr="003F6D7A">

<w:rPr>

<w:b /> 

</w:rPr>

<w:t>Hello</w:t> 

</w:r>

<w:r>

<w:t xml:space="preserve">World.</w:t> 

</w:r>

</w:p>

もちろん、それをXML DOMツリーにロードして(これがPythonでどうなるかわからない)、テキストを文字列としてのみ取得するように要求することもできますが、OOXML仕様が存在するという理由だけで、他の多くの「行き止まり」になってしまう可能性があります。 6000ページの長さで、MSWordは予期しない多くの「もの」を書き込むことができます。したがって、独自のドキュメント処理ライブラリを作成することになります。

または、 Aspose.Wordsを使用してみてください。

.NETおよびJava製品として利用できます。どちらもPythonから使用できます。1つはCOM相互運用を介して、もう1つはJPypeを介して。Aspose.Wordsプログラマーガイド、他のプログラミング言語でのAspose.Wordsの利用を参照してください(申し訳ありませんが、2番目のリンクを投稿できません。stackoverflowではまだ許可されていません)。

于 2009-11-15T11:01:08.003 に答える
16

この例では、"Course Outline.docx" は Word 2007 文書であり、"Windows" という単語が含まれていますが、"random other string" という語句は含まれていません。

>>> import zipfile
>>> z = zipfile.ZipFile("Course Outline.docx")
>>> "Windows" in z.read("word/document.xml")
True
>>> "random other string" in z.read("word/document.xml")
False
>>> z.close()

基本的には、 zipfileを使用して docx ファイル (zip アーカイブ) を開き、「word」フォルダー内の「document.xml」ファイルでコンテンツを見つけるだけです。より洗練されたものにしたい場合は、 XML を解析できますが、フレーズ (タグではないことがわかっている場合) を探しているだけの場合は、XML で文字列を探すことができます。

于 2008-09-22T23:12:59.630 に答える
5

docx2txtそのtxtで検索するよりも、docx内のテキストを取得するために使用できます

npm install -g docx2txt
docx2txt input.docx # This will  print the text to stdout
于 2014-12-09T10:51:23.733 に答える
4

docx は、内部に多数のファイルを含む単なる zip アーカイブです。それらのファイルの内容の一部を確認できますか? それ以外には、おそらく、興味のないものを除外できるように、単語の形式を理解するライブラリを見つける必要があります。

2 番目の選択肢は、単語と相互運用して検索を行うことです。

于 2008-09-22T17:16:43.417 に答える
2

docx ファイルは、本質的には xml を含む zip ファイルです。
xml にはフォーマットが含まれていますが、テキストも含まれています。

于 2008-09-22T17:17:15.037 に答える
1

OLE オートメーションがおそらく最も簡単です。テキストは XML では次のようになるため、書式設定を考慮する必要があります。

<b>Looking <i>for</i> this <u>phrase</u>

単純なテキスト スキャンを使用してそれを見つける簡単な方法はありません。

于 2008-09-22T23:03:32.773 に答える
0

OpenXMLDeveloper.orgのライブラリの使用を検討することもできます。

于 2008-10-18T19:34:32.707 に答える
0

MSWord ActiveX インターフェイスを使用して、テキストを抽出して検索する (または、場合によっては検索を実行する) ことができるはずです。ただし、Python から ActiveX にアクセスする方法はわかりません。

于 2008-09-22T17:17:26.347 に答える