上週就關於《結構化感知機標註框架的內容》已經分享了一篇《分詞工具Hanlp基於感知機的中文分詞框架》,本篇接上一篇內容,繼續分享詞性標註與命名實體識別框架的內容。java
詞性標註數組
訓練框架
詞性標註是分詞後緊接着的一個任務,訓練語料同上,接口以下:ide
命令行工具
java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main -task POS -train -reference data/test/pku98/199801.txt -model data/test/perceptron/pos.bin測試
APIspa
public void testTrain() throws Exception.net
{命令行
PerceptronTrainer trainer = new POSTrainer();blog
trainer.train("data/test/pku98/199801.txt", Config.POS_MODEL_FILE);
}
測試
詞性標註器接受的輸入再也不是純文本,而是分詞後的單詞數組或列表:
public void testLoad() throws Exception
{
PerceptronPOSTagger tagger = new PerceptronPOSTagger(Config.POS_MODEL_FILE);
System.out.println(Arrays.toString(tagger.tag("中國 交響樂團 譚利華 在 布達拉宮 廣場 演出".split(" "))));
}
正常狀況下輸出每一個單詞的詞性:
[ns, n, nr, p, ns, n, v]
關於如何組合分詞器和詞性標註器,使其同時進行分詞與詞性標註,請參考接下來的章節。
命名實體識別
目前本系統默認支持人名(nr),地名(ns),機構名(nt)三種命名實體的識別,用戶能夠重載NERTrainer的createTagSet來支持任意NER類型。
訓練
命名實體識別是詞性標註的後續任務,訓練語料依然同上,接口以下:
命令行
java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main -task NER -train -reference data/test/pku98/199801.txt -model data/test/perceptron/ner.bin
API
public void testTrain() throws Exception
{
PerceptronTrainer trainer = new NERTrainer();
trainer.train("data/test/pku98/199801.txt", Config.NER_MODEL_FILE);
}
自定義NER類型
重載NERTrainer的createTagSet來支持本身的NER類型。固然,用戶提供的語料必須知足2014人民日報格式。
PerceptronTrainer trainer = new NERTrainer()
{
protected TagSet createTagSet()
{
NERTagSet tagSet = new NERTagSet();
tagSet.nerLabels.add("YourNER1");
tagSet.nerLabels.add("YourNER2");
tagSet.nerLabels.add("YourNER3");
return tagSet;
}
};
測試
命名實體識別器的輸入再也不是純文本,而是分詞結果與詞性標註結果:
public void testTag() throws Exception
{
PerceptionNERecognizer recognizer = new PerceptionNERecognizer(Config.NER_MODEL_FILE);
System.out.println(Arrays.toString(recognizer.recognize("吳忠市 乳製品 公司 譚利華 來到 布達拉宮 廣場".split(" "), "ns n n nr p ns n".split(" "))));
}
正常狀況下輸出:
[B-nt, M-nt, E-nt, S, O, S, O]
7個標籤表明上述7個詞語所屬的命名實體成分。