2015-04-04 50 views
0

我已標記的20句,這是我的代碼:XML格式

public class myTag { 

public static void main(String[] args) { 

    Properties props = new Properties(); 

    try { 
     props.load(new FileReader("D:/tagger/english-bidirectional-distsim.tagger.props")); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    MaxentTagger tagger = new MaxentTagger("D:/tagger/english-bidirectional-distsim.tagger",props); 

    //================================================================================================== 
    try (BufferedReader br = new BufferedReader(new FileReader("C:/Users/chelsea/Desktop/EN/EN.txt"))) 
    { 

     String sCurrentLine; 

     while ((sCurrentLine = br.readLine()) != null) { 

      String tagged = tagger.tagString(sCurrentLine); 
      System.out.println(tagged); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

} 

這是輸出:

img http://i59.tinypic.com/2w5pp4o.png

,你可以在句子節點看到它有一個Id屬性,這裏它不斷= 0它不應該be.i期望值= 0,1,2,3,4,... 我不明白我的代碼有什麼問題。

回答

1

Stanford POS tagger(嚴格地說,在POS註釋器之前應用的句子分隔符)會爲每個輸入文本的句子生成ID。 所以,你問tagger標記sCurrentLine組成的一個句子,這個文本被拆分成句子 - 實際上,只有一個,ID = 0;那麼你要求在下一次迭代時標記另一個文本 - sCurrentLine - 它又是唯一的句子,因此它是id = 0的第一句;等等。

因此,如果您想要正確的ID,首先創建整個文本,然後將其傳遞到tagger。然而,如果你的輸入文本已經被句子分割了,最好留下原樣(如果你需要的話,可以自己在循環中生成id)。