java 中文词性标注_pyhanlp 中文词性标注与分词简介
pyhanlp 中文詞性標(biāo)注與分詞簡(jiǎn)介
pyhanlp實(shí)現(xiàn)的分詞器有很多,同時(shí)pyhanlp獲取hanlp中分詞器也有兩種方式
第一種是直接從封裝好的hanlp類中獲取,這種獲取方式一共可以獲取五種分詞器,而現(xiàn)在默認(rèn)的就是第一種維特比分詞器
1.維特比 (viterbi):效率和效果的最佳平衡。也是最短路分詞,HanLP最短路求解采用Viterbi算法
2.雙數(shù)組trie樹 (dat):極速詞典分詞,千萬(wàn)字符每秒(可能無(wú)法獲取詞性,此處取決于你的詞典)
3.條件隨機(jī)場(chǎng) (crf):分詞、詞性標(biāo)注與命名實(shí)體識(shí)別精度都較高,適合要求較高的NLP任務(wù)
4.感知機(jī) (perceptron):分詞、詞性標(biāo)注與命名實(shí)體識(shí)別,支持在線學(xué)習(xí)
5.N最短路 (nshort):命名實(shí)體識(shí)別稍微好一些,犧牲了速度
第二種方式是使用JClass直接獲取java類,然后使用。這種方式除了獲取上面的五種分詞器以外還可以獲得一些其他分詞器,如NLP分詞器,索引分詞,快速詞典分詞等等
兩種使用方式的對(duì)比
第一種是使用作者給的HanLP直接獲取分詞器,直接segment() 會(huì)獲取 默認(rèn)的標(biāo)準(zhǔn)分詞器也就是維特比分詞器,也**可以使用newSegment函數(shù),傳入上面的分詞器英文名稱來(lái)獲取新的分詞器,如使用HanLP.newSegment("crf")來(lái)獲取CRF分詞器。**第二種方式是使用JClass從java中獲取我們想要的類,好在這兩種方式都比較方便。除此之外要注意的是,在pyhanlp中還給出了SafeJClass類,其為JClass的線程安全版,你也可以使用SafeClass來(lái)代替JClass。不過(guò)好在HanLP中的很多類本身已經(jīng)實(shí)現(xiàn)了線程安全,因此許多時(shí)候兩者是可以相互替代的。
[你好/vl, ,/w, 歡迎/v, 使用/v, HanLP/nx, 漢語(yǔ)/gi, 處理/vn, 包/v, !/w, 接下來(lái)/vl, 請(qǐng)/v, 從/p, 其他/rzv, Demo/nx, 中/f, 體驗(yàn)/v, HanLP/nx, 豐富/a, 的/ude1, 功能/n, ~/nx]
# 標(biāo)準(zhǔn)分詞
text = (
"舉辦紀(jì)念活動(dòng)銘記二戰(zhàn)歷史,不忘戰(zhàn)爭(zhēng)帶給人類的深重災(zāi)難,是為了防止悲劇重演,確保和平永駐;記二戰(zhàn)歷史,更是為了提醒國(guó)際社會(huì),需要共同捍衛(wèi)二戰(zhàn)勝利成果和國(guó)際公平正義,必須警惕和抵制在歷史認(rèn)知和維護(hù)戰(zhàn)后國(guó)際秩序問(wèn)題上的倒行逆施。"
)
BasicTokenizer = JClass("com.hankcs.hanlp.tokenizer.BasicTokenizer")
print(BasicTokenizer.segment(text))
import time
start = time.time()
for i in range(100000):
HanLP.segment(text)
cost_time = time.time() - start
print("HanLP.segment :%.2f字每秒" % (len(text) * 100000 / cost_time))
start = time.time()
for i in range(100000):
BasicTokenizer.segment(text)
cost_time = time.time() - start
print("BasicTokenizer.segment :%.2f字每秒" % (len(text) * 100000 / cost_time))
[舉辦/v, 紀(jì)念活動(dòng)/nz, 銘記/v, 二戰(zhàn)/n, 歷史/n, ,/w, 不忘/v, 戰(zhàn)爭(zhēng)/n, 帶給/v, 人類/n, 的/ude1, 深重/a, 災(zāi)難/n, ,/w, 是/vshi, 為了/p, 防止/v, 悲劇/n, 重演/v, ,/w, 確保/v, 和平/n, 永駐/nz, ;/w, 記/v, 二戰(zhàn)/n, 歷史/n, ,/w, 更是/d, 為了/p, 提醒/v, 國(guó)際/n, 社會(huì)/n, ,/w, 需要/v, 共同/d, 捍衛(wèi)/v, 二戰(zhàn)/n, 勝利/vn, 成果/n, 和/cc, 國(guó)際/n, 公平/a, 正義/n, ,/w, 必須/d, 警惕/v, 和/cc, 抵制/v, 在/p, 歷史/n, 認(rèn)知/vn, 和/cc, 維護(hù)/v, 戰(zhàn)后/t, 國(guó)際/n, 秩序/n, 問(wèn)題/n, 上/f, 的/ude1, 倒行逆施/vl, 。/w]
HanLP.segment :1518389.32字每秒
BasicTokenizer.segment :2415039.64字每秒
僅僅從剛剛的結(jié)果看,可能會(huì)不太理解為同一個(gè)分詞器性能差距這么大?難道是因?yàn)橹虚g代碼的調(diào)度問(wèn)題,其實(shí)也不是。將兩段代碼前后互換之后,發(fā)現(xiàn)無(wú)論兩者怎么排列,總是在前的速度較慢,在后的較快,因此應(yīng)該是內(nèi)存的問(wèn)題,第二次調(diào)用時(shí)減少了部分內(nèi)存的調(diào)動(dòng)。所以同一個(gè)分詞器才會(huì)出現(xiàn),第二次總比第一次快的現(xiàn)象。
標(biāo)準(zhǔn)分詞
說(shuō)明
1.HanLP中有一系列“開箱即用”的靜態(tài)分詞器,以Tokenizer結(jié)尾,在接下來(lái)的例子中會(huì)繼續(xù)介紹。
2.HanLP.segment其實(shí)是對(duì)StandardTokenizer.segment的包裝。
3.分詞結(jié)果包含詞性,每個(gè)詞性的意思請(qǐng)查閱《HanLP詞性標(biāo)注集》。
算法詳解
1.《詞圖的生成》
單獨(dú)獲取詞性或者詞語(yǔ)
如你所見的是,前面print的結(jié)果是[詞語(yǔ)/詞性,詞語(yǔ)/詞性,/詞語(yǔ)/詞性…]的形式,那么如果我們只想獲取詞語(yǔ),或者詞性應(yīng)該怎么辦呢?
方法也很簡(jiǎn)單。使用HanLP.Config.ShowTermNature = False修改配置,使其不顯示詞性即可。
如果想要只獲取詞性也是可以的,因?yàn)樵衷~器返回的是Java中的ArrayList屬性,list中的每個(gè)單元都是一個(gè)term類,因此我們也可以通過(guò)獲取term中的word字段來(lái)直接獲取詞語(yǔ),或者nature屬性,直接獲取詞性。這一特征,我們?cè)谥笠矔?huì)用到。
因?yàn)镠anLP中是默認(rèn)開啟詞性標(biāo)注的,所以在這里我取名為分詞與詞性標(biāo)注,但是因?yàn)槠蜻@里沒(méi)有對(duì)詞性標(biāo)注作過(guò)多解釋,詳細(xì)內(nèi)容請(qǐng)看“詞性標(biāo)注(正篇)”
作者:Font Tian
總結(jié)
以上是生活随笔為你收集整理的java 中文词性标注_pyhanlp 中文词性标注与分词简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SWUN 1423 - 伊邪那美
- 下一篇: ACM分类