Jak mogę wyszukać słowo w słowie 2007.plik docx?
Chciałbym przeszukać plik Word 2007 (.docx) Dla ciągu tekstowego, np. "jakaś specjalna fraza", która mogłaby / mogłaby zostać znaleziona z wyszukiwania w Wordzie.
Czy istnieje sposób z Pythona, aby zobaczyć tekst? Nie interesuje mnie formatowanie-chcę tylko sklasyfikować dokumenty jako posiadające lub nie posiadające "jakiejś specjalnej frazy".
10 answers
Dokładniej, a .dokument docx jest archiwum Zip w formacie OpenXML: najpierw musisz go rozpakować.
Pobrałem próbkę (Google: jakiś wyszukiwany filetype: docx) i po rozpakowaniu znalazłem kilka folderów. Folder word zawiera sam dokument, w pliku dokument.xml .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 17:22:10
Po przeczytaniu Twojego postu powyżej, zrobiłem 100% natywny moduł Python docx, aby rozwiązać ten konkretny problem.
# 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')
Moduł docx znajduje się w https://python-docx.readthedocs.org/en/latest/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-27 08:53:42
W tym przykładzie " zarys kursu.docx "to dokument Word 2007, który zawiera słowo "Windows" i nie zawiera wyrażenia "losowy inny ciąg".
>>> 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()
Zasadniczo, wystarczy otworzyć plik docx (który jest archiwum zip) za pomocą zipfile i znaleźć zawartość w ' document.plik xml 'w folderze 'word'. Jeśli chcesz być bardziej wyrafinowany, możesz przeanalizować XML , ale jeśli szukasz tylko frazy (o której wiesz, że nie będzie tagiem), następnie możesz po prostu spojrzeć w XML dla ciągu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 23:12:59
Problem z przeszukiwaniem wewnątrz pliku XML dokumentu programu Word polega na tym, że tekst można podzielić na elementy o dowolnym znaku. Z pewnością zostanie podzielony, jeśli formatowanie jest INNE, na przykład jak w Hello World . Ale to Może być podzielone w dowolnym momencie i to jest ważne w OOXML. Więc skończysz do czynienia z XML w ten sposób, nawet jeśli formatowanie nie zmienia się w środku frazy!
<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>
Można oczywiście załadować go do drzewa DOM XML (Nie wiem, co to będzie w Python) i poprosić o tekst tylko jako ciąg znaków, ale możesz skończyć z wieloma innymi " ślepymi zaułkami "tylko dlatego, że specyfikacja OOXML ma około 6000 stron i MS Word może napisać wiele" rzeczy", których się nie spodziewasz. Więc możesz skończyć pisząc własną bibliotekę przetwarzania dokumentów.
Lub możesz spróbować użyć Aspose.Słowa .
Jest dostępny jako. NET i Java produktów. Oba mogą być używane z Pythona. Jeden przez COM Interop drugi przez JPype. Zobacz TeżWords Programmers Guide, Use / Align = "left" / Słowa w innych językach programowania (niestety nie mogę wstawić drugiego linka, stackoverflow mi jeszcze nie pozwala).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-15 11:01:08
Docx to po prostu archiwum zip z mnóstwem plików w środku. Może mógłbyś spojrzeć na zawartość tych plików? Poza tym prawdopodobnie musisz znaleźć lib, który rozumie format word, abyś mógł odfiltrować rzeczy, które cię nie interesują.
Drugim wyborem będzie interakcja z programem word i przeszukiwanie go.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 17:16:43
Możesz użyć docx2txt
, Aby uzyskać tekst wewnątrz docx, niż wyszukać w tym txt
npm install -g docx2txt
docx2txt input.docx # This will print the text to stdout
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 10:51:23
Plik docx jest zasadniczo plikiem zip z XML w nim.
xml zawiera formatowanie, ale zawiera również tekst.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 17:17:15
Automatyzacja OLE byłaby prawdopodobnie najłatwiejsza. Należy rozważyć formatowanie, ponieważ tekst może wyglądać tak w XML:
<b>Looking <i>for</i> this <u>phrase</u>
Nie ma łatwego sposobu, aby znaleźć to za pomocą prostego skanowania tekstu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-10 21:18:00
Powinieneś być w stanie użyć interfejsu MSWord ActiveX, aby wyodrębnić tekst do wyszukiwania(lub ewentualnie wykonać wyszukiwanie). Nie mam pojęcia, jak uzyskać dostęp do ActiveX z Pythona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 17:17:26
Możesz również rozważyć użycie biblioteki z OpenXMLDeveloper.org
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-18 19:34:32