Подтвердить что ты не робот

Как я могу найти слово в файле Word 2007.docx?

Я хотел бы найти файл Word 2007 (.docx) для текстовой строки, например, "некоторую специальную фразу", которая могла бы/была бы найдена при поиске в Word.

Есть ли способ из Python просмотреть текст? Я не заинтересован в форматировании - я просто хочу классифицировать документы как имеющие или не имеющие "какую-то особую фразу".

4b9b3361

Ответ 1

Точнее, документ .docx - это Zip-архив в формате OpenXML: сначала его нужно распаковать.
Я загрузил образец (Google: некоторый термин поиска filetype: docx), и после распаковки я нашел несколько папок. Папка слова содержит сам документ в файле document.xml.

Ответ 2

После прочтения вашего поста выше, я создал 100% -ный собственный модуль docx Python для решения этой конкретной проблемы.

# 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/

Ответ 3

В этом примере "Course Outline.docx" является документом 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 и находите содержимое в документе .xml 'в папке "word". Если бы вы хотели быть более сложными, вы могли бы анализировать XML, но если вы просто ищете фразу (которую вы знаете, t - тег), то вы можете просто посмотреть в XML для строки.

Ответ 4

Проблема с поиском внутри XML файла документа Word заключается в том, что текст можно разделить на элементы любого символа. Он будет разделен, если форматирование отличается, например, в 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 spec составляет около 6000 страниц, и MS Word может писать много "вещей", которых вы не ожидаете. Таким образом, вы можете написать свою собственную библиотеку обработки документов.

Или вы можете попробовать использовать Aspose.Words.

Он доступен как .NET и Java-продукты. Оба могут использоваться из Python. Один через COM Interop другой через JPype. См. Руководство по программированию Aspose.Words, Utilize Aspose.Words на других языках программирования (извините, я не могу опубликовать вторую ссылку, stackoverflow еще не позволяет мне).

Ответ 5

Docx - это просто zip-архив с большим количеством файлов внутри. Может быть, вы можете посмотреть на некоторые из этих файлов? Помимо этого вам, вероятно, придется найти lib, который понимает формат слова, чтобы вы могли отфильтровывать то, что вас не интересует.

Второй выбор состоял бы в том, чтобы взаимодействовать со словом и выполнять поиск через него.

Ответ 6

Вы можете использовать docx2txt, чтобы получить текст внутри docx, чем поиск в этом txt

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

Ответ 7

Файл docx - это, по существу, zip файл с xml внутри него.
xml содержит форматирование, но также содержит текст.

Ответ 8

Автоматизация OLE, вероятно, будет самой простой. Вы должны рассмотреть форматирование, потому что текст может выглядеть так в XML:

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

Нет простого способа найти это, используя простое сканирование текста.

Ответ 9

Вы должны иметь возможность использовать интерфейс MSWord ActiveX для извлечения текста для поиска (или, возможно, поиска). Я понятия не имею, как вы получаете доступ к ActiveX из Python.

Ответ 10

Вы также можете использовать библиотеку из OpenXMLDeveloper.org