2016-12-27 68 views
1

我一直在尝试使用上面的代码将TREC文档提取到单独的文本文件中,但我遇到了一些错误。这里是我的TREC文件中包含的标签<DOC></DOC> 2个之间文档的内容的一个例子:如何获取TREC文档?

<DOC> 
    <DOCNO> 
     WSJ910102-0145 
    </DOCNO> 
    <DOCID> 
     910102-0145. 
    </DOCID> 
    <HL> 
     xxxx 
    </HL> 
    <DATE> 
     01/02/91 
    </DATE> 
    <LP> 
     text LP1 
    </LP> 
    <TEXT> 
     text1 
    </TEXT> 
</DOC> 
<DOC> 
    <DOCNO> 
     WSJ910102-0144 
    </DOCNO> 
    <DOCID> 
     910102-0144. 
    </DOCID> 
    <HL> 
     .... 
    </HL> 
    <DATE> 
     01/02/91 
    </DATE> 
    <LP> 
     text LP2 
    </LP> 
    <TEXT> 
     text2 
    </TEXT> 
</DOC> 

我想在一个分离的文本文件,提取每个文档。我必须获得文档编号为“DOCNO”的标签“LP”和“TEXT”的内容。这里是我的代码:

text=text.replace('\n',' ').replace('\t', ' ') 
i=0 
txtDoc='' 
regexTxt='(<LP>(.*?)</LP>)? <TEXT>(.*?)</TEXT>' 
regexDoc='<DOC>(.*?)</DOC>' 
regexDocNo='<DOCNO>(.*?)</DOCNO>' 
pattern = compile(r'<DOC>(.*?)</DOC>') 
iterator = finditer(pattern, text) 
count = 0 
for match in iterator: 
    count +=1 
res=re.search(regexDoc,text) 
while (i<count): 
    txtDoc=res.group(i) 
    resNo=re.search(regexDocNo,txtDoc) 
    docNo=resNo.group() 
    docNo=docNo.replace('<DOCNO>', ' ').replace('</DOCNO>', ' ') 
    res2=re.search(regexTxt,txtDoc) 
    txt=res2.group() 
    txt=txt.replace('<TEXT>', ' ').replace('</TEXT>', ' ').replace('<LP>',' ').replace('</LP>',' ') 
    print("Document : %s \n %s" %(docNo,txt)) 
    i+=1 

print ("Fin") 

这里是打印结果:

Document :  WSJ910102-0145 
      text1 
Document :  WSJ910102-0145 
      text1 
Fin 

而且我想这一个:

Document :  WSJ910102-0145 
      text LP1 
      text1 
Document :  WSJ910102-0144 
      text LP2 
      text2 
Fin 

回答

2

我会尝试使用XML解析器。下面是一个示例代码如何分析这样的结构:

import xml.etree.ElementTree as ElementTree 

with open('test.trec', 'r') as f: # Reading file 
    xml = f.read() 

xml = '<ROOT>' + xml + '</ROOT>' # Let's add a root tag 

root = ElementTree.fromstring(xml) 

# Simple loop through each document 
for doc in root: 
    print(
     'DOC NO: {}, DOC ID: {}, HL: {}, LP: {}, DATE: {}, TEXT: {}'.format(# Nice formatting py 3 \o/ 
      doc.find('DOCID').text.strip(), 
      doc.find('HL').text.strip(), 
      doc.find('DOCNO').text.strip(), 
      doc.find('LP').text.strip(), 
      doc.find('DATE').text.strip(), 
      doc.find('TEXT').text.strip(), 
     ) 
    ) 

添加根标签的解决方法是有点需要使XML解析的。

输出示例:

DOC NO: 910102-0145., DOC ID: xxxx, HL: WSJ910102-0145, LP: text LP1, DATE: 01/02/91, TEXT: text1 
DOC NO: 910102-0144., DOC ID: blabla, HL: WSJ910102-0144, LP: text LP2, DATE: 01/02/91, TEXT: text2 
+1

非常感谢!它的工作非常好!现在我可以将它与我的所有藏品一起使用!祝你今天愉快 ;) –