2017-03-07 63 views
0

使用Stanford CoreNLP時,我在xml輸出文件中得到結果。在它裏面,我找到了一個以揚聲器名稱爲例的列:如何從對話中提取揚聲器註釋?

 <word>Mike</word> 
     <lemma>Mike</lemma> 
     <CharacterOffsetBegin>0</CharacterOffsetBegin> 
     <CharacterOffsetEnd>4</CharacterOffsetEnd> 
     <POS>NNP</POS> 
     <NER>PERSON</NER> 

     *<Speaker>PER0</Speaker>* 

     <TrueCase>INIT_UPPER</TrueCase> 
     <TrueCaseText>Mike</TrueCaseText> 
     <sentiment>Neutral</sentiment> 

那麼,我該如何操作揚聲器結果在Java代碼?我怎樣才能改善它的結果?例如在一次對話中,我想讓邁克代替PER0

謝謝。

回答

0
+0

是的,但我也需要改善生成的結果。 我認爲有一個揚聲器註釋器,我應該能夠操縱。 –

+0

這個XML片段深入DOM樹中嗎?所以這對於多個揚聲器重複?您可以搜索包含Speaker的根元素作爲子元素,然後返回Mike元素。 –

0

首先,感謝你@Thomas更大的對你的答案
我會盡量更清晰,
在這段代碼,

PrintWriter xmlOut = new PrintWriter("xmlOutput.xml"); 
    Properties props = new Properties(); 
    props.setProperty("annotators","tokenize, ssplit, pos, lemma, truecase, ner, parse,quote, mention, dcoref, sentiment"); 
    props.put("truecase.overwriteText", "true"); 
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);  
    Annotation annotation = new Annotation("Mike said : \"I vote for Hillary.\"\n 
              peter said : \"I vote for Donald.\""); 
    pipeline.annotate(annotation); 
    pipeline.xmlPrint(annotation, xmlOut); 

xmlOut.xml提供了兩句話的分析:

First Sentence

<邁克說>,<:>,< 「>和<」>被視爲narator的講話(PER0)。
<我投票給希拉里>被認爲是人的演講1.

Second Sentence

<彼得說>,<:>,< 「>和<」>被視爲narator的演講(PER0)。
<我投給唐納德。 >被認爲是彼得的講話。 =>這裏唯一的區別是,我寫彼得小寫,當我用大寫字母寫揚聲器的結果成爲4

雖然在斯坦福CoreNLP搜索Javadoc中找到這樣的課程講的主講這樣:
- CoreAnnotations .SpeakerAnnotation
- CoreNLPProtos.SpeakerInfo
- CoreNLPProtos.SpeakerInfo.Builder
- CoreNLPProtos.SpeakerInfoOrBuilder
- SpeakerInfo
- SpeakerInfo
- SpeakerMatch

所以我首先要讓我的xmlOut有更高效的結果,其次要知道如何在不使用DOM XML的情況下使用這些類來提取揚聲器及其語音。