2017-01-13 15 views
0

おはようございます; 私はこのコードを使用してSGML文書を抽出しようとしているが、私は結果として空の書類を持って、これは私のPythonコードです: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/TEXTElementにはtext nodeが存在しません。そのため、doc.find('TEXT').textは空の文字列を返します。

代わりに、Elementノード(別名<P>)があります。

最後に、Element '文字列化' に、あなたはET.tostring()

TLDR

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

を使用することができ、私はこのようにしてみてくださいよ、対応していただきありがとうございます。 –

関連する問題