NLPIR 汉语分词系统 (PyNLPIR) 学习手札
1 關(guān)于NLPIR
最近在做一些NLP相關(guān)的任務(wù),其中一個(gè)關(guān)鍵的子任務(wù)就是如何對(duì)漢語(yǔ)進(jìn)行分詞?關(guān)于分詞的方式,有很多很多,也是很多學(xué)習(xí)者的練手任務(wù)(比如我們當(dāng)時(shí)的期末作業(yè)就有這個(gè))。但是,輪子還是要搬來(lái)用,自己寫的分詞只能說(shuō)是去了解這個(gè)方式(了解某個(gè)算法),做出來(lái)的都是能看不能用,畢竟模型、算法、語(yǔ)料庫(kù)等一座座大山等著我們攻克。
所以,我找了一些資料,看到一個(gè)不錯(cuò)的教程,他用了NLPIR,所以我也跟著使用NLPIR,并且在這里留下手札,方便自己后續(xù)查閱,也希望能夠再幫助其他人理解。
在這篇手札當(dāng)中,我選擇的是Python的版本,也就是PyNLPIR
NLPIR的官網(wǎng)是:http://ictclas.nlpir.org/
其Python版本文檔(英文)地址:http://pynlpir.readthedocs.io/en/latest/
本篇手札的首要參考博客:http://www.shareditor.com/blogshow/?blogId=74
關(guān)于NLPIR 其官網(wǎng)的介紹是:
NLPIR漢語(yǔ)分詞系統(tǒng)(又名ICTCLAS2013),主要功能包括中文分詞;詞性標(biāo)注;命名實(shí)體識(shí)別;用戶詞典功能;支持GBK編碼、UTF8編碼、BIG5編碼。新增微博分詞、新詞發(fā)現(xiàn)與關(guān)鍵詞提取;張華平博士先后傾力打造十余年,內(nèi)核升級(jí)10次。
全球用戶突破20萬(wàn),先后獲得了2010年錢偉長(zhǎng)中文信息處理科學(xué)技術(shù)獎(jiǎng)一等獎(jiǎng),2003年國(guó)際SIGHAN分詞大賽綜合第一名,2002年國(guó)內(nèi)973評(píng)測(cè)綜合第一名。
2 PyNLPIR 安裝
PyNLPIR的安裝很簡(jiǎn)單,首先你要保證你安裝了PIP,這個(gè)工具在我的博客的各個(gè)手札當(dāng)中出現(xiàn)過(guò)很多次,沒(méi)有安裝的可以看看之前的博客。
使用PIP我們可以非常快速的安裝完成,終端執(zhí)行如下的指令,等待安裝完成即可(如果權(quán)限不夠,請(qǐng)?jiān)谇懊婕觭udo):
$ pip install pynlpir安裝完成后,我們驗(yàn)證一下是否成功了,啟動(dòng)Python解釋器,敲入如下的代碼,引入pynlpir,如果回車后沒(méi)有問(wèn)題,就證明安裝成功
import pynlpir3 分詞與詞性標(biāo)注
首先我們?cè)囼?yàn)一下分詞,這里貼出了源代碼,安裝完成PyNLPIR后,大家自己運(yùn)行一下這個(gè)代碼就可以。
需要注意的是,使用pynlpir的時(shí)候,首先要初始化,也就是需要先open(pynlpir.open()),當(dāng)執(zhí)行完成后需要對(duì)應(yīng)的關(guān)閉(pynlpir.close())
# coding:utf-8import sys reload(sys) sys.setdefaultencoding( "utf-8" )import pynlpirpynlpir.open() s = '因?yàn)槲冶容^懶,所以我就只是修改了這句話,代碼還是原博客的' segments = pynlpir.segment(s) for segment in segments:print segment[0], '\t', segment[1]pynlpir.close()如果運(yùn)行成功,那么應(yīng)該會(huì)給出如下的結(jié)果
因?yàn)? preposition 我 pronoun 比較 adverb 懶 adjective , punctuation mark 所以 conjunction 我 pronoun 就 adverb 只 adverb 是 verb 修改 verb 了 particle 這 pronoun 句 classifier 話 noun , punctuation mark 代碼 noun 還 adverb 是 verb 原 distinguishing word 博客 noun 的 particleProcess finished with exit code 0NLPIR還可以更加詳細(xì)的輸出詞性信息,做如下修改:
segments = pynlpir.segment(s) 改為: segments = pynlpir.segment(s,pos_names='all') 你可以在segment時(shí)同時(shí)配置如下參數(shù),調(diào)整結(jié)果,請(qǐng)自行選擇: pos_names='all' / 'child' / 'parent' #默認(rèn)是parent, 表示獲取該詞性的最頂級(jí)詞性,child表示獲取該詞性的最具體的信息,all表示獲取該詞性相關(guān)的所有詞性信息,相當(dāng)于從其頂級(jí)詞性到該詞性的一條路徑 pos_english=False # 詞性標(biāo)注結(jié)果以中文的形式顯示 pos_tagging=False # 只做分詞,而不顯示詞性運(yùn)行后可以得到更加詳細(xì)的結(jié)果:
因?yàn)? preposition 我 pronoun:personal pronoun 比較 adverb 懶 adjective , punctuation mark:comma 所以 conjunction 我 pronoun:personal pronoun 就 adverb 只 adverb 是 verb:verb 是 修改 verb 了 particle:particle 了/嘍 這 pronoun:demonstrative pronoun:predicate demonstrative pronoun 句 classifier 話 noun , punctuation mark:comma 代碼 noun 還 adverb 是 verb:verb 是 原 distinguishing word 博客 noun:other proper noun 的 particle:particle 的/底4 關(guān)鍵詞提取
在如上的代碼基礎(chǔ)上,略微的修改代碼
# coding:utf-8import sys reload(sys) sys.setdefaultencoding( "utf-8" )import pynlpirpynlpir.open() s = '因?yàn)槲冶容^懶,所以我就只是修改了這句話,代碼還是原博客的' print '關(guān)鍵詞測(cè)試:\n' key_words = pynlpir.get_key_words(s, weighted=True) for key_word in key_words:print key_word[0], '\t', key_word[1]pynlpir.close()運(yùn)行后提取出來(lái)的關(guān)鍵詞應(yīng)該是:
關(guān)鍵詞測(cè)試:
關(guān)鍵詞測(cè)試:修改 2.0 代碼 2.0 博客 2.0Process finished with exit code 0附錄 NLPIR 詞性分類信息
POS_MAP = {'n': ('名詞', 'noun', {'nr': ('人名', 'personal name', {'nr1': ('漢語(yǔ)姓氏', 'Chinese surname'),'nr2': ('漢語(yǔ)名字', 'Chinese given name'),'nrj': ('日語(yǔ)人名', 'Japanese personal name'),'nrf': ('音譯人名', 'transcribed personal name')}),'ns': ('地名', 'toponym', {'nsf': ('音譯地名', 'transcribed toponym'),}),'nt': ('機(jī)構(gòu)團(tuán)體名', 'organization/group name'),'nz': ('其它專名', 'other proper noun'),'nl': ('名詞性慣用語(yǔ)', 'noun phrase'),'ng': ('名詞性語(yǔ)素', 'noun morpheme'),}),'t': ('時(shí)間詞', 'time word', {'tg': ('時(shí)間詞性語(yǔ)素', 'time morpheme'),}),'s': ('處所詞', 'locative word'),'f': ('方位詞', 'noun of locality'),'v': ('動(dòng)詞', 'verb', {'vd': ('副動(dòng)詞', 'auxiliary verb'),'vn': ('名動(dòng)詞', 'noun-verb'),'vshi': ('動(dòng)詞"是"', 'verb 是'),'vyou': ('動(dòng)詞"有"', 'verb 有'),'vf': ('趨向動(dòng)詞', 'directional verb'),'vx': ('行事動(dòng)詞', 'performative verb'),'vi': ('不及物動(dòng)詞', 'intransitive verb'),'vl': ('動(dòng)詞性慣用語(yǔ)', 'verb phrase'),'vg': ('動(dòng)詞性語(yǔ)素', 'verb morpheme'),}),'a': ('形容詞', 'adjective', {'ad': ('副形詞', 'auxiliary adjective'),'an': ('名形詞', 'noun-adjective'),'ag': ('形容詞性語(yǔ)素', 'adjective morpheme'),'al': ('形容詞性慣用語(yǔ)', 'adjective phrase'),}),'b': ('區(qū)別詞', 'distinguishing word', {'bl': ('區(qū)別詞性慣用語(yǔ)', 'distinguishing phrase'),}),'z': ('狀態(tài)詞', 'status word'),'r': ('代詞', 'pronoun', {'rr': ('人稱代詞', 'personal pronoun'),'rz': ('指示代詞', 'demonstrative pronoun', {'rzt': ('時(shí)間指示代詞', 'temporal demonstrative pronoun'),'rzs': ('處所指示代詞', 'locative demonstrative pronoun'),'rzv': ('謂詞性指示代詞', 'predicate demonstrative pronoun'),}),'ry': ('疑問(wèn)代詞', 'interrogative pronoun', {'ryt': ('時(shí)間疑問(wèn)代詞', 'temporal interrogative pronoun'),'rys': ('處所疑問(wèn)代詞', 'locative interrogative pronoun'),'ryv': ('謂詞性疑問(wèn)代詞', 'predicate interrogative pronoun'),}),'rg': ('代詞性語(yǔ)素', 'pronoun morpheme'),}),'m': ('數(shù)詞', 'numeral', {'mq': ('數(shù)量詞', 'numeral-plus-classifier compound'),}),'q': ('量詞', 'classifier', {'qv': ('動(dòng)量詞', 'verbal classifier'),'qt': ('時(shí)量詞', 'temporal classifier'),}),'d': ('副詞', 'adverb'),'p': ('介詞', 'preposition', {'pba': ('介詞“把”', 'preposition 把'),'pbei': ('介詞“被”', 'preposition 被'),}),'c': ('連詞', 'conjunction', {'cc': ('并列連詞', 'coordinating conjunction'),}),'u': ('助詞', 'particle', {'uzhe': ('著', 'particle 著'),'ule': ('了/嘍', 'particle 了/嘍'),'uguo': ('過(guò)', 'particle 過(guò)'),'ude1': ('的/底', 'particle 的/底'),'ude2': ('地', 'particle 地'),'ude3': ('得', 'particle 得'),'usuo': ('所', 'particle 所'),'udeng': ('等/等等/云云', 'particle 等/等等/云云'),'uyy': ('一樣/一般/似的/般', 'particle 一樣/一般/似的/般'),'udh': ('的話', 'particle 的話'),'uls': ('來(lái)講/來(lái)說(shuō)/而言/說(shuō)來(lái)', 'particle 來(lái)講/來(lái)說(shuō)/而言/說(shuō)來(lái)'),'uzhi': ('之', 'particle 之'),'ulian': ('連', 'particle 連'),}),'e': ('嘆詞', 'interjection'),'y': ('語(yǔ)氣詞', 'modal particle'),'o': ('擬聲詞', 'onomatopoeia'),'h': ('前綴', 'prefix'),'k': ('后綴' 'suffix'),'x': ('字符串', 'string', {'xe': ('Email字符串', 'email address'),'xs': ('微博會(huì)話分隔符', 'hashtag'),'xm': ('表情符合', 'emoticon'),'xu': ('網(wǎng)址URL', 'URL'),'xx': ('非語(yǔ)素字', 'non-morpheme character'),}),'w': ('標(biāo)點(diǎn)符號(hào)', 'punctuation mark', {'wkz': ('左括號(hào)', 'left parenthesis/bracket'),'wky': ('右括號(hào)', 'right parenthesis/bracket'),'wyz': ('左引號(hào)', 'left quotation mark'),'wyy': ('右引號(hào)', 'right quotation mark'),'wj': ('句號(hào)', 'period'),'ww': ('問(wèn)號(hào)', 'question mark'),'wt': ('嘆號(hào)', 'exclamation mark'),'wd': ('逗號(hào)', 'comma'),'wf': ('分號(hào)', 'semicolon'),'wn': ('頓號(hào)', 'enumeration comma'),'wm': ('冒號(hào)', 'colon'),'ws': ('省略號(hào)', 'ellipsis'),'wp': ('破折號(hào)', 'dash'),'wb': ('百分號(hào)千分號(hào)', 'percent/per mille sign'),'wh': ('單位符號(hào)', 'unit of measure sign'),}),}總結(jié)
以上是生活随笔為你收集整理的NLPIR 汉语分词系统 (PyNLPIR) 学习手札的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 字符串的拼接
- 下一篇: Java String类型转换成Date