1. 程式人生 > >【原創】中文分詞系統 ICTCLAS2015 的JAVA封裝和多執行緒執行(附程式碼)

【原創】中文分詞系統 ICTCLAS2015 的JAVA封裝和多執行緒執行(附程式碼)

  本文針對的問題是 ICTCLAS2015 的多執行緒分詞,為了實現多執行緒做了簡單的JAVA封裝。如果有需要可以自行進一步封裝其它介面。

  首先ICTCLAS2015的傳送門(http://ictclas.nlpir.org/),其對中文分詞做的比較透徹,而且有一定的可調式性。但是應用到實際開發中的話,多執行緒操作是必須的,因此有了本文的初衷。

  可能有的小夥伴不太清楚ICTCLASS是幹嘛的,下面是一段介紹:NLPIR漢語分詞系統(又名ICTCLAS2015),主要功能包括中文分詞;詞性標註;命名實體識別;使用者詞典功能;支援GBK編碼、UTF8編碼、BIG5編碼。新增微博分詞、新詞發現與關鍵詞提取;張華平博士先後傾力打造十餘年,核心升級10次。全球使用者突破20萬,先後獲得了2010年錢偉長中文資訊處理科學技術獎一等獎,2003年國際SIGHAN分詞大賽綜合第一名,2002年國內973評測綜合第一名。

  雖然其開放文件裡有指出是支援多執行緒操作的,但是並沒給出具體的方法。所以本文主要針對ICTCLAS2015的分詞操作做了JAVA封裝,並實現了Windows和Linux下的多執行緒操作。

  本文並不太多的涉及如何使用ICTCLAS,如果有需要可以去上面的網址查詢開發文件。

似乎也沒太大需要介紹的了,下面是具體的程式碼:

1.NLPIR類,封裝了初始化,分詞和釋放資源操作。

 1 package test;
 2 import java.util.concurrent.ExecutorService;
 3 import java.util.concurrent.Executors;
4 import com.sun.jna.Native; 5 6 public class NLPIR { 7   //Windows下的載入方式。如果需要支援Linux,需要修改這一行為libNLPIR.so的路徑。 8 private CLibrary Instance = (CLibrary) Native.loadLibrary( 9 "D:\\test\\NLPIR", CLibrary.class); 10 private boolean initFlag = false; 11 12 public
boolean init(){ 13 String argu = null; 14 // String system_charset = "GBK";//GBK----0 15 int charset_type = 1; 16 17 int init_flag = Instance.NLPIR_Init(argu, charset_type, "0"); 18 String nativeBytes = null; 19 20 if (0 == init_flag) { 21 nativeBytes = Instance.NLPIR_GetLastErrorMsg(); 22 System.err.println("初始化失敗!fail reason is "+nativeBytes); 23 return false; 24 } 25 initFlag = true; 26 return true; 27 } 28 29 public boolean unInit(){ 30 try { 31 Instance.NLPIR_Exit(); 32 } catch (Exception e) { 33 System.out.println(e); 34 return false; 35 } 36 initFlag = false; 37 return true; 38 } 39 40 public String parseSen(String str){ 41 String nativeBytes = null; 42 try { 43 nativeBytes = Instance.NLPIR_ParagraphProcess(str, 0); 44 } catch (Exception ex) { 45 // TODO Auto-generated catch block 46 ex.printStackTrace(); 47 } 48 return nativeBytes; 49 } 50 51 public CLibrary getInstance() { 52 return Instance; 53 } 54 55 public boolean isInitFlag() { 56 return initFlag; 57 } 58 59 public static void main(String[] args) { 60 NLPIR tt = new NLPIR(); 61 tt.init(); 62 String str = "最近,內江威遠縣一名7歲的患腦瘤的小男孩臥床不起。由於治癒無望,小男孩的母親聶曉紅在決定捐獻兒子器官的同時,希望兒子的父親能回來看看兒子。“兒子4年多沒有見爸爸了,如果父子倆能見最後一面多好啊。”小男孩的願望讓母親泣不成聲然而,4年來誰都不知道小男孩的父親人在何方,聶曉紅只得向成都商報求助。6月10日,成都商報客戶端及新浪官方微博發出“尋人”訊息。幾經周折,孩子父親李連興終於得知訊息。12日晚,李連興從廣東東莞趕至威遠,見到了病危的兒子。聽到兒子叫“爸爸”,看到兒子的狀況,他流下了無聲的淚水。他表示,自己對不起兒子,一定要陪在兒子身邊,不再離開。"; 63 str = tt.parseSen(str.replaceAll("[\\pP‘’“”]", "")); 64 65 System.out.println(str); 66 67 ExecutorService exec = Executors.newCachedThreadPool(); 68 for(int i=0; i<10; i++) 69 exec.submit(new ThreadNLP(tt)); 70 exec.shutdown(); 71 tt.unInit(); 72 } 73 }

2.下面的是介面類

 1 package test;
 2 
 3 import com.sun.jna.Library;
 4 
 5 // 定義介面CLibrary,繼承自com.sun.jna.Library
 6 public interface CLibrary extends Library {
 7     // 定義並初始化介面的靜態變數
 8     
 9     public int NLPIR_Init(String sDataPath, int encoding,
10             String sLicenceCode);
11             
12     public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged);
13 
14     public String NLPIR_GetKeyWords(String sLine, int nMaxKeyLimit,
15             boolean bWeightOut);
16     public String NLPIR_GetFileKeyWords(String sLine, int nMaxKeyLimit,
17             boolean bWeightOut);
18     public int NLPIR_AddUserWord(String sWord);
19     public int NLPIR_DelUsrWord(String sWord);
20     public String NLPIR_GetLastErrorMsg();
21     public void NLPIR_Exit();
22 }

3.執行緒類

 1 package test;
 2 
 3 public class ThreadNLP implements Runnable {
 4 
 5     private NLPIR tt;
 6     
 7     public ThreadNLP(NLPIR tt){
 8         this.tt =  tt;
 9     }
10     @Override
11     public void run() {
12         // TODO Auto-generated method stub
13         System.out.println(tt.parseSen("中國人民解放軍保衛祖國"));
14     }
15 
16 }

  把這三個檔案複製到一個package下就可以實現多執行緒分詞了。

  整體上沒什麼太難的東西,算是拋磚引玉了。希望能對大家有幫助!

相關推薦

原創中文系統 ICTCLAS2015JAVA封裝執行執行程式碼

  本文針對的問題是 ICTCLAS2015 的多執行緒分詞,為了實現多執行緒做了簡單的JAVA封裝。如果有需要可以自行進一步封裝其它介面。   首先ICTCLAS2015的傳送門(http://ictclas.nlpir.org/),其對中文分詞做的比較透徹,而且有一定的可調式性。但是應用到實際開發中的話

中文之HMM模型詳解

實現 含義 jieba 順序 清晰 bsp 中國 matrix 統計 關於HMM模型的介紹,網上的資料已經爛大街,但是大部分都是在背書背公式,本文在此針對HMM模型在中文分詞中的應用,講講實現原理。 盡可能的撇開公式,撇開推導。結合實際開源代碼作為例子,爭取做到雅俗共賞,

NLP中文之jieba

宣告:本文參考jieba官方文件而成,官方連結:https://github.com/fxsjy/jieba 【一】jieba安裝 pip install jieba 【二】jieba簡介 簡介可見jieba官方說明:https://pypi.org/project/jieba/

Python中文並過濾停用

中文分詞並過濾停用詞,python程式碼如下。 #coding=utf-8 import jieba input_path='../data/train_pos_100.txt' output_path='../data/train_pos_100_seg.txt' st

文字分類最強中文系統ICTCLAS

ICTCLAS中文詞法分析是中文資訊處理的基礎與關鍵。中國科學院計算技術研究所在多年研究工作積累的基礎上,研製了漢語詞法分析系統ICTCLAS(Institute of Computing Technology,Chinese Lexical Analysis System

NLP學習筆記中文

分詞通俗的講就是如何將一個句子劃分成詞語,大多數情況下不同的劃分方式會導致不同的語義。 分詞方法分類 自動分詞主要分為三個流派:規則分詞、統計分詞和混合分詞(規則+統計) 1、規則分詞 通過維護一個詞典,在切分語句時,將語句的每個字串與表中的詞進行逐一匹配,找到

NLP11大Java開源中文器的使用方法效果對比

本文的目標有兩個: 1、學會使用11大Java開源中文分詞器 2、對比分析11大Java開源中文分詞器的分詞效果 本文給出了11大Java開源中文分詞的使用方法以及分詞結果對比程式碼,至於效果哪個好,那要用的人結合自己的應用場景自己來判斷。 11大Java開源中文分詞器,不同的分詞器

中文系統NLPIR2015版Java介面使用學習

前言:         這幾天資料探勘的大作業又用到分詞了,首先想到的肯定是中科院的分詞系統NLPIR,但是之前用的事2013版的,2015版的有了新的變化。增加了函式和效率自是不必說,由於我是用的j

原創windows 7 通過系統自帶工具進行MD5 SHA1 SHA256 校驗oracle 19c 安裝文件

home windows oracle pan sha linu color 示例 md5 windows 7 通過系統自帶工具進行MD5 SHA1 SHA256 校驗oracle 19c 安裝文件 工具:certutil 用法:certutil -hashfil

鯨歌原創八年轉變經歷,工人變程式設計師的祕密武器連載3

為年輕時做出的衝動決定買單,衝動型創業 撥雲見月 就這樣渾渾噩噩的到了2010年的4月份,由於長期在外面吃快餐導致得了急性腸胃炎,白天休息拉了一天肚子,晚班直到晚上凌晨都不見好,當意識到病情嚴重性的時候已經脫水暈倒在機器旁邊。當時有瞬間的意識就是同事和師傅都緊張

10大Java開源中文器的使用方法效果對比

原文地址:http://my.oschina.net/apdplat/blog/412921 本文的目標有兩個: 1、學會使用10大Java開源中文分詞器 2、對比分析10 大Java開源中文分詞器的分詞效果 本文給出了10大Java開源中文分詞的使用方法以及分詞

原創詳細案例解剖——淺談Redis快取的常用5中方式String,Hash,List,set,SetSorted

很多小夥伴沒接觸過Redis,以至於去學習的時候感覺雲裡霧裡的,就有一種:教程隨你出,懂了算我輸的感覺。 每次聽圈內人在談論的時候總是插不上話,小編就偷偷去了解了一下,也算是初入門徑。 然後就整理了一下,很簡單的一個demo(小編用的是C#語法進行demo編寫),我們一起來解剖一下。 總共分為兩步:

基於Tire樹最大概率法的中文功能的Java實現

對於分詞系統的實現來說,主要應集中在兩方面的考慮上:一是對語料庫的組織,二是分詞策略的制訂。 1.   Tire樹 Tire樹,即字典樹,是通過字串的公共字首來對字串進行統計、排序及儲存的一種樹形結構。其具有如下三個性質: 1)      根節點不包含字元(或漢字),除根節

原創關於weblogic的classpath、weblogic.xmlJASS設定

關於weblogic的classpath、weblogic.xml和JASS設定 自己最近剛剛調到了公司的訪問安全小組,接入公司的賬戶管理系統,以前的專案都是使用的是TOMCAT,現在需要配置weblogic的相關專案,接入的時候遇見了許多坑,主要是class

python3執行-執行非同步推薦使用

- python3有threading和_thread兩種執行緒寫法,推薦使用threading。 開多執行緒就是為了使用多執行緒的非同步能力來同時執行多個執行緒。 1. threading方法 #!/usr/bin/python3 # 執行緒非同步 import thread

資源斯坦福李飛飛高徒Johnson博士論文: 組成式計算機視覺智慧195頁PDF

【導讀】Justin Johnson,斯坦福大學博士,導師是計算機視覺領域頂級學者李飛飛博士。研究興趣包括計算機視覺和機器學習方面,涉及到視覺推理、視覺和語言,以及使用深層神經網路生成影象。Johnson目前是Facebook AI Research的研究科學家。從2019年秋季開始,我將加入密歇根

120TensorFlow 從CSV檔案中讀取資料並訓練線性迴歸模型面向新手

正文開始。 學習 TensorFlow 讓我的思維發生了變化。 計算機本質上是一種數學的工具,而我在學習程式設計的時候,思維也不可避免地收到了影響。傳統的程式設計思想,常常認為程式就應該像數學定理或者數學函式一樣,給出一個確定的結果。這是一種基於邏輯推導

Pythonmatplotlib畫圖設定標題、軸標籤、刻度、刻度標籤系列1

摘要 資訊視覺化(也叫繪圖)是資料分析中最重要的工作之一。它可能是探索過程的一部分,例如,幫助我們找出異常值、必要的資料轉換、得出有關模型的idea等。另外,做一個可互動的資料視覺化也許是工作的最終目標。Python有許多庫進行靜態或動態的資料視覺化,但我這裡重要關注於matplotli

Python專案基於文字情感分析的電商評論重排序以京東為例程式碼

一、背景 隨著網際網路的普及,網路購物已經成了人們購物的首選。使用者只需在電商平臺搜尋商品名,便可得到成百上千條商品資訊。商品資訊的排序演算法很複雜,但總的說來基本上都是根據與搜尋關鍵詞的關聯度和商品的人氣或商家排名來排序最終對使用者進行展示的。而好評率即是排

開發工具JAVA效能分析:8、超詳細的JProfiler執行分析官方中文版

Thread Profiling——執行緒分析 官方文件http://resources.ej-technologies.com/jprofiler/help/doc/index.html 錯誤地使用執行緒可能會產生許多不同型別的問題。太多活動執行緒可能導致執行緒不足,執行緒可能會相互阻塞並