我想搜索一个Word 2007文件(.docx)作为文本字符串,例如,“某些特殊的短语”,可以/将从Word中的搜索中找到。如何搜索Word 2007 .docx文件中的单词?
有没有从Python的方式看到文本?我对格式化没有兴趣 - 我只是想将文档分类为有或没有“某些特殊词组”。
我想搜索一个Word 2007文件(.docx)作为文本字符串,例如,“某些特殊的短语”,可以/将从Word中的搜索中找到。如何搜索Word 2007 .docx文件中的单词?
有没有从Python的方式看到文本?我对格式化没有兴趣 - 我只是想将文档分类为有或没有“某些特殊词组”。
更确切地说,.docx文档是OpenXML格式的Zip存档文件:您首先需要对其进行解压缩。
我下载了一个示例(Google:某些搜索字词文件类型:docx),解压缩后我找到了一些文件夹。 字文件夹包含文件本身,文件document.xml。
一个docx只是一个zip文件,里面有很多文件。也许你可以看看这些文件的一些内容?除此之外,你可能必须找到一个理解单词格式的库,以便你可以过滤掉你不感兴趣的东西。
第二种选择是与单词互操作并通过它进行搜索。
一个docx文件本质上是一个带有xml的zip文件。
xml包含格式,但它也包含文本。
您应该能够使用MSWord ActiveX接口来提取要搜索的文本(或者可能执行搜索)。我不知道如何从Python访问ActiveX。
OLE自动化可能是最简单的。你必须要考虑的格式,因为文本可能看起来像这样的XML:
<b>Looking <i>for</i> this <u>phrase</u>
有发现,没有简单的方法使用简单的文本扫描。
在本示例中,“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压缩包),并且发现在“字”文件夹中的“document.xml中”文件中的内容。如果你想变得更加复杂,那么你可以使用parse the XML,但是如果你只是在寻找一个短语(你知道它不会是一个标签),那么你可以在XML中查找字符串。
在元素文本(使用XML解析器)中查找短语可能比您不必担心部分文本是否与元素名称匹配更容易。 – mikemaccana 2009-12-27 12:59:51
您也可以考虑使用该库从OpenXMLDeveloper.org
的问题与Word文档的XML文件内搜索的文本可以分成在任何字符元素。如果格式不同,它肯定会被拆分,例如,您好:世界。但它可以在任何时候分裂,并在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页长,而MS Word可以写很多你不期望的“东西”。所以你最终可以编写自己的文档处理库。可以使用Aspose.Words。
它可作为.NET和Java产品提供。两者都可以从Python中使用。一个通过COM Interop另一个通过JPype。请参阅Aspose.Words程序员指南,在其他编程语言中使用Aspose.Words(抱歉,我无法发布第二个链接,但stackoverflow不允许我)。
`OOXML规范大约有6000页长':你一定是在开玩笑吧:O – claws 2012-12-26 20:00:40
阅读完上面的文章后,我制作了一个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')
等等...你为这个问题写了一个完整的模块?! – 11684 2013-02-10 21:34:10
您可以在TXT使用docx2txt
得到DOCX中的文本,比搜索
npm install -g docx2txt
docx2txt input.docx # This will print the text to stdout
雅我得到的所有的XML file.Now我想问你,我们如何获得像(粗体,斜体,颜色,名字,空格)和所有格式设置的所有值,我们如何从XML获取这个值。 – user1006544 2011-12-17 10:46:56