如何searchWord 2007 .docx文件中的单词?

我想search一个文本string的Word 2007文件(.docx),例如,“一些特殊的短语”,可以/将在Word中searchfind。

有没有办法从Python看到文本? 我对格式没有兴趣 – 我只是想将文档分类为有或没有“某些特殊的词组”。

更确切地说,一个.docx文档是一个OpenXML格式的Zip文档:你首先要解压缩它。
我下载了一个示例(Google: 一些search术语filetype:docx ),解压后我发现了一些文件夹。 word文件夹包含文档本身,位于文件document.xml中

在阅读完上面的文章之后,我制作了一个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/

在此示例中,“Course Outline.docx”是一个Word 2007文档,其中包含单词“Windows”,并且不包含“随机其他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'文件中find内容。 如果你想变得更加复杂,那么你可以parsingXML ,但是如果你只是在寻找一个短语(你知道这不是一个标签),那么你可以在XML中查找string。

在Word文档XML文件中search的一个问题是文本可以分成任何字符的元素。 如果格式不同,它肯定会被拆分,例如在Hello World中 。 但是它可以在任何时候被分割,并且在OOXML中是有效的。 所以,即使格式不在短语中间改变,你也将最终处理这样的XML。

 <w:pw:rsidR="00C07F31" w:rsidRDefault="003F6D7A"> <w:rw: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中的内容),并要求仅将文本作为string来获取,但是由于OOXML规范的存在,您可能会遇到很多其他的“死胡同” 6000页的长度和MS Word可以写很多“东西”你不指望。 所以你最终可以编写自己的文档处理库。

或者你可以尝试使用Aspose.Words 。

它可以作为.NET和Java产品。 两者都可以从Python中使用。 一个通过COM Interop另一个通过JPype。 请参阅Aspose.Words程序员指南,在其他编程语言中使用Aspose.Words(抱歉,我不能发布第二个链接,stackoverflow不让我)。

一个docx只是一个zip文件里面有很多文件。 也许你可以看看这些文件的一些内容? 除此之外,您可能必须find一个理解单词格式的库,以便您可以过滤出您不感兴趣的内容。

第二个select是与单词交互,并通过它进行search。

您可以使用docx2txt获取docx内的文本,而不是在该文本中search

 npm install -g docx2txt docx2txt input.docx # This will print the text to stdout 

一个docx文件本质上是一个带有xml的zip文件。
xml包含格式,但也包含文本。

OLE自动化可能是最简单的。 您必须考虑格式化,因为XML中的文本可能如下所示:

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

使用简单的文本扫描并不容易。

您应该能够使用MSWord ActiveX接口来提取要search的文本(或者可能执行search)。 我不知道如何从Python访问ActiveX。

你也可以考虑使用OpenXMLDeveloper.org的库