2012-03-05 5 views
3

나는 지금 내가 원하는, (컬러 코드, 파랑, 노랑, 회색 예 사용) 강조 나는 텍스트 (단어)를 보유하고있는 Word 문서의 무리와 함께하고 있어요 각 색상과 관련된 강조 표시된 단어를 추출합니다. 나는 파이썬으로 프로그래밍하고있다. 다음은 현재 수행 한 작업입니다.추출 강조 단어는 (.DOCX) 파이썬

[python-docx][1]이라는 단어 문서를 연 다음 문서에 토큰 (단어)이 포함 된 <w:r> 태그가 표시됩니다. 나는 다음 코드를 사용하고 있습니다 :

#!/usr/bin/env python2.6 
# -*- coding: ascii -*- 
from docx import * 
document = opendocx('test.docx') 
words = document.xpath('//w:r', namespaces=document.nsmap) 
for word in words: 
    print word 

지금 나는 그것을 <w:highlight> 태그가있는 경우 각 단어를 확인하고 그것에서 색상 코드를 추출하는 부분에 붙어 있으며 <w:t> 태그 안에 노란색 인쇄 텍스트에 일치하는 경우. 누군가가 파싱 된 파일에서 단어를 추출하는 것을 가리킬 수 있다면 정말 고마워 할 것입니다.

답변

4

내가 전에 python-docx와 함께 일하지,하지만 도움은 같은 텍스트 lookls의 하이라이트 부분의 XML 구조를 어떻게의 온라인 조각을 발견했다 적이 : 거기에서

<w:r> 
    <w:rPr> 
     <w:highlight w:val="yellow"/> 
    </w:rPr> 
    <w:t>text that is highlighted</w:t> 
    </w:r> 

, 그것은 비교적 간단했다 이 문제를 해결하려면 다음을 수행하십시오.

from docx import * 
document = opendocx(r'test.docx') 
words = document.xpath('//w:r', namespaces=document.nsmap) 

WPML_URI = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" 
tag_rPr = WPML_URI + 'rPr' 
tag_highlight = WPML_URI + 'highlight' 
tag_val = WPML_URI + 'val' 

for word in words: 
    for rPr in word.findall(tag_rPr): 
     if rPr.find(tag_highlight).attrib[tag_val] == 'yellow': 
      print word.find(tag_t).text 
+0

감사합니다. @BioGeek :) 훌륭합니다! : –

+0

내가 (tag_t의 선언과 UTF8 문자 아스키의 취급없는) 몇 가지 사소한 변경 사항이 수정 된 코드는 다시 한 번 https://gist.github.com/1982168에 감사 @BioGeek 수 있습니다! –

+0

당신을 진심으로 환영합니다. 그것은 멋진 질문이었고 새로운 것을 배웠습니다. 동료 생물 정보 과학자 인사말! – BioGeek