2015-04-22 92 views
4

我在我的應用程序中使用斯坦福的CoreNLP命名實體識別器(NER)和詞性(POS)標記器。問題是我的代碼預先標記了文本,然後我需要NER和POS標記每個標記。但是,我只能找到如何使用命令行選項來做到這一點,但不是以編程方式。如何讓NER和POS使用斯坦福CoreNLP標記預標記文本?

有人能告訴我如何使用斯坦福大學的CoreNLP程序化地使用NER和POS標籤預清除文本?

編輯:我實際使用個人NER和POS指令

。所以我的代碼是按照斯坦福大學NER和POS軟件包中的教程編寫的。但是我的類路徑中有CoreNLP。所以我在我的類路徑中使用了CoreNLP,但是使用了NER和POS包中的教程。

編輯:

我剛剛發現,居然有一個如何設置CoreNLP這裏http://nlp.stanford.edu/software/corenlp.shtml屬性的說明,但我想,如果有一個快速的方法做我想做與斯坦福NER什麼,POS標註器,所以我不必重新編碼一切!

回答

4

如果設置屬性:

tokenize.whitespace = true 

那麼CoreNLP管道將令牌化的空白,而不是默認PTB標記化。您可能還想設置:

ssplit.eolonly = true 

因此,您只能對換行符分割句子。

+0

問題是怎麼做到的?如何設置屬性? –

+0

您可以將這些行放入屬性文件中,然後使用-props 運行程序。或者,大多數單個註釋器都有一個構造函數,它接受一個Properties對象,並且可以通過那裏傳遞屬性。 –

+0

我剛剛重寫了我的代碼。 –

0

以編程方式運行在你已經通過其他手段得到令牌的列表分類,而不喜歡用空格一起粘貼,然後重新標記化一個雜牌組裝電腦,你可以使用Sentence.toCoreLabelList method

String[] token_strs = {"John", "met", "Amy", "in", "Los", "Angeles"}; 
List<CoreLabel> tokens = edu.stanford.nlp.ling.Sentence.toCoreLabelList(token_strs); 
for (CoreLabel cl : classifier.classifySentence(tokens)) { 
    System.out.println(cl.toShorterString()); 
} 

輸出:

[Value=John Text=John Position=0 Answer=PERSON Shape=Xxxx DistSim=463] 
[Value=met Text=met Position=1 Answer=O Shape=xxxk DistSim=476] 
[Value=Amy Text=Amy Position=2 Answer=PERSON Shape=Xxx DistSim=396] 
[Value=in Text=in Position=3 Answer=O Shape=xxk DistSim=510] 
[Value=Los Text=Los Position=4 Answer=LOCATION Shape=Xxx DistSim=449] 
[Value=Angeles Text=Angeles Position=5 Answer=LOCATION Shape=Xxxxx DistSim=199] 
+1

在3.8中它現在是CoreUtilities :: toCoreLabelList – reindeer