2017-01-13 2 views
0

안녕하세요 여러분; 이 코드를 사용하여 SGML 문서를 추출하기 위해 노력하고있어,하지만 난 결과로 빈 문서를 가지고,이 내 파이썬 코드 :python text.strip() 빈을 반환합니다.

from os import listdir 
from os import makedirs 
from os.path import isfile, join 
from re import sub 
import ast 
import numpy 
import xml.etree.ElementTree as ElementTree 
from lxml import etree 

parser = etree.XMLParser(recover=True) # escaping malformed strings 
pathCol="C:/Users/Desktop/FR" 
pathExtr="C:/Users/Desktop/FRExt" 
i=0 
for f in listdir(pathCol): 
    with open(join(pathCol,f), 'r') as f: # Reading file 
     xml = f.read() 

    xml = '<ROOT>' + xml + '</ROOT>' # Let's add a root tag 
    root = etree.fromstring(xml, parser=parser) 
    for doc in root: 
     try : 
      docNo=doc.find('DOCNO').text.strip() 
     except : 
      i+=1 
      docNo="LATIMES"+str(i) 
     try : 
      text=doc.find('TEXT').text.strip() 
     except : 
      try : 
       text=doc.find('HEADLINE').text.strip() 
      except : 
       try : 
        text=doc.find('GRAPHIC').text.strip() 
       except : 
        text=" " 

     fi=open(join(pathExtr,docNo),'w') 
     fi.write(text) 
     fi.close() 
     print("%s OK" %(docNo)) 
    f.close() 

그리고 이것은 샘플 문서의 구조 :

<DOC> 
<DOCNO> LA010189-0001 </DOCNO> 
<DOCID> 1 </DOCID> 
<DATE> 
<P> 
January 1, 1989, Sunday, Home Edition 
</P> 
</DATE> 
<SECTION> 
<P> 
Book Review; Page 1; Book Review Desk 
</P> 
</SECTION> 
<LENGTH> 
<P> 
1206 words 
</P> 
</LENGTH> 
<HEADLINE> 
<P> 
NEW FALLOUT FROM CHERNOBYL; 
</P> 
<P> 
THE SOCIAL IMPACT OF THE ... 
</P> 
</HEADLINE> 
<BYLINE> 
<P> 
By James E. ... 
</P> 
</BYLINE> 
<TEXT> 
<P> 
The onset of the new Gorbachev policy of glasnost,... 
</P> 
... 
</TEXT> 
</DOC> 
<DOC> 
... etc 
</DOC> 

나는 나를 도울 수있는 사람이 대신 내가 빈 문서 :( 하시기 바랍니다있어, <DOC></DOC> 사이의 각 문서에 대한 <TEXT> 라벨 사이의 콘텐츠를 원하는? 덕분에 많이.

답변

0

//ROOT/DOC/TEXTElementtext node이 없으므로 doc.find('TEXT').text이 빈 문자열을 반환합니다.

그 대신, 반복 할 수있는 노드는 Element (일명 <P>)입니다. 마지막으로

는 '캐릭터 라인 화'는 Element, 당신은이 같은 노력 할게요,

text = ''.join(map(ET.tostring, doc.find('TEXT'))).strip() 
+0

응답 해 주셔서 감사합니다 ET.tostring()

TLDR를 사용할 수 있습니다. –