我想在Word 2007文件(.docx)中搜索文本字符串,例如,可以/可以从Word中的搜索中找到的“某些特殊短语”。
Python有没有办法看到文字?我对格式化没兴趣 - 我只是想将文档归类为是否有“某些特殊短语”。
答案 0 :(得分:151)
在阅读上面的帖子后,我制作了一个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')
答案 1 :(得分:33)
更确切地说,.docx文档是OpenXML格式的Zip存档:首先要解压缩它。
我下载了一个示例(Google:一些搜索字词文件类型:docx ),解压后我找到了一些文件夹。 word 文件夹包含文档本身,位于文件 document.xml 中。
答案 2 :(得分: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'文件中的内容。如果你想要更复杂,那么你可以parse the XML,但如果你只是在寻找一个短语(你知道它不是一个标签),那么你可以只查看XML中的字符串
答案 3 :(得分:14)
在Word文档XML文件中搜索的问题是文本可以拆分为任何字符的元素。如果格式不同,它肯定会被拆分,例如在Hello World 中。但它可以在任何点分割,这在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不允许我)。
答案 4 :(得分:4)
docx只是一个包含大量文件的zip存档。也许你可以看一下这些文件的一些内容?除此之外,您可能必须找到一个理解单词格式的库,以便您可以过滤掉您不感兴趣的内容。
第二种选择是与单词互操作并通过它进行搜索。
答案 5 :(得分:4)
您可以使用docx2txt
获取docx中的文本,而不是在该txt中搜索
npm install -g docx2txt
docx2txt input.docx # This will print the text to stdout
答案 6 :(得分:2)
docx文件本质上是一个zip文件,里面有一个xml xml包含格式,但它也包含文本。
答案 7 :(得分:1)
OLE自动化可能是最简单的。您必须考虑格式化,因为文本在XML中可能如下所示:
<b>Looking <i>for</i> this <u>phrase</u>
使用简单的文本扫描找不到简单的方法。
答案 8 :(得分:0)
您应该能够使用MSWord ActiveX接口提取要搜索的文本(或者,可能进行搜索)。我不知道你如何从Python访问ActiveX。
答案 9 :(得分:0)
您也可以考虑使用OpenXMLDeveloper.org
中的库