標籤:chinese 文本 sig etl 檢查 post 文法分析 char utf8
自然語言處理1. Java自然語言處理 LingPipe
LingPipe是一個自然語言處理的Java開源工具包。LingPipe目前已有很豐富的功能,包括主題分類(Top Classification)、具名實體識別(Named Entity Recognition)、詞性標註(Part-of Speech Tagging)、句題檢測(Sentence Detection)、查詢拼字檢查(Query Spell Checking)、興趣短語檢測(Interseting Phrase Detection)、聚類(Clustering)、字元語言建模(Character Language Modeling)、醫學文獻下載/解析/索引(MEDLINE Download, Parsing and Indexing)、資料庫文本挖掘(Database Text Mining)、中文分詞(Chinese Word Segmentation)、情感分析(Sentiment Analysis)、語言辨別(Language Identification)等API。
下載連結:http://alias-i.com/lingpipe/web/download.html
2.中文自然語言處理工具包 FudanNLP
FudanNLP主要是為中文自然語言處理而開發的工具包,也包含為實現這些任務的機器學習演算法和資料集。
示範地址: http://jkx.fudan.edu.cn/nlp/query
FudanNLP目前實現的內容如下:
- 中文處理工具
- 中文分詞
- 詞性標註
- 實體名識別
- 句法分析
- 時間運算式識別
- 資訊檢索
- 文 本分類
- 新聞聚類
- Lucene中文分詞
- 機 器學習
- Average Perceptron
- Passive-aggressive Algorithm
- K-means
- Exact Inference
下載連結:http://code.google.com/p/fudannlp/downloads/list
3.自然語言處理工具Apache OpenNLP
OpenNLP 是一個機器學習工具包,用於處理自然語言文本。支援大多數常用的 NLP 任務,例如:標識化、句子切分、部分詞性標註、名稱抽取、組塊、解析等。
下載連結:http://opennlp.apache.org/
4.自然語言處理工具 CRF++
CRF++是著名的條件隨機場開源工具,也是目前綜合效能最佳的CRF工具。CRF++本身已經是個比較老的工具了,但鑒於其效能較好,仍然是自然語言處理很重要的一個工具。
NlpBamboo 中文分詞庫在使用該工具。
下載連結:http://sourceforge.net/projects/crfpp/files/
5、Stanford CoreNLP 斯坦福大學NLP
很牛叉的一個庫
http://search.maven.org/#browse%7C11864822
學習自然語言這一段時間以來接觸和聽說了好多開源的自然語言處理工具,在這裡做一下匯總方便自己以後學習,其中有自己使用過的也有瞭解不是很多的,對於不甚瞭解的工具以後學習熟悉了會做更新的。
分片語件1.IKAnalyzer
IK Analyzer是一個開源的,基於Java語言開發的輕量級的中文分詞工具包。從2006.12推出1.0版本開始,IK Analyzer已經推出了多個版本,當前最新版本為2012 u6,最初基於Luence,從3.0開始成為面向Java的公用分片語件,獨立於Luence,為:http://git.oschina.net/wltea/IK-Analyzer-2012FF。IK支援細粒度和智能分詞兩種切分模式,支援英文字母、數字、中文詞彙等分詞處理,相容韓文、日文字元。可以支援使用者自訂的詞典,IKAnalyzer.cfg.xml檔案來實現,可以配置自訂的擴充詞典和停用詞典。詞典需要採用UTF-8無BOM格式編碼,並且每個詞語佔一行。設定檔如下所示:
- <properties>
- <comment>IK Analyzer 擴充配置</comment>
- <!--使用者可以在這裡配置自己的擴充字典-->
- <entry key="ext_dict">ext.dic;</entry>
-
- <!--使用者可以在這裡配置自己的擴充停止詞字典-->
- <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry>
-
- </properties>
IK部署很簡單,只需要把IKAnalyzer2012_u6.jar部署於項目的lib中,同時將IKAnalyzer.cfg.xml檔案以及詞典檔案置於src中,即可通過API的方式開發調用。
範例程式碼:
- /**
- * IK分詞功能實現
- * @return
- */
- public String spiltWords(String srcString){
- StringBuffer wordsBuffer = new StringBuffer("");
- try{
- IKSegmenter ik=new IKSegmenter(new StringReader(srcString), true);
- Lexeme lex=null;
- while((lex=ik.next())!=null){
- // System.out.print(lex.getLexemeText()+" ");
- wordsBuffer.append(lex.getLexemeText()).append(" ");
- }
- }catch(Exception e){
- logger.error(e.getMessage());
- }
- return wordsBuffer.toString();
- }
IK簡單、易於擴充,分詞結果較好並且採用Java編寫,因為我平時的項目以Java居多,所以是我平時處理分詞的首選工具。
2.中科院ICTCLAS
ICTCLAS是由中科院計算所曆經數年開發的分詞工具,採用C++編寫。最新版本命名為ICTCLAS2013,又名為NLPIR漢語分詞系統,官網為:http://ictclas.nlpir.org/。主要功能包括中文分詞、詞性標註、具名實體識別、使用者字典功能,同時支援GBK編碼、UTF8編碼、BIG5編碼,新增微博分詞、新詞發現與關鍵詞提取。可以可視化介面操作和API方式調用。
3.FudanNLP
FudanNLP主要是為中文自然語言處理而開發的工具包,也包含為實現這些任務的機器學習演算法和資料集。FudanNLP及其包含資料集使用LGPL3.0許可證。
主要功能包括:
資訊檢索:文本分類,新聞聚類。
中文處理:中文分詞,詞性標註,實體名識別,關鍵詞抽取,依存句法分析,時間短語識別。
結構化學習:線上學習,層次分類,聚類,精確推理。
工具採用Java編寫,提供了API的訪問調用方式。最新版本為FudanNLP-1.6.1,為:http://code.google.com/p/fudannlp/。
在使用時將fudannlp.jar以及lib中的jar部署於項目中的lib裡面。models檔案夾中存放的模型檔案,主要用於分詞、詞性標註和具名實體識別以及分詞所需的詞典;檔案夾example中主要是使用的範例程式碼,可以協助快速入門和使用;java-docs是API協助文檔;src中存放著源碼;PDF文檔中有著比較詳細的介紹和自然語言處理基礎知識的講解。
初始運行程式時初始化時間有點長,並且載入模型時佔用記憶體較大。在進行文法分析時感覺分析的結果不是很準確。
4.The Stanford Natural LanguageProcessing Group
Stanford NLP Group是斯坦福大學自然語言處理的團隊,開發了多個NLP工具,官網網址為:http://nlp.stanford.edu/software/index.shtml。其開發的工具包括以下內容:
4.1 Stanford CoreNLP
採用Java編寫的面向英文的處理工具,下載網址為:http://nlp.stanford.edu/software/corenlp.shtml。主要功能包括分詞、詞性標註、具名實體識別、文法分析等。
我曾經採用它進行英語單詞的詞性還原,具體應用詳見文章《採用Stanford CoreNLP實現英文單詞詞形還原》。
4.2 Stanford Word Segmenter
採用CRF(條件隨機場)演算法進行分詞,也是基於Java開發的,同時可以支援中文和Arabic,官方要求Java版本1.6以上,推薦記憶體至少1G。為http://nlp.stanford.edu/software/segmenter.shtml。
簡單的樣本程式:
- //設定分詞器屬性。
- Properties props = new Properties();
- //字典檔案地址,可以用絕對路徑,如d:/data
- props.setProperty("sighanCorporaDict", "data");
- //字典壓縮包地址,可以用絕對路徑
- props.setProperty("serDictionary","data/dict-chris6.ser.gz");
- //輸入文字的編碼;
- props.setProperty("inputEncoding", "UTF-8");
- props.setProperty("sighanPostProcessing", "true");
- //初始化分詞器,
- CRFClassifier classifier = new CRFClassifier(props);
- //從持久化檔案中載入分詞器設定;
- classifier.loadClassifierNoExceptions("data/ctb.gz", props);
- // flags must be re-set after data is loaded
- classifier.flags.setProperties(props);
- //分詞
- List words = classifier.segmentString("語句內容");
4.3 Stanford POS Tagger
採用Java編寫的面向英文、中文、法語、阿拉伯語、德語的具名實體識別工具,為:http://nlp.stanford.edu/software/tagger.shtml。還沒有接觸過,需要以後學習研究。
4.4 Stanford Named Entity Recognizer
採用條件隨機場模型的具名實體工具,為:http://nlp.stanford.edu/software/CRF-NER.shtml。還沒有接觸過,需要以後學習研究。
4.5 Stanford Parser
進行文法分析的工具,支援英文、中文、阿拉伯文和法語。為:http://nlp.stanford.edu/software/lex-parser.shtml。具體的使用介紹見《採用Stanford Parser進行中文文法解析》。
4.6 Stanford Classifier
採用Java編寫的分類器,為:http://nlp.stanford.edu/software/classifier.shtml。還沒有接觸過,需要以後學習研究。
5.jcseg
Jcseg是基於mmseg演算法的一個輕量級中文分詞器,同時整合了關鍵字提取,關鍵片語擷取,關鍵句子提取和文章自動摘要等功能,並且提供了一個基於Jetty的web伺服器,方便各大語言直接http調用,同時提供了最新版本的lucene, solr, elasticsearch的分詞介面!Jcseg內建了一個 jcseg.properties檔案用於快速配置而得到適合不同場合的分詞應用,例如:最大匹配詞長,是否開啟中文人名識別,是否追加拼音,是否追加同義字等!
項目地址:https://github.com/lionsoul2014/jcseg
Java自然語言處理NLP工具包