2014-10-20 2 views
0

저는 스탠포드 NLP와 파이썬을 사용하고 있습니다. 그래서, 몇 가지 텍스트 파일을 입력하고 XML 파일 (Stanford CoreNLP에 의해 생성)로 변환하는 기능이 있습니다. 이제이 XML 파일을 입력하고 동일한 텍스트를 포함하지만 해당 태그로 대체 된 명명 된 엔티티를 포함하는 해당 파일을 출력하고 문장의 끝을 "STOP"이라는 단어로 표시하여 구두점을 제거하는 또 다른 함수를 작성하려고합니다. 파일의 시작 부분에는 "STOP"이라는 단어가 있습니다. XML 파일을 제공하는 기능은 다음과 같습니다 이 이 파이썬에서 Stanford CoreNLP를 사용하여 명명 된 엔티티가 태그로 대체되는 파일을 출력하는 방법은 무엇입니까?

def process_file(input_xml,output_file): 
이 이 이

이 사람이 어떻게 같은 출력 파일을 얻을하는 데 도움이 수

이름으로 :

import subprocess 
def generate_xml(input,output): 
    p = subprocess.Popen('java -cp stanford-corenlp-2012-07-09.jar:stanford-corenlp-2012-07-06-models.jar:xom.jar:joda-time.jar -Xmx3g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -filelist /Users/akritibahal/Downloads/stanford-corenlp-2012-07-09/myfile_list.txt -outputDirectory /Users/akritibahal/Downloads/stanford-corenlp-2012-07-09', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    for line in p.stdout.readlines(): 
     print line 

    retval = p.wait() 

기능은 그 개체 명 태그 출력 파일을 줄 것입니다 엔티티 태그?

답변

0

저는 minidom을 사용하여 CoreNLP의 출력을 구문 분석했습니다. 사용할 수있는 시작 코드는 다음과 같습니다. https://github.com/dasmith/stanford-corenlp-python

반환되는 데이터는 문장 및 토큰의 오프셋을 기반으로하기 때문에 Stanford CoreNLP에서 사용하는 토큰 화를 얻어야합니다.

from xml.dom import minidom  
xmldoc = minidom.parseString(raw_xml_data) 
for sentence_xml in xmldoc.getElementsByTagName('sentences')[0].getElementsByTagName('sentence'): 
    parse = parser.parse(sentence_xml.getElementsByTagName('parse')[0].firstChild.nodeValue) 
    tokens = [(i,j) for i,j in zip(sentence_xml.getElementsByTagName('tokens')[0].getElementsByTagName('token'),parse.get_leaves())] 
    # example for processing dependencies 
    elements = sentence_xml.getElementsByTagName('dependencies') 
    for element in elements: 
     if element.getAttribute('type')=="collapsed-ccprocessed-dependencies": 
      dependencies += [i for i in element.getElementsByTagName('dep')]