2017-01-13 4 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> 

Я хочу, чтобы получить содержимое между <TEXT> этикетки для каждого документа между <DOC> и </DOC>, а у меня есть пустые документы :( Пожалуйста, есть кто-то может мне помочь? Спасибо большое.

ответ

0

Нет text node в //ROOT/DOC/TEXTElement, поэтому doc.find('TEXT').text возвращает пустую строку.

Вместо этого есть Element узлы (aka <P>), через которые вы можете пройти.

Наконец, к 'stringify' Element, вы можете использовать ET.tostring()

TLDR

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

Спасибо за ответ, я буду стараться, как это. –

Смежные вопросы