1. 程式人生 > >Java自然語言處理NLP工具包

Java自然語言處理NLP工具包

自然語言處理

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。

2.中文自然語言處理工具包 FudanNLP

FudanNLP主要是為中文自然語言處理而開發的工具包,也包含為實現這些任務的機器學習演算法和資料集。

FudanNLP目前實現的內容如下:

  1. 中文處理工具
    1. 中文分詞
    2. 詞性標註
    3. 實體名識別
    4. 句法分析
    5. 時間表達式識別
  2. 機 器學習
    1. Average Perceptron
    2. Passive-aggressive Algorithm
    3. K-means
    4. Exact Inference

 3.自然語言處理工具Apache OpenNLP

OpenNLP 是一個機器學習工具包,用於處理自然語言文字。支援大多數常用的 NLP 任務,例如:標識化、句子切分、部分詞性標註、名稱抽取、組塊、解析等。

下載連結:http://opennlp.apache.org/

 4.自然語言處理工具 CRF++

 CRF++是著名的條件隨機場開源工具,也是目前綜合性能最佳的CRF工具。CRF++本身已經是個比較老的工具了,但鑑於其效能較好,仍然是自然語言處理很重要的一個工具。

很牛叉的一個庫

下載地址 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格式編碼,並且每個詞語佔一行。配置檔案如下所示:

  1. <properties>    
  2.     <comment>IK Analyzer 擴充套件配置</comment>  
  3.     <!--使用者可以在這裡配置自己的擴充套件字典-->   
  4.     <entry key="ext_dict">ext.dic;</entry>   
  5.     <!--使用者可以在這裡配置自己的擴充套件停止詞字典-->  
  6.     <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry>   
  7. </properties>  

IK部署很簡單,只需要把IKAnalyzer2012_u6.jar部署於專案的lib中,同時將IKAnalyzer.cfg.xml檔案以及詞典檔案置於src中,即可通過API的方式開發呼叫。

示例程式碼:

  1. /** 
  2.      * IK分詞功能實現 
  3.      * @return 
  4.      */  
  5.     public String spiltWords(String srcString){  
  6.         StringBuffer wordsBuffer = new StringBuffer("");  
  7.         try{  
  8.             IKSegmenter ik=new IKSegmenter(new StringReader(srcString), true);    
  9.             Lexeme lex=null;    
  10.             while((lex=ik.next())!=null){    
  11. //              System.out.print(lex.getLexemeText()+" ");  
  12.                 wordsBuffer.append(lex.getLexemeText()).append(" ");  
  13.             }  
  14.         }catch(Exception e){  
  15.             logger.error(e.getMessage());  
  16.         }  
  17.         return wordsBuffer.toString();  
  18.     }  

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

4.1 Stanford CoreNLP

4.2 Stanford Word Segmenter

採用CRF(條件隨機場)演算法進行分詞,也是基於Java開發的,同時可以支援中文和Arabic,官方要求Java版本1.6以上,推薦記憶體至少1G。下載地址為http://nlp.stanford.edu/software/segmenter.shtml

簡單的示例程式:

  1. //設定分詞器屬性。  
  2.    Properties props = new Properties();  
  3. //字典檔案地址,可以用絕對路徑,如d:/data  
  4.    props.setProperty("sighanCorporaDict", "data");  
  5. //字典壓縮包地址,可以用絕對路徑  
  6.    props.setProperty("serDictionary","data/dict-chris6.ser.gz");  
  7. //輸入文字的編碼;  
  8.    props.setProperty("inputEncoding", "UTF-8");  
  9.    props.setProperty("sighanPostProcessing", "true");  
  10. //初始化分詞器,  
  11.    CRFClassifier classifier = new CRFClassifier(props);  
  12. //從持久化檔案中載入分詞器設定;  
  13.    classifier.loadClassifierNoExceptions("data/ctb.gz", props);  
  14.    // flags must be re-set after data is loaded  
  15.    classifier.flags.setProperties(props);  
  16. //分詞  
  17.    List words = classifier.segmentString("語句內容");  

4.3 Stanford POS Tagger

4.4 Stanford Named Entity Recognizer

4.5 Stanford Parser

4.6 Stanford Classifier

5.jcseg

Jcseg是基於mmseg演算法的一個輕量級中文分詞器,同時集成了關鍵字提取,關鍵短語提取,關鍵句子提取和文章自動摘要等功能,並且提供了一個基於Jetty的web伺服器,方便各大語言直接http呼叫,同時提供了最新版本的lucene, solr, elasticsearch的分詞介面!Jcseg自帶了一個 jcseg.properties檔案用於快速配置而得到適合不同場合的分詞應用,例如:最大匹配詞長,是否開啟中文人名識別,是否追加拼音,是否追加同義詞等!

相關推薦

Java自然語言處理NLP工具

自然語言處理 1. Java自然語言處理 LingPipe LingPipe是一個自然語言處理的Java開源工具包。LingPipe目前已有很豐富的功能,包括主題分類(Top Classification)、命名實體識別(Named Entity Recognition)、詞性標註(Part-of Speec

自然語言處理NLP(一)

rac 控制臺 分析 arm ont 正則表達 stop python none NLP 自然語言:指一種隨著社會發展而自然演化的語言,即人們日常交流所使用的語言; 自然語言處理:通過技術手段,使用計算機對自然語言進行各種操作的一個學科; NLP研究的內容

自然語言處理NLP(二)

哪些 一個 圖片 ali cor res https 的區別 進行 詞性標註 標註語料庫; 各詞性標註及其含義 自動標註器; 默認標註器; 正則表達式標註器; 查詢標註器; N-gram標註器; 一元標註器; 分離訓練和測試數據; 一般的N-gram的標註

自然語言處理NLP快速入門

真的 mat unit rod visit ctrl may let 深入 自然語言處理NLP快速入門 https://mp.weixin.qq.com/s/J-vndnycZgwVrSlDCefHZA 【導讀】自然語言處理已經成為人工智能領域一個重要的分支,它

自然語言處理(nlp)比計算機視覺(cv)發展緩慢,而且更難!

https://mp.weixin.qq.com/s/kWw0xce4kdCx62AflY6AzQ   1.  搶跑的nlp   nlp發展的歷史非常早,因為人從計算機發明開始,就有對語言處理的需求。各種字串演算法都貫穿於計算機的發展歷史中。偉大的喬姆斯基提出了

自然語言處理NLP技術里程碑、知識結構、研究方向和機構導師(公號回覆“NLP總結”下載彩標PDF典藏版資料)

自然語言處理NLP技術里程碑、知識結構、研究方向和機構導師(公號回覆“NLP總結”下載彩標PDF典藏版資料) 原創: 秦隴紀 資料簡化DataSimp 今天 資料簡化DataSimp導讀:自然語言處理髮展史上的十大里程碑、NLP知識結構,以及NLP國內研究方向、機構、導師。祝大家學習

斯坦福CS224N_自然語言處理NLP深度學習DL課程筆記(一)

Lecture 1: Introduction pdf 本節課是對自然語言處理的定義介紹和應用介紹,還順帶說了NLP的難點; 本節課使用深度學習作為NLP的主要處理工具。 傳統的機器學習技術,需要人為地去做特徵工程,將這些的特徵餵給機器學期演算法;然後機器學習演

自然語言處理NLP(三)

樣本點中的關鍵度量指標:距離 定義: 常用距離: 歐氏距離,euclidean–通常意義下的距離; 馬氏距離,manhattan–考慮到變數間的相關性,且與變數單位無關; 餘弦距離,cosi

自然語言處理NLP(四)

實體識別 實體識別–分塊型別: 名詞短語分塊; 標記模式分塊; 正則表示式分塊; 分塊的表示方法:標記和樹狀圖; 分塊器評估; 命名實體識別; 命名實體定義:指特定型別的個體,是一些確切的名詞短語

最新自然語言處理(NLP)四步流程:Embed->Encode->Attend->Predict

過去半年以來,自然語言處理領域進化出了一件神器。此神器乃是深度神經網路的一種新模式,該模式分為:embed、encode、attend、predict四部分。本文將對這四個部分娓娓道來,並且剖析它在兩個例項中的用法。 人們在談論機器學習帶來的提升時,往往只想到了機器在效率和

自然語言處理(NLP) 一: 分詞、分句、詞幹提取

需要安裝nltk自然語言處理包,anaconda預設已經安裝了 還需要安裝nltk語料庫:http://www.nltk.org/data.html 自然語言基礎知識: 1、分詞 魚香肉絲裡面多放點辣椒 對稱加密需要DES處理引擎 天兒冷了多穿點

ML:自然語言處理NLP面試題

自然語言處理的三個里程碑: 兩個事實分別為: 一、短語結構語法不能有效地描寫自然語言。 二、短語結構規則的覆蓋有限。Chomsky 曾提出過這樣的假設,認為對一種自然語言來說,其語法規則的數目是有限的,而據此生成的句子數目是無限的。 文中提到的三個里程碑式的進展為:

自然語言處理nlp的一點感想

自然語言處理(nlp)作為計算機的一個研究方向存在已久,但是最近人工智慧這一波熱潮又讓nlp重新得到巨大關注。由於處理物件是語言這一種人類特有的溝通工具以及其豐富巨大的資訊量,給人一種錯覺--似乎這是人工智慧領域真正的皇冠,達到最終真正人工智慧(強人工智慧)的最近之路。但是事

自然語言處理(NLP) 三:詞袋模型 + 文字分類

1.詞袋模型 (BOW,bag of words) 用詞頻矩陣作為每個樣本的特徵 Are you curious about tokenization ? Let’s see how it works! we need to analyze a coupl

自然語言處理(nlp)的流程圖

1. 讀取原始資料 html = urlopen(url).read() 2. 資料清洗 raw = nltk.clean_html(html) 3. 資料切片 raw = raw[111:2222222] 4. 資料分詞 tokens = nltk.wordpunc

一文讀懂自然語言處理NLP

前言 自然語言處理是文字挖掘的研究領域之一,是人工智慧和語言學領域的分支學科。在此領域中探討如何處理及運用自然語言。 對於自然語言處理的發展歷程,可以從哲學中的經驗主義和理性主義說起。基於統計的自然語言處理是哲學中的經驗主義,基於規

自然語言處理(NLP) 四:性別識別

import random import numpy as np import nltk.corpus as nc import nltk.classify as cf male_names = nc.names.words('male.txt') fe

自然語言處理(NLP)四步流程:Embed->Encode->Attend->Predict

過去半年以來,自然語言處理領域進化出了一件神器。此神器乃是深度神經網路的一種新模式,該模式分為:embed、encode、attend、predict四部分。本文將對這四個部分娓娓道來,並且剖析它在兩個例項中的用法。 人們在談論機器學習帶來的提升時,往往只想到了機器在效

word2vec 在 非 自然語言處理 (NLP) 領域的應用

word2vec 本來就是用來解決自然語言處理問題的,它在 NLP 中的應用是顯然的。 比如,你可以直接用它來尋找相關詞、發現新詞、命名實體識別、資訊索引、情感分析等;你也可以將詞向量作為其他模型的輸入,用於諸如文字分類、聚類等各種自然語言處理問題。 事實上,word2ve

自然語言處理NLP基本知識小結

1.什麼是NLP?  人與人、人與計算機互動中的語言問題。 能力模型,通常是基於語言學規則的模型,建立在人腦中先天存在語法通則這一假設的基礎上,認為語言是人腦的語言能力推匯出來的,建立語言模型就是通過建立人工編輯的語言規則集來模擬這種先天的語言能力。又稱“理性主義的”語言