2016-12-27 98 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

非常感謝!它的工作非常好!現在我可以將它與我的所有藏品一起使用!祝你今天愉快 ;) –