中文NLP工具
1 HanLP
HanLP(漢語言處理包)是一款開源的使用Java進行開發的中文自然語言處理工具,提供的功能包括中文分詞、詞性标注、命名實體識别、依存句法分析等。
該工具包目前仍處在更新維護中(2017.9最新版本是1.3.4)
github倉庫:https://github.com/hankcs/HanLP
開發語言:Java
支援語言:Java,如果使用Python,可以借助JPype
配置和使用:可以參加github位址
關鍵點:修改配置檔案hanlp.properties中root=,可以使用相對或絕對位址,并且該檔案需放置在bin目錄中。
2 複旦 FundanNLP
FudanNLP (FNLP)是複旦大學開發的中文自然語言處理工具包,目前暫時停止了更新(目前最新是2016年的微調整,主體版本2.00(2014.3.25)),另:FNLP官方部落格:[http://fnlp.org]已失蹤;支援中文分詞、詞性标注、命名實體識别。
github倉庫:https://github.com/FudanNLP/fnlp
開發語言:Java
支援語言:Java
安裝配置:github wiki;需要先配置maven,手動進行編譯得到jar包。
3 哈工大 HIT LTP
LPT(Language Technology Platform)是哈爾濱工業大學開發的中文自然語言處理工具。目前最新版本是3.3.2(2016年,目前基本暫時停止更新,模型最新是3.3.1)。代碼開源,商業使用付費。支援中文分詞、詞性标注、命名實體識别、依存句法分析、語言角色标注(中文)
github位址:https://github.com/HIT-SCIR/ltp
開發語言:C++
支援語言:Python(pyltp), Java(ltp4j)
Java開發中配置:
首先使用CMake+VS編譯C++源代碼得到庫檔案,然後使用ant建構,生成ltp4j.jar包。注意要保證C++編譯的庫檔案和ltp4j.jar架構版本都是64位或32位。
補充:
4 清華 THU LAC
THULAC (THU Lexical Analyzer for Chinese) 是由清華大學自然語言處理與社會人文計算實驗室研制推出的一套中文詞法分析工具包,具有中文分詞和詞性标注功能。
github位址:
Java版本(thulac4j):
https://github.com/yizhiru/thulac4j
thulac4j是THULAC的高效Java 8實作,具有分詞速度快、準、強的特點;
如果使用Java開發,推薦直接使用thulac4j,語言模型可以直接下載下傳thulac4j處理後的資料,或使用ThuLac的模型進行生産:
ThulacModel thulac = new ThulacModel("cws_model.bin", "cws_dat.bin", "cws_label.txt");
thulac.serialize("seg_only.bin");
ThulacModel thulac = new ThulacModel("model_c_model.bin", "model_c_dat.bin", "model_c_label.txt");
thulac.serialize("seg_pos.bin");
thulac4j 打包得到jar包,同時還需要相關的包(maven dependencies中可以檢視):
kryo-4.0.0.jar, reflectasm-1.11.3.jar, asm-5.0.4.jar, minlog-1.3.0.jar, objenesis-2.2.jar
另:
Simplifier和StopFilter,如需要正常執行,需要在打包成jar時,将models中檔案一同打包。
程式實力可是參照test中的程式。
5 (中科院)NLPIR (原ICTCLAS)
6 斯坦福 Stanford CoreNLP(多語言)
中文的示例:
Properties props = new Properties();
props.load(IOUtils.readerFromString(file)); // file是配置檔案,從中的jar中提出處理
props.setProperty("annotators", "tokenize, ssplit, pos, lemma"); // 修改預設設定,這裡去除了parser等部分
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation document = new Annotation(text);
pipeline.annotate(document);
List sentences = document.get(SentencesAnnotation.class);
for (CoreMap sentence : sentences) {
for (CoreLabel token : sentence.get(TokensAnnotation.class)) {
String word = token.get(TextAnnotation.class); # 分詞後的詞
String pos = token.get(PartOfSpeechAnnotation.class); # 詞性标記
String ne = token.get(NamedEntityTagAnnotation.class); # NER類别
System.out.println(word + "\t| " + pos + "\t| " + ne);
}
Tree tree = sentence.get(TreeAnnotation.class);
System.out.println("\n文法樹:\n" + tree.toString());
}