문제

Word 2007 파일(.docx)에서 Word 내 검색을 통해 찾을 수 있거나 찾을 수 있는 "일부 특수 문구"와 같은 텍스트 문자열을 검색하고 싶습니다.

Python에서 텍스트를 볼 수 있는 방법이 있나요?나는 형식화에 관심이 없습니다. 단지 문서를 "특별한 문구"가 있는지 여부로 분류하고 싶을 뿐입니다.

도움이 되었습니까?

해결책

보다 정확하게는 .docx 문서는 OpenXML 형식의 Zip 아카이브입니다.먼저 압축을 풀어야 합니다.
샘플을 다운로드했습니다(Google: 일부 검색어 파일 형식:docx) 압축을 풀고 몇 개의 폴더를 찾았습니다.그만큼 단어 폴더에는 문서 자체가 파일에 포함되어 있습니다. document.xml.

다른 팁

위의 게시물을 읽은 후 이 특정 문제를 해결하기 위해 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/

이 예에서 "Course Outline.docx"는 "Windows"라는 단어는 포함하고 "random other string"이라는 문구는 포함하지 않는 Word 2007 문서입니다.

>>> 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 아카이브)을 열면 됩니다. 압축 파일, 을 클릭하고 'word' 폴더의 'document.xml' 파일에서 내용을 찾으세요.좀 더 정교하게 만들고 싶다면 그렇게 할 수 있습니다. XML을 파싱하다, 그러나 태그가 아닌 문구만 찾고 있다면 XML에서 문자열을 찾아볼 수 있습니다.

Word 문서 XML 파일 내에서 검색할 때의 문제점은 텍스트가 임의의 문자에서 요소로 분할될 수 있다는 것입니다.예를 들어 Hello와 같이 형식이 다른 경우 확실히 분할됩니다. 세계.하지만 그것은 ~할 수 있다 언제든지 분할될 수 있으며 이는 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에서는 아직 허용하지 않습니다).

docx는 내부에 많은 파일이 들어 있는 zip 아카이브입니다.어쩌면 그 파일의 내용 중 일부를 볼 수 있을까요?그 외에는 관심 없는 항목을 필터링할 수 있도록 단어 형식을 이해하는 라이브러리를 찾아야 할 수도 있습니다.

두 번째 선택은 단어와 상호 작용하여 검색을 수행하는 것입니다.

당신이 사용할 수있는 docx2txt 해당 txt에서 검색하는 것보다 docx 내부의 텍스트를 얻으려면

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

docx 파일은 기본적으로 내부에 xml이 포함된 zip 파일입니다.
xml에는 서식이 포함되어 있지만 텍스트도 포함되어 있습니다.

OLE 자동화가 아마도 가장 쉬울 것입니다.텍스트가 XML에서 다음과 같이 나타날 수 있으므로 서식 지정을 고려해야 합니다.

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

간단한 텍스트 스캔을 사용하여 이를 찾는 쉬운 방법은 없습니다.

MSWord ActiveX 인터페이스를 사용하여 검색할 텍스트를 추출할 수 있어야 합니다(또는 검색을 수행할 수도 있음).하지만 Python에서 ActiveX에 어떻게 액세스하는지 모르겠습니다.

다음의 도서관 이용을 고려해 볼 수도 있습니다. OpenXMLDeveloper.org

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top