Вопрос по python, docx, openxml, ms-word – Как я могу найти слово в файле Word 2007 .docx?
Я хотел бы найти в текстовом файле Word 2007 (.docx) текстовую строку, например "некоторую специальную фразу". это может / будет найдено из поиска в Word.
Есть ли способ из Python, чтобы увидеть текст? Меня не интересует форматирование - я просто хочу классифицировать документы как имеющие или не имеющие «какой-то особой фразы».
Проблема с поиском внутри XML-файла документа Word заключается в том, что текст может быть разбит на элементы по любому символу. Конечно, он будет разделен, если форматирование отличается, например, как в HelloWorld, Но этоcan быть разделенным в любой точке, и это действительно в 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 пока не позволяет мне).
Прочитав ваш пост выше, я сделал 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/
Docx - это просто zip-архив с множеством файлов внутри. Может быть, вы можете посмотреть на содержимое этих файлов? Кроме этого вам, вероятно, придется найти библиотеку, которая понимает формат слова, чтобы вы могли отфильтровать то, что вам не интересно.
Вторым вариантом будет взаимодействие со словом и поиск по нему.
В этом примере & quot; Course Outline.docx & quot; является документом Word 2007, который содержит слово «Windows» и не содержит фразу «случайная другая строка».
>>> 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()
По сути, вы просто открываете файл docx (который является zip-архивом), используяZipFileи найдите содержимое в «document.xml»; файл в «слове» папка. Если вы хотите быть более сложным, вы могли бы тогдаразбирать XML, но если вы просто ищете фразу (которая, как вы знаете, не будет тегом), то вы можете просто найти в XML строку.