python調(diào)用Hanlp做命名實(shí)體識(shí)別以及詞性標(biāo)注

之前需要做一個(gè)中文命名實(shí)體識(shí)別的api檩帐,看完了一些相關(guān)論文以后覺(jué)得短時(shí)間內(nèi)自己實(shí)現(xiàn)不大現(xiàn)實(shí)患久,于是找了一些開(kāi)源工具厚骗,其中哈工大的LTP效果是很好的示启,但是免費(fèi)使用限流量,需要給錢才行领舰; NLPIR的pynlpir似乎還不能支持命名實(shí)體識(shí)別等復(fù)雜工作夫嗓,只能做一些分詞之類;最后還剩下Hanlp冲秽,感謝Hanlp的作者h(yuǎn)ancks無(wú)私的將代碼開(kāi)源舍咖,還提供了那么詳細(xì)的文檔。

pyhanlp只有少數(shù)功能锉桑,其他復(fù)雜一點(diǎn)的功能需要使用python調(diào)用java代碼來(lái)實(shí)現(xiàn)排霉。
以下是api的模型部分,大多是照著文檔寫(xiě)成的民轴。
python調(diào)用java需要jpype庫(kù)攻柠,具體安裝請(qǐng)參考之前的博客:jpype安裝的簡(jiǎn)便方法

# -*- coding: utf-8 -*-

"""
Created on Thu May 10 09:19:55 2018

@author: wang小堯
"""

import jpype

#路徑
jvmPath = jpype.getDefaultJVMPath() # 獲得系統(tǒng)的jvm路徑
ext_classpath = r"./ner/hanlp\hanlp-1.6.3.jar:./ner/hanlp"
jvmArg = '-Djava.class.path=' + ext_classpath
jpype.startJVM(jvmPath, jvmArg, "-Xms1g", "-Xmx1g")

#繁體轉(zhuǎn)簡(jiǎn)體
def TraditionalChinese2SimplifiedChinese(sentence_str):
    HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
    return HanLP.convertToSimplifiedChinese(sentence_str)

#切詞&命名實(shí)體識(shí)別與詞性標(biāo)注(可以粗略識(shí)別)
def NLP_tokenizer(sentence_str):
    NLPTokenizer = jpype.JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
    return NLPTokenizer.segment(sentence_str)

#地名識(shí)別,標(biāo)注為ns
def Place_Recognize(sentence_str):
    HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
    segment = HanLP.newSegment().enablePlaceRecognize(True)
    return HanLP.segment(sentence_str)

#人名識(shí)別,標(biāo)注為nr
def PersonName_Recognize(sentence_str):
    HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
    segment = HanLP.newSegment().enableNameRecognize(True)
    return HanLP.segment(sentence_str)

#機(jī)構(gòu)名識(shí)別,標(biāo)注為nt
def Organization_Recognize(sentence_str):
    HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
    segment = HanLP.newSegment().enableOrganizationRecognize(True)
    return HanLP.segment(sentence_str)

#標(biāo)注結(jié)果轉(zhuǎn)化成列表
def total_result(function_result_input):
    x = str(function_result_input)
    y = x[1:len(x)-1]
    y = y.split(',')
    return y

#時(shí)間實(shí)體
def time_result(total_result):
    z = []
    for i in range(len(total_result)):
        if total_result[i][-2:] == '/t':
            z.append(total_result[i])
    return z

#Type_Recognition 可以選 ‘place’,‘person’,‘organization’三種實(shí)體,
#返回單一實(shí)體類別的列表
def single_result(Type_Recognition,total_result):
    if Type_Recognition == 'place':
        Type = '/ns'
    elif Type_Recognition == 'person':
        Type = '/nr'
    elif Type_Recognition == 'organization':
        Type = '/nt'
    else:
        print ('請(qǐng)輸入正確的參數(shù):(place后裸,person或organization)')
    z = []
    for i in range(len(total_result)):
        if total_result[i][-3:] == Type:
            z.append(total_result[i])
    return z

#把單一實(shí)體結(jié)果匯總成一個(gè)字典
def dict_result(sentence_str):
    sentence = TraditionalChinese2SimplifiedChinese(sentence_str)
    total_dict = {}
    a = total_result(Place_Recognize(sentence))
    b = single_result('place',a)
    c = total_result(PersonName_Recognize(sentence))
    d = single_result('person',c)
    e = total_result(Organization_Recognize(sentence))
    f = single_result('organization',e)
    g = total_result(NLP_tokenizer(sentence))
    h = time_result(g)
    total_list = [i for i in [b,d,f,h]]
    total_dict.update(place = total_list[0],person = total_list[1],organization = total_list[2],time = total_list[3])
    jpype.shutdownJVM()#關(guān)閉JVM虛擬機(jī)
    return total_dict

#測(cè)試
test_sentence="2018年武勝縣新學(xué)鄉(xiāng)政府大樓門前鑼鼓喧天,6月份藍(lán)翔給寧夏固原市彭陽(yáng)縣紅河鎮(zhèn)捐贈(zèng)了挖掘機(jī),中國(guó)科學(xué)院計(jì)算技術(shù)研究所的宗成慶教授負(fù)責(zé)教授自然語(yǔ)言處理課程,而他的學(xué)生現(xiàn)在正在香港看肉蒲團(tuán)"
print (dict_result(test_sentence))


識(shí)別結(jié)果:



{'place': [' 武勝縣/ns', ' 寧夏/ns', ' 固原市/ns', ' 彭陽(yáng)縣/ns', ' 紅河鎮(zhèn)/ns', ' 香港/ns'], 'person': [' 宗成慶/nr'], 'organization': [' 藍(lán)翔/nt', ' 中國(guó)科學(xué)院計(jì)算技術(shù)研究所/nt'], 'time': ['2018年/t', ' 6月份/t', ' 現(xiàn)在/t']}

遇到的問(wèn)題:

在弄這個(gè)api時(shí)遇到了一些問(wèn)題瑰钮,就是當(dāng)我打開(kāi)java虛擬機(jī)JVM,功能正常使用完關(guān)閉了JVM微驶,但是再打開(kāi)的時(shí)候就會(huì)報(bào)錯(cuò)浪谴,所以得一直保持一個(gè)JVM一直打開(kāi)的狀態(tài),或者重啟kernel才行因苹。網(wǎng)上找了找也沒(méi)能找到靠譜的解決方案苟耻,這個(gè)問(wèn)題只有以后慢慢解決了。如果有人知道如何處理容燕,可以給我發(fā)私信梁呈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蘸秘,隨后出現(xiàn)的幾起案子官卡,更是在濱河造成了極大的恐慌蝗茁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寻咒,死亡現(xiàn)場(chǎng)離奇詭異哮翘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)毛秘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門饭寺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人叫挟,你說(shuō)我怎么就攤上這事艰匙。” “怎么了抹恳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵员凝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奋献,道長(zhǎng)健霹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任瓶蚂,我火速辦了婚禮糖埋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窃这。我一直安慰自己瞳别,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布钦听。 她就那樣靜靜地躺著洒试,像睡著了一般倍奢。 火紅的嫁衣襯著肌膚如雪朴上。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天卒煞,我揣著相機(jī)與錄音痪宰,去河邊找鬼。 笑死畔裕,一個(gè)胖子當(dāng)著我的面吹牛衣撬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扮饶,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼具练,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了甜无?” 一聲冷哼從身側(cè)響起扛点,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哥遮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后陵究,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體眠饮,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年铜邮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仪召。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡松蒜,死狀恐怖扔茅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秸苗,我是刑警寧澤咖摹,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站难述,受9級(jí)特大地震影響萤晴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胁后,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一店读、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攀芯,春花似錦屯断、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至年鸳,卻和暖如春趴久,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搔确。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工彼棍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膳算。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓座硕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涕蜂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子华匾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評(píng)論 25 707
  • 這是刁明的第5篇讀書(shū)雜談 下面,我將用七句話總結(jié)這本書(shū)诸尽,一句話總結(jié)我所學(xué)的科學(xué)知識(shí)原杂。 第一堂課 最美的理論 空間不...
    竹林雞閱讀 585評(píng)論 0 1
  • 帶好隊(duì)伍用好人 “人才是企業(yè)的財(cái)富,技術(shù)是企業(yè)的財(cái)富,市場(chǎng)資源是企業(yè)的財(cái)富…,…而最大的財(cái)富是對(duì)人的能力的管理,這...
    霜霜霜霜霜之霞閱讀 1,244評(píng)論 0 0
  • 當(dāng)時(shí)我剛進(jìn)去那家公司不久,二樓有一間很大的辦公室您机,坐著好幾個(gè)部門的人穿肄。大家大多數(shù)時(shí)候相安無(wú)事,各做各的事际看。 其中有...
    江南三月湖閱讀 622評(píng)論 3 2