日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HashMap实现中文分词器

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HashMap实现中文分词器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????今天下午部門內部技術分享是分詞器算法。這次的主講是大名鼎鼎的Ansj分詞器的作者-孫健

作者簡介:
1. Ansj分詞器作者
2. elasticsearch-sql(elasticsearch的sql插件)作者,支持sql查詢
3. nlp-lang自然語言工具包發起人
4. NLPCN(自然語言處理組織)發起人
等等…
網站:http://www.nlpcn.org/
GIT地址:https://github.com/NLPchina

具體作者詳情請百度、Google

????大神首先對中文分詞的概念進行詳細的解釋,并對比了傳統分詞和自然語言分詞的區別和優略勢。然后又講到目前中文分詞在應用過程中遇到的一些困難,其中就包括中文歧義的識別(包含交叉歧義、組合歧義、真歧義)、人名識別、地名識別和機構名識別。在這幾種難題中,又以機構名識別最為困難(機構名稱各種簡稱如:北京大學(北大)、騰訊(鵝場)等)。召回率和準確率的關系,正向匹配、逆向匹配等等。生動的講解了分詞的原理和難度所在。

????但是講到怎么實現的時候,大家都是一臉懵逼的,各種算法(Trie Tree、雙數組trie樹、CRF模型等)。聽完就什么都不記得了,呵呵。

????不過講到最后的時候給我們分享了下HashMap的一種簡單實現分詞器的思路,意外的收獲。下面通過代碼說明(五分鐘搞定^_^)。

HashMap簡單實現的分詞器

public class TokenizerDemo {private static Map<String, String> map = new HashMap<String, String>();//詞典中最長詞的長度,map中的key的最長長度private static final int maxSize = 3;static{//可以從數據庫中加載或詞表中加載map.put("中國", "");map.put("北京", "");map.put("中關村", "");map.put("海淀", "");}public static void main(String[] args) {String text = "中國人民共和國首都是北京,中關村在海淀區。";int length = text.length();for(int i=0; i<length; i++){int endIdx = i+maxSize;if(endIdx>length){endIdx = length;}//最大逆序匹配for(int j=0; j<maxSize; j++){String s = text.substring(i, endIdx);if(map.get(s)!=null){//跳過匹配過的詞(后面會說明跳過匹配詞的原因)i=endIdx-1;System.out.println(s);break;}else{endIdx-=1;if(endIdx==i){break;}}}}} }

輸出結果:
中國
北京
中關村
海淀

注意:
如果不跳過已經匹配的詞會出現”北京劇院” 拆分成 [北京]、[京劇]、[劇院] 三個詞,
如果跳過匹配過的詞就會拆分成 [北京]、[劇院]。

分詞原理:

從詞典中找出最長詞的長度,這里為maxSize=3,按照maxSize的長度從文本的第一位(i=0)截取要抽取的文本【中國人】,然后去Map中查找是否有對應的值,如果沒有減去一個長度截取(maxSize-1)【中國】,去Map中查找,找到則停止當前查找,接著從匹配當前詞后面的字(i=2)【人民共】開始繼續上述的步驟開始查找。

代碼執行的流程如下:

第一次循環(i=0):中國人 -> 無命中(map中沒找到) (j=0)中國 -> map命中 (j=1) 【注釋:命中后i+2(當前詞)的長度。所以i=2】第二次循環(i=2):人民共 -> 無命中 (j=0)人民 -> 無命中 (j=1)人 -> 無命中 (j=2)第三次循環(i=3):民共和 -> 無命中 (j=0)民共 -> 無命中 (j=1)民 -> 無命中 (j=2)...依次類推,找出文本中所有匹配詞典中的詞

很簡單的代碼就說明了分詞器的原理(只是最簡單、能命中詞而以)。

應用場景

敏感詞、文字過濾是一個網站必不可少的功能,可以使用這么簡單的幾行代碼實現網站的敏感詞過濾功能,自己這么簡單幾行代碼就能實現是不是很棒。

本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點擊這里快速進入簡書

GIT地址:http://git.oschina.net/brucekankan/
點擊這里快速進入GIT

總結

以上是生活随笔為你收集整理的HashMap实现中文分词器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。