本文爲本人學習pyhanlp的筆記,大多知識點來源於GitHubhttps://github.com/hankcs/HanLP/blob/master/README.md,文中的demo代碼來源於該GitHub主php
pyhanlp是HanLP的Python接口,支持自動下載與升級HanLP,兼容py二、py3。html
安裝前端
pip install pyhanlp
安裝時可能遇到的問題:java
解決方法:手動下載,下載連接:https://pan.baidu.com/s/1WaBxFghTll6Zofz1DGOZBggit
解決方法:HanLP主項目採用Java開發,因此須要Java運行環境,請安裝JDK。須要保證JDK位數、操做系統位數和Python位數一致。pyhanlp在64位系統上經過了全部測試;在32位系統上能夠運行但不作保證。程序員
配置github
默認在首次調用pyhanlp時自動下載jar包和數據包,並自動完成配置。 算法
若是網速慢或者其餘問題致使配置失敗,須要自行下載data文件,而後放入pyhanlp文件的static目錄中。下載地址:http://nlp.hankcs.com/download.php?file=data編程
若是仍是失敗,請參考https://github.com/hankcs/pyhanlp/wiki/手動配置數組
使用命令hanlp segment進入交互分詞模式,輸入一個句子並回車,HanLP會輸出分詞結果:
$ hanlp segment 商品和服務 商品/n 和/cc 服務/vn 當下雨天地面積水分外嚴重 當/p 下雨天/n 地面/n 積水/n 分外/d 嚴重/a 龔學平等領導說,鄧穎超生前杜絕超生 龔學平/nr 等/udeng 領導/n 說/v ,/w 鄧穎超/nr 生前/t 杜絕/v 超生/vi
還能夠重定向輸入輸出到文件等:
$ hanlp segment <<< '歡迎新老師生前來就餐' 歡迎/v 新/a 老/a 師生/n 前來/vi 就餐/vi
在Python中的實現
from pyhanlp import * print(HanLP.segment('你好,歡迎在Python中調用HanLP的API')) # [你好/vl, ,/w, 歡迎/v, 在/p, Python/nx, 中/f, 調用/v, HanLP/nx, 的/ude1, API/nx] ################### for term in HanLP.segment('下雨天地面積水'): print('{}\t{}'.format(term.word, term.nature)) # 獲取單詞與詞性 ''' 下雨天 n 地面 n 積水 n ''' ################### testCases = [ "商品和服務", "結婚的和還沒有結婚的確實在干擾分詞啊", "買水果真後來世博園最後去世博會", "中國的首都是北京", "歡迎新老師生前來就餐", "工信處女幹事每個月通過下屬科室都要親口交代24口交換機等技術性器件的安裝工做", "隨着頁遊興起到如今的頁遊繁盛,依賴於存檔進行邏輯判斷的設計減小了,但這塊也不能徹底忽略掉。"] for sentence in testCases: print(HanLP.segment(sentence)) ''' [商品/n, 和/cc, 服務/vn] [結婚/vi, 的/ude1, 和/cc, 還沒有/d, 結婚/vi, 的/ude1, 確實/ad, 在/p, 干擾/vn, 分詞/n, 啊/y] [買/v, 水果/n, 而後/c, 來/vf, 世博園/n, 最後/f, 去/vf, 世博會/n] [中國/ns, 的/ude1, 首都/n, 是/vshi, 北京/ns] [歡迎/v, 新/a, 老/a, 師生/n, 前來/vi, 就餐/vi] [工信處/n, 女幹事/n, 每個月/t, 通過/p, 下屬/v, 科室/n, 都/d, 要/v, 親口/d, 交代/v, 24/m, 口/n, 交換機/n, 等/udeng, 技術性/n, 器件/n, 的/ude1, 安裝/v, 工做/vn] [隨着/p, 頁遊/nz, 興起/v, 到/v, 如今/t, 的/ude1, 頁遊/nz, 繁盛/a, ,/w, 依賴於/v, 存檔/vi, 進行/vn, 邏輯/n, 判斷/v, 的/ude1, 設計/vn, 減小/v, 了/ule, ,/w, 但/c, 這/rzv, 塊/q, 也/d, 不能/v, 徹底/ad, 忽略/v, 掉/v, 。/w] '''
說明
算法詳解
# 關鍵詞提取 document = "水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發佈會上透露," \ "根據剛剛完成了水資源管理制度的考覈,有部分省接近了紅線的指標," \ "有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水項目進行區域的限批," \ "嚴格地進行水資源論證和取水許可的批准。" print(HanLP.extractKeyword(document, 2)) # [水資源, 陳明忠] # 自動摘要 print(HanLP.extractSummary(document, 3)) # [嚴格地進行水資源論證和取水許可的批准, 水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發佈會上透露, 有部分省超過紅線的指標]
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_keyword(content): """ 關鍵詞提取 [程序員, 程序, 分爲, 人員, 軟件] """ TextRankKeyword = JClass("com.hankcs.hanlp.summary.TextRankKeyword") keyword_list = HanLP.extractKeyword(content, 5) print(keyword_list) if __name__ == "__main__": content = ( "程序員(英文Programmer)是從事程序開發、維護的專業人員。" "通常將程序員分爲程序設計人員和程序編碼人員," "但二者的界限並不很是清楚,特別是在中國。" "軟件從業人員分爲初級程序員、高級程序員、系統" "分析員和項目經理四大類。") demo_keyword(content)
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_summary(document): """自動摘要 [嚴格地進行水資源論證和取水許可的批准, 水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發佈會上透露, 有部分省超過紅線的指標] """ TextRankSentence = JClass("com.hankcs.hanlp.summary.TextRankSentence") sentence_list = HanLP.extractSummary(document, 3) print(sentence_list) if __name__ == "__main__": document = '''水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發佈會上透露, 根據剛剛完成了水資源管理制度的考覈,有部分省接近了紅線的指標, 有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水項目進行區域的限批, 嚴格地進行水資源論證和取水許可的批准。 ''' demo_summary(document)
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_phrase_extractor(text): """ 短語提取 [算法工程師, 算法處理, 一維信息, 算法研究, 信號處理] """ phrase_list = HanLP.extractPhrase(text, 5) print(phrase_list) if __name__ == "__main__": text = ''' 算法工程師 算法(Algorithm)是一系列解決問題的清晰指令,也就是說,可以對必定規範的輸入,在有限時間內得到所要求的輸出。 若是一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不一樣的算法可能用不一樣的時間、 空間或效率來完成一樣的任務。一個算法的優劣能夠用空間複雜度與時間複雜度來衡量。算法工程師就是利用算法處理事物的人。 1職位簡介 算法工程師是一個很是高端的職位; 專業要求:計算機、電子、通訊、數學等相關專業; 學歷要求:本科及其以上的學歷,大多數是碩士學歷及其以上; 語言要求:英語要求是熟練,基本上能閱讀國外專業書刊; 必須掌握計算機相關知識,熟練使用仿真工具MATLAB等,必須會一門編程語言。 2研究方向 視頻算法工程師、圖像處理算法工程師、音頻算法工程師 通訊基帶算法工程師 3目前國內外情況 目前國內從事算法研究的工程師很多,可是高級算法工程師卻不多,是一個很是緊缺的專業工程師。 算法工程師根據研究領域來分主要有音頻/視頻算法處理、圖像技術方面的二維信息算法處理和通訊物理層、 雷達信號處理、生物醫學信號處理等領域的一維信息算法處理。 在計算機音視頻和圖形圖像技術等二維信息算法處理方面目前比較先進的視頻處理算法:機器視覺成爲此類算法研究的核心; 另外還有2D轉3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),運動估計運動補償算法 (Motion estimation/Motion Compensation),去噪算法(Noise Reduction),縮放算法(scaling), 銳化處理算法(Sharpness),超分辨率算法(Super Resolution) 手勢識別(gesture recognition) 人臉識別(face recognition)。 在通訊物理層等一維信息領域目前經常使用的算法:無線領域的RRM、RTT,傳送領域的調製解調、信道均衡、信號檢測、網絡優化、信號分解等。 另外數據挖掘、互聯網搜索算法也成爲當今的熱門方向。 算法工程師逐漸往人工智能方向發展。 ''' demo_phrase_extractor(text)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_pinyin(): """ 漢字轉拼音 原文, 重載不是重任! 拼音(數字音調), [chong2, zai3, bu2, shi4, zhong4, ren4, none5] 拼音(符號音調), chóng, zǎi, bú, shì, zhòng, rèn, none, 拼音(無音調), chong, zai, bu, shi, zhong, ren, none, 聲調, 2, 3, 2, 4, 4, 4, 5, 聲母, ch, z, b, sh, zh, r, none, 韻母, ong, ai, u, i, ong, en, none, 輸入法頭, ch, z, b, sh, zh, r, none, jie zhi none none none none nian none jie zhi 2 0 1 2 nian , """ Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin") text = "重載不是重任!" pinyin_list = HanLP.convertToPinyinList(text) print("原文,", end=" ") print(text) print("拼音(數字音調),", end=" ") print(pinyin_list) print("拼音(符號音調),", end=" ") for pinyin in pinyin_list: print("%s," % pinyin.getPinyinWithToneMark(), end=" ") print("\n拼音(無音調),", end=" ") for pinyin in pinyin_list: print("%s," % pinyin.getPinyinWithoutTone(), end=" ") print("\n聲調,", end=" ") for pinyin in pinyin_list: print("%s," % pinyin.getTone(), end=" ") print("\n聲母,", end=" ") for pinyin in pinyin_list: print("%s," % pinyin.getShengmu(), end=" ") print("\n韻母,", end=" ") for pinyin in pinyin_list: print("%s," % pinyin.getYunmu(), end=" ") print("\n輸入法頭,", end=" ") for pinyin in pinyin_list: print("%s," % pinyin.getHead(), end=" ") print() # 拼音轉換可選保留無拼音的原字符 print(HanLP.convertToPinyinString("截至2012年,", " ", True)) print(HanLP.convertToPinyinString("截至2012年,", " ", False)) if __name__ == "__main__": demo_pinyin()
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_pinyin_to_chinese(): """ HanLP中的數據結構和接口是靈活的,組合這些接口,能夠本身創造新功能 [renmenrenweiyalujiangbujian/null, lvse/[濾色, 綠色]] """ AhoCorasickDoubleArrayTrie = JClass( "com.hankcs.hanlp.collection.AhoCorasick.AhoCorasickDoubleArrayTrie") StringDictionary = JClass( "com.hankcs.hanlp.corpus.dictionary.StringDictionary") CommonAhoCorasickDoubleArrayTrieSegment = JClass( "com.hankcs.hanlp.seg.Other.CommonAhoCorasickDoubleArrayTrieSegment") CommonAhoCorasickSegmentUtil = JClass( "com.hankcs.hanlp.seg.Other.CommonAhoCorasickSegmentUtil") Config = JClass("com.hankcs.hanlp.HanLP$Config") TreeMap = JClass("java.util.TreeMap") TreeSet = JClass("java.util.TreeSet") dictionary = StringDictionary() dictionary.load(Config.PinyinDictionaryPath) entry = {} m_map = TreeMap() for entry in dictionary.entrySet(): pinyins = entry.getValue().replace("[\\d,]", "") words = m_map.get(pinyins) if words is None: words = TreeSet() m_map.put(pinyins, words) words.add(entry.getKey()) words = TreeSet() words.add("綠色") words.add("濾色") m_map.put("lvse", words) segment = CommonAhoCorasickDoubleArrayTrieSegment(m_map) print(segment.segment("renmenrenweiyalujiangbujianlvse")) if __name__ == "__main__": demo_pinyin_to_chinese()
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_traditional_chinese2simplified_chinese(): """ 將簡繁轉換作到極致 「以後等你當上皇后,就能買草莓慶祝了」。發現一根白頭髮 憑藉筆記本電腦寫程序HanLP hankcs在臺灣寫程式碼 hankcs在臺灣寫代碼 hankcs在香港寫代碼 hankcs在香港寫代碼 hankcs在臺灣寫程式碼 hankcs在香港寫代碼 hankcs在臺灣寫程式碼 hankcs在臺灣寫代碼 hankcs在臺灣寫代碼 hankcs在臺灣寫代碼 """ print(HanLP.convertToTraditionalChinese("「之後等你當上皇后,就能買草莓慶祝了」。發現一根白頭髮")) print(HanLP.convertToSimplifiedChinese("憑藉筆記簿型電腦寫程式HanLP")) # 簡體轉檯灣繁體 print(HanLP.s2tw("hankcs在臺灣寫代碼")) # 臺灣繁體轉簡體 print(HanLP.tw2s("hankcs在臺灣寫程式碼")) # 簡體轉香港繁體 print(HanLP.s2hk("hankcs在香港寫代碼")) # 香港繁體轉簡體 print(HanLP.hk2s("hankcs在香港寫代碼")) # 香港繁體轉檯灣繁體 print(HanLP.hk2tw("hankcs在臺灣寫代碼")) # 臺灣繁體轉香港繁體 print(HanLP.tw2hk("hankcs在香港寫程式碼")) # 香港/臺灣繁體和HanLP標準繁體的互轉 print(HanLP.t2tw("hankcs在臺灣寫代碼")) print(HanLP.t2hk("hankcs在臺灣寫代碼")) print(HanLP.tw2t("hankcs在臺灣寫程式碼")) print(HanLP.hk2t("hankcs在臺灣寫代碼")) if __name__ == "__main__": demo_traditional_chinese2simplified_chinese()
說明
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_suggester(): """ 文本推薦(句子級別,從一系列句子中挑出與輸入句子最類似的那一個) [威廉王子發表演說 呼籲保護野生動物, 英報告說空氣污染帶來「公共健康危機」] [英報告說空氣污染帶來「公共健康危機」] [《時代》年度人物最終入圍名單出爐 普京馬雲入選] [魅惑天后許佳慧不愛「預謀」 獨唱《許某某》] """ Suggester = JClass("com.hankcs.hanlp.suggest.Suggester") suggester = Suggester() title_array = [ "威廉王子發表演說 呼籲保護野生動物", "魅惑天后許佳慧不愛「預謀」 獨唱《許某某》", "《時代》年度人物最終入圍名單出爐 普京馬雲入選", "「黑格比」橫掃菲:菲吸收「海燕」經驗及早疏散", "日本保密法將正式生效 日媒指其損害國民知情權", "英報告說空氣污染帶來「公共健康危機」" ] for title in title_array: suggester.addSentence(title) print(suggester.suggest("陳述", 2)) # 語義 print(suggester.suggest("危機公關", 1)) # 字符 print(suggester.suggest("mayun", 1)) # 拼音 print(suggester.suggest("徐家彙", 1)) # 拼音 if __name__ == "__main__": demo_suggester()
說明
# -*- coding:utf-8 -*- from pyhanlp import * def demo_word_distance(): """ 語義距離 詞A 詞B 語義距離 語義類似度 <BLANKLINE> 香蕉 香蕉 0 1.0000000000 香蕉 蘋果 19980 0.9999997311 香蕉 白菜 2628369 0.9999646244 香蕉 水果 32967 0.9999995563 香蕉 蔬菜 2630367 0.9999645975 香蕉 自行車 1854515628 0.9750398066 香蕉 公交車 1854535619 0.9750395376 香蕉 飛機 1857307833 0.9750022259 香蕉 買 39729797433 0.4652709248 香蕉 賣 39729897333 0.4652695802 香蕉 購入 39729797433 0.4652709248 香蕉 新年 4981789224 0.9329493801 香蕉 春節 4981789224 0.9329493801 香蕉 丟失 46784535633 0.3703201856 香蕉 補辦 39205230527 0.4723311464 香蕉 辦理 39205222533 0.4723312540 香蕉 送給 40831595534 0.4504416652 香蕉 尋找 41124601233 0.4464980592 香蕉 孩子 6734891367 0.9093541255 香蕉 教室 1548030420 0.9791648353 香蕉 教師 7516908567 0.8988288432 香蕉 會計 7547972472 0.8984107496 蘋果 香蕉 19980 0.9999997311 蘋果 蘋果 0 1.0000000000 蘋果 白菜 2608389 0.9999648933 蘋果 水果 12987 0.9999998252 蘋果 蔬菜 2610387 0.9999648664 蘋果 自行車 1854535608 0.9750395377 蘋果 公交車 1854555599 0.9750392686 蘋果 飛機 1857327813 0.9750019570 蘋果 買 39729817413 0.4652706559 蘋果 賣 39729917313 0.4652693113 蘋果 購入 39729817413 0.4652706559 蘋果 新年 4981809204 0.9329491112 蘋果 春節 4981809204 0.9329491112 蘋果 丟失 46784555613 0.3703199167 蘋果 補辦 39205250507 0.4723308775 蘋果 辦理 39205242513 0.4723309851 蘋果 送給 40831615514 0.4504413963 蘋果 尋找 41124621213 0.4464977903 蘋果 孩子 6734871387 0.9093543944 蘋果 教室 1548050400 0.9791645663 蘋果 教師 7516888587 0.8988291121 蘋果 會計 7547952492 0.8984110185 白菜 香蕉 2628369 0.9999646244 白菜 蘋果 2608389 0.9999648933 白菜 白菜 0 1.0000000000 白菜 水果 2595402 0.9999650681 白菜 蔬菜 1998 0.9999999731 白菜 自行車 1857143997 0.9750044310 白菜 公交車 1857163988 0.9750041620 白菜 飛機 1859936202 0.9749668503 白菜 買 39732425802 0.4652355492 白菜 賣 39732525702 0.4652342046 白菜 購入 39732425802 0.4652355492 白菜 新年 4984417593 0.9329140045 白菜 春節 4984417593 0.9329140045 白菜 丟失 46787164002 0.3702848100 白菜 補辦 39207858896 0.4722957708 白菜 辦理 39207850902 0.4722958784 白菜 送給 40834223903 0.4504062896 白菜 尋找 41127229602 0.4464626836 白菜 孩子 6732262998 0.9093895011 白菜 教室 1550658789 0.9791294597 白菜 教師 7514280198 0.8988642188 白菜 會計 7545344103 0.8984461252 水果 香蕉 32967 0.9999995563 水果 蘋果 12987 0.9999998252 水果 白菜 2595402 0.9999650681 水果 水果 0 1.0000000000 水果 蔬菜 2597400 0.9999650412 水果 自行車 1854548595 0.9750393629 水果 公交車 1854568586 0.9750390939 水果 飛機 1857340800 0.9750017822 水果 買 39729830400 0.4652704811 水果 賣 39729930300 0.4652691365 水果 購入 39729830400 0.4652704811 水果 新年 4981822191 0.9329489364 水果 春節 4981822191 0.9329489364 水果 丟失 46784568600 0.3703197419 水果 補辦 39205263494 0.4723307027 水果 辦理 39205255500 0.4723308103 水果 送給 40831628501 0.4504412215 水果 尋找 41124634200 0.4464976155 水果 孩子 6734858400 0.9093545692 水果 教室 1548063387 0.9791643915 水果 教師 7516875600 0.8988292869 水果 會計 7547939505 0.8984111933 蔬菜 香蕉 2630367 0.9999645975 蔬菜 蘋果 2610387 0.9999648664 蔬菜 白菜 1998 0.9999999731 蔬菜 水果 2597400 0.9999650412 蔬菜 蔬菜 0 1.0000000000 蔬菜 自行車 1857145995 0.9750044041 蔬菜 公交車 1857165986 0.9750041351 蔬菜 飛機 1859938200 0.9749668234 蔬菜 買 39732427800 0.4652355223 蔬菜 賣 39732527700 0.4652341777 蔬菜 購入 39732427800 0.4652355223 蔬菜 新年 4984419591 0.9329139777 蔬菜 春節 4984419591 0.9329139777 蔬菜 丟失 46787166000 0.3702847831 蔬菜 補辦 39207860894 0.4722957440 蔬菜 辦理 39207852900 0.4722958515 蔬菜 送給 40834225901 0.4504062627 蔬菜 尋找 41127231600 0.4464626567 蔬菜 孩子 6732261000 0.9093895280 蔬菜 教室 1550660787 0.9791294328 蔬菜 教師 7514278200 0.8988642457 蔬菜 會計 7545342105 0.8984461521 自行車 香蕉 1854515628 0.9750398066 自行車 蘋果 1854535608 0.9750395377 自行車 白菜 1857143997 0.9750044310 自行車 水果 1854548595 0.9750393629 自行車 蔬菜 1857145995 0.9750044041 自行車 自行車 0 1.0000000000 自行車 公交車 19991 0.9999997309 自行車 飛機 2792205 0.9999624193 自行車 買 37875281805 0.4902311182 自行車 賣 37875381705 0.4902297736 自行車 購入 37875281805 0.4902311182 自行車 新年 3127273596 0.9579095735 自行車 春節 3127273596 0.9579095735 自行車 丟失 44930020005 0.3952803790 自行車 補辦 37350714899 0.4972913398 自行車 辦理 37350706905 0.4972914474 自行車 送給 38977079906 0.4754018586 自行車 尋找 39270085605 0.4714582526 自行車 孩子 8589406995 0.8843939321 自行車 教室 306485208 0.9958749714 自行車 教師 9371424195 0.8738686498 自行車 會計 9402488100 0.8734505562 公交車 香蕉 1854535619 0.9750395376 公交車 蘋果 1854555599 0.9750392686 公交車 白菜 1857163988 0.9750041620 公交車 水果 1854568586 0.9750390939 公交車 蔬菜 1857165986 0.9750041351 公交車 自行車 19991 0.9999997309 公交車 公交車 0 1.0000000000 公交車 飛機 2772214 0.9999626884 公交車 買 37875261814 0.4902313872 公交車 賣 37875361714 0.4902300427 公交車 購入 37875261814 0.4902313872 公交車 新年 3127253605 0.9579098426 公交車 春節 3127253605 0.9579098426 公交車 丟失 44930000014 0.3952806480 公交車 補辦 37350694908 0.4972916089 公交車 辦理 37350686914 0.4972917165 公交車 送給 38977059915 0.4754021276 公交車 尋找 39270065614 0.4714585217 公交車 孩子 8589426986 0.8843936631 公交車 教室 306505199 0.9958747023 公交車 教師 9371444186 0.8738683807 公交車 會計 9402508091 0.8734502872 飛機 香蕉 1857307833 0.9750022259 飛機 蘋果 1857327813 0.9750019570 飛機 白菜 1859936202 0.9749668503 飛機 水果 1857340800 0.9750017822 飛機 蔬菜 1859938200 0.9749668234 飛機 自行車 2792205 0.9999624193 飛機 公交車 2772214 0.9999626884 飛機 飛機 0 1.0000000000 飛機 買 37872489600 0.4902686988 飛機 賣 37872589500 0.4902673543 飛機 購入 37872489600 0.4902686988 飛機 新年 3124481391 0.9579471542 飛機 春節 3124481391 0.9579471542 飛機 丟失 44927227800 0.3953179597 飛機 補辦 37347922694 0.4973289205 飛機 辦理 37347914700 0.4973290281 飛機 送給 38974287701 0.4754394393 飛機 尋找 39267293400 0.4714958333 飛機 孩子 8592199200 0.8843563514 飛機 教室 309277413 0.9958373907 飛機 教師 9374216400 0.8738310691 飛機 會計 9405280305 0.8734129755 買 香蕉 39729797433 0.4652709248 買 蘋果 39729817413 0.4652706559 買 白菜 39732425802 0.4652355492 買 水果 39729830400 0.4652704811 買 蔬菜 39732427800 0.4652355223 買 自行車 37875281805 0.4902311182 買 公交車 37875261814 0.4902313872 買 飛機 37872489600 0.4902686988 買 買 0 1.0000000000 買 賣 99900 0.9999986554 買 購入 0 1.0000000000 買 新年 34748008209 0.5323215446 買 春節 34748008209 0.5323215446 買 丟失 7054738200 0.9050492608 買 補辦 524566906 0.9929397783 買 辦理 524574900 0.9929396707 買 送給 1101798101 0.9851707404 買 尋找 1394803800 0.9812271344 買 孩子 46464688800 0.3746250503 買 教室 38181767013 0.4861060895 買 教師 47246706000 0.3640997680 買 會計 47277769905 0.3636816744 賣 香蕉 39729897333 0.4652695802 賣 蘋果 39729917313 0.4652693113 賣 白菜 39732525702 0.4652342046 賣 水果 39729930300 0.4652691365 賣 蔬菜 39732527700 0.4652341777 賣 自行車 37875381705 0.4902297736 賣 公交車 37875361714 0.4902300427 賣 飛機 37872589500 0.4902673543 賣 買 99900 0.9999986554 賣 賣 0 1.0000000000 賣 購入 99900 0.9999986554 賣 新年 34748108109 0.5323202001 賣 春節 34748108109 0.5323202001 賣 丟失 7054638300 0.9050506054 賣 補辦 524666806 0.9929384338 賣 辦理 524674800 0.9929383262 賣 送給 1101698201 0.9851720850 賣 尋找 1394703900 0.9812284790 賣 孩子 46464788700 0.3746237057 賣 教室 38181866913 0.4861047450 賣 教師 47246805900 0.3640984234 賣 會計 47277869805 0.3636803298 購入 香蕉 39729797433 0.4652709248 購入 蘋果 39729817413 0.4652706559 購入 白菜 39732425802 0.4652355492 購入 水果 39729830400 0.4652704811 購入 蔬菜 39732427800 0.4652355223 購入 自行車 37875281805 0.4902311182 購入 公交車 37875261814 0.4902313872 購入 飛機 37872489600 0.4902686988 購入 買 0 1.0000000000 購入 賣 99900 0.9999986554 購入 購入 0 1.0000000000 購入 新年 34748008209 0.5323215446 購入 春節 34748008209 0.5323215446 購入 丟失 7054738200 0.9050492608 購入 補辦 524566906 0.9929397783 購入 辦理 524574900 0.9929396707 購入 送給 1101798101 0.9851707404 購入 尋找 1394803800 0.9812271344 購入 孩子 46464688800 0.3746250503 購入 教室 38181767013 0.4861060895 購入 教師 47246706000 0.3640997680 購入 會計 47277769905 0.3636816744 新年 香蕉 4981789224 0.9329493801 新年 蘋果 4981809204 0.9329491112 新年 白菜 4984417593 0.9329140045 新年 水果 4981822191 0.9329489364 新年 蔬菜 4984419591 0.9329139777 新年 自行車 3127273596 0.9579095735 新年 公交車 3127253605 0.9579098426 新年 飛機 3124481391 0.9579471542 新年 買 34748008209 0.5323215446 新年 賣 34748108109 0.5323202001 新年 購入 34748008209 0.5323215446 新年 新年 0 1.0000000000 新年 春節 0 1.0000000000 新年 丟失 41802746409 0.4373708055 新年 補辦 34223441303 0.5393817663 新年 辦理 34223433309 0.5393818739 新年 送給 35849806310 0.5174922850 新年 尋找 36142812009 0.5135486791 新年 孩子 11716680591 0.8423035056 新年 教室 3433758804 0.9537845449 新年 教師 12498697791 0.8317782233 新年 會計 12529761696 0.8313601297 春節 香蕉 4981789224 0.9329493801 春節 蘋果 4981809204 0.9329491112 春節 白菜 4984417593 0.9329140045 春節 水果 4981822191 0.9329489364 春節 蔬菜 4984419591 0.9329139777 春節 自行車 3127273596 0.9579095735 春節 公交車 3127253605 0.9579098426 春節 飛機 3124481391 0.9579471542 春節 買 34748008209 0.5323215446 春節 賣 34748108109 0.5323202001 春節 購入 34748008209 0.5323215446 春節 新年 0 1.0000000000 春節 春節 0 1.0000000000 春節 丟失 41802746409 0.4373708055 春節 補辦 34223441303 0.5393817663 春節 辦理 34223433309 0.5393818739 春節 送給 35849806310 0.5174922850 春節 尋找 36142812009 0.5135486791 春節 孩子 11716680591 0.8423035056 春節 教室 3433758804 0.9537845449 春節 教師 12498697791 0.8317782233 春節 會計 12529761696 0.8313601297 丟失 香蕉 46784535633 0.3703201856 丟失 蘋果 46784555613 0.3703199167 丟失 白菜 46787164002 0.3702848100 丟失 水果 46784568600 0.3703197419 丟失 蔬菜 46787166000 0.3702847831 丟失 自行車 44930020005 0.3952803790 丟失 公交車 44930000014 0.3952806480 丟失 飛機 44927227800 0.3953179597 丟失 買 7054738200 0.9050492608 丟失 賣 7054638300 0.9050506054 丟失 購入 7054738200 0.9050492608 丟失 新年 41802746409 0.4373708055 丟失 春節 41802746409 0.4373708055 丟失 丟失 0 1.0000000000 丟失 補辦 7579305106 0.8979890392 丟失 辦理 7579313100 0.8979889316 丟失 送給 5952940099 0.9198785204 丟失 尋找 5659934400 0.9238221264 丟失 孩子 53519427000 0.2796743111 丟失 教室 45236505213 0.3911553504 丟失 教師 54301444200 0.2691490288 丟失 會計 54332508105 0.2687309352 補辦 香蕉 39205230527 0.4723311464 補辦 蘋果 39205250507 0.4723308775 補辦 白菜 39207858896 0.4722957708 補辦 水果 39205263494 0.4723307027 補辦 蔬菜 39207860894 0.4722957440 補辦 自行車 37350714899 0.4972913398 補辦 公交車 37350694908 0.4972916089 補辦 飛機 37347922694 0.4973289205 補辦 買 524566906 0.9929397783 補辦 賣 524666806 0.9929384338 補辦 購入 524566906 0.9929397783 補辦 新年 34223441303 0.5393817663 補辦 春節 34223441303 0.5393817663 補辦 丟失 7579305106 0.8979890392 補辦 補辦 0 1.0000000000 補辦 辦理 7994 0.9999998924 補辦 送給 1626365007 0.9781105187 補辦 尋找 1919370706 0.9741669128 補辦 孩子 45940121894 0.3816852719 補辦 教室 37657200107 0.4931663112 補辦 教師 46722139094 0.3711599896 補辦 會計 46753202999 0.3707418960 辦理 香蕉 39205222533 0.4723312540 辦理 蘋果 39205242513 0.4723309851 辦理 白菜 39207850902 0.4722958784 辦理 水果 39205255500 0.4723308103 辦理 蔬菜 39207852900 0.4722958515 辦理 自行車 37350706905 0.4972914474 辦理 公交車 37350686914 0.4972917165 辦理 飛機 37347914700 0.4973290281 辦理 買 524574900 0.9929396707 辦理 賣 524674800 0.9929383262 辦理 購入 524574900 0.9929396707 辦理 新年 34223433309 0.5393818739 辦理 春節 34223433309 0.5393818739 辦理 丟失 7579313100 0.8979889316 辦理 補辦 7994 0.9999998924 辦理 辦理 0 1.0000000000 辦理 送給 1626373001 0.9781104112 辦理 尋找 1919378700 0.9741668052 辦理 孩子 45940113900 0.3816853795 辦理 教室 37657192113 0.4931664188 辦理 教師 46722131100 0.3711600972 辦理 會計 46753195005 0.3707420036 送給 香蕉 40831595534 0.4504416652 送給 蘋果 40831615514 0.4504413963 送給 白菜 40834223903 0.4504062896 送給 水果 40831628501 0.4504412215 送給 蔬菜 40834225901 0.4504062627 送給 自行車 38977079906 0.4754018586 送給 公交車 38977059915 0.4754021276 送給 飛機 38974287701 0.4754394393 送給 買 1101798101 0.9851707404 送給 賣 1101698201 0.9851720850 送給 購入 1101798101 0.9851707404 送給 新年 35849806310 0.5174922850 送給 春節 35849806310 0.5174922850 送給 丟失 5952940099 0.9198785204 送給 補辦 1626365007 0.9781105187 送給 辦理 1626373001 0.9781104112 送給 送給 0 1.0000000000 送給 尋找 293005699 0.9960563940 送給 孩子 47566486901 0.3597957907 送給 教室 39283565114 0.4712768299 送給 教師 48348504101 0.3492705084 送給 會計 48379568006 0.3488524148 尋找 香蕉 41124601233 0.4464980592 尋找 蘋果 41124621213 0.4464977903 尋找 白菜 41127229602 0.4464626836 尋找 水果 41124634200 0.4464976155 尋找 蔬菜 41127231600 0.4464626567 尋找 自行車 39270085605 0.4714582526 尋找 公交車 39270065614 0.4714585217 尋找 飛機 39267293400 0.4714958333 尋找 買 1394803800 0.9812271344 尋找 賣 1394703900 0.9812284790 尋找 購入 1394803800 0.9812271344 尋找 新年 36142812009 0.5135486791 尋找 春節 36142812009 0.5135486791 尋找 丟失 5659934400 0.9238221264 尋找 補辦 1919370706 0.9741669128 尋找 辦理 1919378700 0.9741668052 尋找 送給 293005699 0.9960563940 尋找 尋找 0 1.0000000000 尋找 孩子 47859492600 0.3558521847 尋找 教室 39576570813 0.4673332240 尋找 教師 48641509800 0.3453269024 尋找 會計 48672573705 0.3449088088 孩子 香蕉 6734891367 0.9093541255 孩子 蘋果 6734871387 0.9093543944 孩子 白菜 6732262998 0.9093895011 孩子 水果 6734858400 0.9093545692 孩子 蔬菜 6732261000 0.9093895280 孩子 自行車 8589406995 0.8843939321 孩子 公交車 8589426986 0.8843936631 孩子 飛機 8592199200 0.8843563514 孩子 買 46464688800 0.3746250503 孩子 賣 46464788700 0.3746237057 孩子 購入 46464688800 0.3746250503 孩子 新年 11716680591 0.8423035056 孩子 春節 11716680591 0.8423035056 孩子 丟失 53519427000 0.2796743111 孩子 補辦 45940121894 0.3816852719 孩子 辦理 45940113900 0.3816853795 孩子 送給 47566486901 0.3597957907 孩子 尋找 47859492600 0.3558521847 孩子 孩子 0 1.0000000000 孩子 教室 8282921787 0.8885189607 孩子 教師 782017200 0.9894747177 孩子 會計 813081105 0.9890566241 教室 香蕉 1548030420 0.9791648353 教室 蘋果 1548050400 0.9791645663 教室 白菜 1550658789 0.9791294597 教室 水果 1548063387 0.9791643915 教室 蔬菜 1550660787 0.9791294328 教室 自行車 306485208 0.9958749714 教室 公交車 306505199 0.9958747023 教室 飛機 309277413 0.9958373907 教室 買 38181767013 0.4861060895 教室 賣 38181866913 0.4861047450 教室 購入 38181767013 0.4861060895 教室 新年 3433758804 0.9537845449 教室 春節 3433758804 0.9537845449 教室 丟失 45236505213 0.3911553504 教室 補辦 37657200107 0.4931663112 教室 辦理 37657192113 0.4931664188 教室 送給 39283565114 0.4712768299 教室 尋找 39576570813 0.4673332240 教室 孩子 8282921787 0.8885189607 教室 教室 0 1.0000000000 教室 教師 9064938987 0.8779936784 教室 會計 9096002892 0.8775755849 教師 香蕉 7516908567 0.8988288432 教師 蘋果 7516888587 0.8988291121 教師 白菜 7514280198 0.8988642188 教師 水果 7516875600 0.8988292869 教師 蔬菜 7514278200 0.8988642457 教師 自行車 9371424195 0.8738686498 教師 公交車 9371444186 0.8738683807 教師 飛機 9374216400 0.8738310691 教師 買 47246706000 0.3640997680 教師 賣 47246805900 0.3640984234 教師 購入 47246706000 0.3640997680 教師 新年 12498697791 0.8317782233 教師 春節 12498697791 0.8317782233 教師 丟失 54301444200 0.2691490288 教師 補辦 46722139094 0.3711599896 教師 辦理 46722131100 0.3711600972 教師 送給 48348504101 0.3492705084 教師 尋找 48641509800 0.3453269024 教師 孩子 782017200 0.9894747177 教師 教室 9064938987 0.8779936784 教師 教師 0 1.0000000000 教師 會計 31063905 0.9995819064 會計 香蕉 7547972472 0.8984107496 會計 蘋果 7547952492 0.8984110185 會計 白菜 7545344103 0.8984461252 會計 水果 7547939505 0.8984111933 會計 蔬菜 7545342105 0.8984461521 會計 自行車 9402488100 0.8734505562 會計 公交車 9402508091 0.8734502872 會計 飛機 9405280305 0.8734129755 會計 買 47277769905 0.3636816744 會計 賣 47277869805 0.3636803298 會計 購入 47277769905 0.3636816744 會計 新年 12529761696 0.8313601297 會計 春節 12529761696 0.8313601297 會計 丟失 54332508105 0.2687309352 會計 補辦 46753202999 0.3707418960 會計 辦理 46753195005 0.3707420036 會計 送給 48379568006 0.3488524148 會計 尋找 48672573705 0.3449088088 會計 孩子 813081105 0.9890566241 會計 教室 9096002892 0.8775755849 會計 教師 31063905 0.9995819064 會計 會計 0 1.0000000000 """ CoreSynonymDictionary = JClass("com.hankcs.hanlp.dictionary.CoreSynonymDictionary") word_array = [ "香蕉", "蘋果", "白菜", "水果", "蔬菜", "自行車", "公交車", "飛機", "買", "賣", "購入", "新年", "春節", "丟失", "補辦", "辦理", "送給", "尋找", "孩子", "教室", "教師", "會計", ] print("%-5s\t%-5s\t%-10s\t%-5s\n" % ("詞A", "詞B", "語義距離", "語義類似度")) for a in word_array: for b in word_array: print("%-5s\t%-5s\t%-15d\t%-5.10f" % (a, b, CoreSynonymDictionary.distance(a, b), CoreSynonymDictionary.similarity(a, b))) if __name__ == "__main__": demo_word_distance()
命令爲hanlp parse,一樣支持交互模式和重定向:命令爲hanlp parse,一樣支持交互模式和重定向:
說明
算法詳解
$ hanlp parse <<< '徐先生還具體幫助他肯定了把畫雄鷹、松鼠和麻雀做爲主攻目標。' 1 徐先生 徐先生 nh nr _ 4 主謂關係 _ _ 2 還 還 d d _ 4 狀中結構 _ _ 3 具體 具體 a a _ 4 狀中結構 _ _ 4 幫助 幫助 v v _ 0 核心關係 _ _ 5 他 他 r rr _ 4 兼語 _ _ 6 肯定 肯定 v v _ 4 動賓關係 _ _ 7 了 了 u ule _ 6 右附加關係 _ _ 8 把 把 p pba _ 15 狀中結構 _ _ 9 畫 畫 v v _ 8 介賓關係 _ _ 10 雄鷹 雄鷹 n n _ 9 動賓關係 _ _ 11 、 、 wp w _ 12 標點符號 _ _ 12 松鼠 松鼠 n n _ 10 並列關係 _ _ 13 和 和 c cc _ 14 左附加關係 _ _ 14 麻雀 麻雀 n n _ 10 並列關係 _ _ 15 做爲 做爲 p p _ 6 動賓關係 _ _ 16 主攻 主攻 v vn _ 17 定中關係 _ _ 17 目標 目標 n n _ 15 動賓關係 _ _ 18 。 。 wp w _ 4 標點符號 _ _
Python中實現
# 依存句法分析 print(HanLP.parseDependency("徐先生還具體幫助他肯定了把畫雄鷹、松鼠和麻雀做爲主攻目標。")) ''' 1 徐先生 徐先生 nh nr _ 4 主謂關係 _ _ 2 還 還 d d _ 4 狀中結構 _ _ 3 具體 具體 a ad _ 4 狀中結構 _ _ 4 幫助 幫助 v v _ 0 核心關係 _ _ 5 他 他 r r _ 4 兼語 _ _ 6 肯定 肯定 v v _ 4 動賓關係 _ _ 7 了 了 u u _ 6 右附加關係 _ _ 8 把 把 p p _ 15 狀中結構 _ _ 9 畫 畫 v v _ 8 介賓關係 _ _ 10 雄鷹 雄鷹 n n _ 9 動賓關係 _ _ 11 、 、 wp w _ 12 標點符號 _ _ 12 松鼠 松鼠 n n _ 10 並列關係 _ _ 13 和 和 c c _ 14 左附加關係 _ _ 14 麻雀 麻雀 n n _ 10 並列關係 _ _ 15 做爲 做爲 v v _ 6 動賓關係 _ _ 16 主攻 主攻 v vn _ 17 定中關係 _ _ 17 目標 目標 n n _ 15 動賓關係 _ _ 18 。 。 wp w _ 4 標點符號 _ _ '''
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_dependency_parser(): """ 依存句法分析(CRF句法模型須要-Xms512m -Xmx512m -Xmn256m, MaxEnt和神經網絡句法模型須要-Xms1g -Xmx1g -Xmn512m) 徐先生 --(主謂關係)--> 幫助 還 --(狀中結構)--> 幫助 具體 --(狀中結構)--> 幫助 幫助 --(核心關係)--> ##核心## 他 --(兼語)--> 幫助 肯定 --(動賓關係)--> 幫助 了 --(右附加關係)--> 肯定 把 --(狀中結構)--> 做爲 畫 --(介賓關係)--> 把 雄鷹 --(動賓關係)--> 畫 、 --(標點符號)--> 松鼠 松鼠 --(並列關係)--> 雄鷹 和 --(左附加關係)--> 麻雀 麻雀 --(並列關係)--> 雄鷹 做爲 --(動賓關係)--> 肯定 主攻 --(定中關係)--> 目標 目標 --(動賓關係)--> 做爲 。 --(標點符號)--> 幫助 <BLANKLINE> 徐先生 --(主謂關係)--> 幫助 還 --(狀中結構)--> 幫助 具體 --(狀中結構)--> 幫助 幫助 --(核心關係)--> ##核心## 他 --(兼語)--> 幫助 肯定 --(動賓關係)--> 幫助 了 --(右附加關係)--> 肯定 把 --(狀中結構)--> 做爲 畫 --(介賓關係)--> 把 雄鷹 --(動賓關係)--> 畫 、 --(標點符號)--> 松鼠 松鼠 --(並列關係)--> 雄鷹 和 --(左附加關係)--> 麻雀 麻雀 --(並列關係)--> 雄鷹 做爲 --(動賓關係)--> 肯定 主攻 --(定中關係)--> 目標 目標 --(動賓關係)--> 做爲 。 --(標點符號)--> 幫助 <BLANKLINE> 麻雀 --(並列關係)--> 雄鷹 --(動賓關係)--> 畫 --(介賓關係)--> 把 --(狀中結構)--> 做爲 --(動賓關係)--> 肯定 --(動賓關係)--> 幫助 --(核心關係)--> ##核心## """ sentence = HanLP.parseDependency("徐先生還具體幫助他肯定了把畫雄鷹、松鼠和麻雀做爲主攻目標。") for word in sentence.iterator(): # 經過dir()能夠查看sentence的方法 print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA)) print() # 也能夠直接拿到數組,任意順序或逆序遍歷 word_array = sentence.getWordArray() for word in word_array: print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA)) print() # 還能夠直接遍歷子樹,從某棵子樹的某個節點一路遍歷到虛根 CoNLLWord = JClass("com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord") head = word_array[12] while head.HEAD: head = head.HEAD if (head == CoNLLWord.ROOT): print(head.LEMMA) else: print("%s --(%s)--> " % (head.LEMMA, head.DEPREL)) if __name__ == "__main__": demo_dependency_parser()
調用更底層的API須要參考Java語法用JClass引入更深的類路徑。以感知機詞法分析器爲例,這個類位於包名com.hankcs.hanlp.model.perceptron.PerceptronLexicalAnalyzer下,因此先用JClass獲得類,而後就能夠調用了:
PerceptronLexicalAnalyzer = JClass('com.hankcs.hanlp.model.perceptron.PerceptronLexicalAnalyzer') analyzer = PerceptronLexicalAnalyzer() print(analyzer.analyze("上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀")) # [上海/ns 華安/nz 工業/n (/w 集團/n )/w 公司/n]/nt 董事長/n 譚旭光/nr 和/c 祕書/n 胡花蕊/nr 來到/v [美國紐約/ns 現代/ntc 藝術/n 博物館/n]/ns 參觀/v print(analyzer.analyze("個人但願是但願張晚霞的背影被晚霞映紅").translateLabels()) # 我/代詞 的/助詞 但願/名動詞 是/動詞 但願/動詞 張晚霞/人名 的/助詞 背影/名詞 被/介詞 晚霞/名詞 映紅/動詞 print(analyzer.analyze("支援臺灣正體香港繁體:微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立。")) # 支援/v 臺灣/ns 正體/n 香港/ns 繁體/n :/w 微軟公司/ntc 於/p 1975年/t 由/p 比爾·蓋茲/nr 和/c 保羅·艾倫/nr 創立/v 。/w
說明
說明
# # -*- coding:utf-8 -*- from pyhanlp import * from jpype import * def demo_index_segment(): """ 索引分詞 主副食品/n [0:4] 主副食/j [0:3] 副食品/n [1:4] 副食/n [1:3] 食品/n [2:4] 最細顆粒度切分: 主副食品/n [0:4] 主副食/j [0:3] 主/ag [0:1] 副食品/n [1:4] 副食/n [1:3] 副/b [1:2] 食品/n [2:4] 食/v [2:3] 品/ng [3:4] """ Term =JClass("com.hankcs.hanlp.seg.common.Term") IndexTokenizer = JClass("com.hankcs.hanlp.tokenizer.IndexTokenizer") term_list = IndexTokenizer.segment("主副食品") for term in term_list.iterator(): print("{} [{}:{}]".format(term, term.offset, term.offset + len(term.word))) print("最細顆粒度切分:") IndexTokenizer.SEGMENT.enableIndexMode(JInt(1)) # JInt用於區分重載 term_list = IndexTokenizer.segment("主副食品") for term in term_list.iterator(): print("{} [{}:{}]".format(term, term.offset, term.offset + len(term.word))) if __name__ == "__main__": demo_index_segment()
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_NShort_segment(sentences): """ N最短路徑分詞,該分詞器比最短路分詞器慢,可是效果稍微好一些,對命名實體識別能力更強 N-最短分詞:[今天/t, ,/w, 劉志軍/nr, 案/ng, 的/ude1, 關鍵/n, 人物/n, ,/w, 山西/ns, 女/b, 商人/nnt, 丁書苗/nr, 在/p, 市/n, 二/m, 中/f, 院/n, 出庭/vi, 受審/vi, 。/w] 最短路分詞:[今天/t, ,/w, 劉志軍/nr, 案/ng, 的/ude1, 關鍵/n, 人物/n, ,/w, 山西/ns, 女/b, 商人/nnt, 丁書苗/nr, 在/p, 市/n, 二/m, 中/f, 院/n, 出庭/vi, 受審/vi, 。/w] N-最短分詞:[江西省監獄管理局/nt, 與/cc, 中國/ns, 太平洋/ns, 財產/n, 保險/n, 股份/n, 有限公司/nis, 南昌/ns, 中心支公司/nt, 保險/n, 合同/n, 糾紛案/nz] 最短路分詞:[江西省監獄管理局/nt, 與/cc, 中國/ns, 太平洋/ns, 財產/n, 保險/n, 股份/n, 有限公司/nis, 南昌/ns, 中心支公司/nt, 保險/n, 合同/n, 糾紛案/nz] N-最短分詞:[新北商貿有限公司/nt] 最短路分詞:[新北商貿有限公司/nt] """ NShortSegment = JClass("com.hankcs.hanlp.seg.NShort.NShortSegment") Segment = JClass("com.hankcs.hanlp.seg.Segment") ViterbiSegment = JClass("com.hankcs.hanlp.seg.Viterbi.ViterbiSegment") nshort_segment = NShortSegment().enableCustomDictionary(False).enablePlaceRecognize( True).enableOrganizationRecognize(True) shortest_segment = ViterbiSegment().enableCustomDictionary( False).enablePlaceRecognize(True).enableOrganizationRecognize(True) for sentence in sentences: print("N-最短分詞:{} \n最短路分詞:{}".format( nshort_segment.seg(sentence), shortest_segment.seg(sentence))) if __name__ == "__main__": sentences = [ "今天,劉志軍案的關鍵人物,山西女商人丁書苗在市二中院出庭受審。", "江西省監獄管理局與中國太平洋財產保險股份有限公司南昌中心支公司保險合同糾紛案", "新北商貿有限公司", ] demo_NShort_segment(sentences)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_CRF_lexical_analyzer(tests): """ CRF詞法分析器 商品/n 和/c 服務/vn [上海/ns 華安/nz 工業/n (/n 集團/n )/v 公司/n]/nt 董事長/n 譚旭光/nr 和/c 祕書/n 胡花蕊/nr 來到/v [美國/ns 紐約/ns 現代/t 藝術/n 博物館/n]/ns 參觀/v [微軟/nt 公司/n]/nt 於/p 1975年/t 由/p 比爾·蓋茲/n 和/c 保羅·艾倫/v 創立/v ,/v 18年/n 啟動/v 以/p 智慧/n 雲端/n 、/v 前端/n 為/v 導向/n 的/u 大/a 改組/vn 。/w """ CRFLexicalAnalyzer = JClass("com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer") analyzer = CRFLexicalAnalyzer() for sentence in tests: print(analyzer.analyze(sentence)) if __name__ == "__main__": sentences = ["商品和服務", "上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀", "微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。" ] demo_CRF_lexical_analyzer(sentences)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * import time def demo_high_speed_segment(): """ 演示極速分詞,基於DoubleArrayTrie實現的詞典正向最長分詞,適用於「高吞吐量」「精度通常」的場合 [江西, 鄱陽湖, 乾枯, ,, 中國, 最大, 淡水湖, 變成, 大草原] SpeedTokenizer分詞速度:1253607.32字每秒 """ SpeedTokenizer = JClass("com.hankcs.hanlp.tokenizer.SpeedTokenizer") text = "江西鄱陽湖乾枯,中國最大淡水湖變成大草原" JClass("com.hankcs.hanlp.HanLP$Config").ShowTermNature = False print(SpeedTokenizer.segment(text)) start = time.time() pressure = 1000000 for i in range(pressure): SpeedTokenizer.segment(text) cost_time = time.time() - start print("SpeedTokenizer分詞速度:%.2f字每秒" % (len(text) * pressure / cost_time)) if __name__ == "__main__": demo_high_speed_segment()
說明
追加詞典
詞典格式
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_custom_dictionary(text): """ 演示用戶詞典的動態增刪 TO-DO: DoubleArrayTrie分詞 首字哈希以後二分的trie樹分詞 [攻城/vi, 獅/ng, 逆襲/nz, 單身/n, 狗/n, ,/w, 迎娶/v, 白富美/nr, ,/w, 走上/v, 人生/n, 巔峯/n] [攻城獅/nz, 逆襲/nz, 單身狗/nz, ,/w, 迎娶/v, 白富美/nz, ,/w, 走上/v, 人生/n, 巔峯/n] """ print(HanLP.segment(text)) CustomDictionary = JClass("com.hankcs.hanlp.dictionary.CustomDictionary") CustomDictionary.add("攻城獅") # 動態增長 CustomDictionary.insert("白富美", "nz 1024") # 強行插入 #CustomDictionary.remove("攻城獅"); # 刪除詞語(註釋掉試試) CustomDictionary.add("單身狗", "nz 1024 n 1") #print(CustomDictionary.get("單身狗")) print(HanLP.segment(text)) if __name__ == "__main__": text = "攻城獅逆襲單身狗,迎娶白富美,走上人生巔峯" demo_custom_dictionary(text)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_chinese_name_recognition(sentences): """ 中國人名識別 [簽約/vi, 儀式/n, 前/f, ,/w, 秦光榮/nr, 、/w, 李紀恆/nr, 、/w, 仇和/nr, 等/udeng, 一同/d, 會見/v, 了/ule, 參加/v, 簽約/vi, 的/ude1, 企業家/nnt, 。/w] [武大靖/nr, 創/v, 世界紀錄/nz, 奪冠/vi, ,/w, 中國表明團/nt, 平昌/ns, 首金/n] [區長/nnt, 莊木弟/nr, 新年/t, 致辭/vi] [朱立倫/nr, :/w, 兩岸/n, 都/d, 但願/v, 共創/v, 共贏/n, /w, 習/v, 朱/ag, 歷史/n, 會晤/vn, 在即/vi] [陝西/ns, 首富/n, 吳一堅/nr, 被/pbei, 帶走/v, /w, 與/cc, 令計劃/nr, 妻子/n, 有/vyou, 交集/v] [據/p, 美國之音/n, 電臺/nis, 網站/n, 4/m, 月/n, 28/m, 日/b, 報道/v, ,/w, 8/m, 歲/qt, 的/ude1, 凱瑟琳·克羅爾/nrf, (/w, 鳳甫娟/nr, )/w, 和/cc, 不少/m, 華裔/n, 美國/nsf, 小朋友/n, 同樣/uyy, ,/w, 小小年紀/n, 就/d, 開始/v, 學/v, 小提琴/n, 了/ule, 。/w, 她/rr, 的/ude1, 媽媽/n, 是/vshi, 位/q, 虎媽/nz, 麼/y, ?/w] [凱瑟琳/nrf, 和/cc, 露西/nrf, (/w, 廬瑞媛/nr, )/w, ,/w, 跟/p, 她們/rr, 的/ude1, 哥哥/n, 們/k, 有/vyou, 一些/m, 不一樣/a, 。/w] [王國強/nr, 、/w, 高峯/n, 、/w, 汪洋/n, 、/w, 張朝陽/nr, 光着頭/l, 、/w, 韓寒/nr, 、/w, 小/a, 四/m] [張浩/nr, 和/cc, 胡健康/nr, 復員/v, 回家/vi, 了/ule] [王總/nr, 和/cc, 小麗/nr, 結婚/vi, 了/ule] [編劇/nnt, 邵鈞林/nr, 和/cc, 稽道青/nr, 說/v] [這裏/rzs, 有/vyou, 關天培/nr, 的/ude1, 有關/vn, 事蹟/n] [龔學平/nr, 等/udeng, 領導/n, 說/v, ,/w, 鄧穎超/nr, 生前/t, 杜絕/v, 超生/vi] """ segment = HanLP.newSegment().enableNameRecognize(True); for sentence in sentences: term_list = segment.seg(sentence) print(term_list) if __name__ == "__main__": sentences = [ "簽約儀式前,秦光榮、李紀恆、仇和等一同會見了參加簽約的企業家。", "武大靖創世界紀錄奪冠,中國表明團平昌首金", "區長莊木弟新年致辭", "朱立倫:兩岸都但願共創共贏 習朱歷史會晤在即", "陝西首富吳一堅被帶走 與令計劃妻子有交集", "據美國之音電臺網站4月28日報道,8歲的凱瑟琳·克羅爾(鳳甫娟)和不少華裔美國小朋友同樣,小小年紀就開始學小提琴了。她的媽媽是位虎媽麼?", "凱瑟琳和露西(廬瑞媛),跟她們的哥哥們有一些不一樣。", "王國強、高峯、汪洋、張朝陽光着頭、韓寒、小四", "張浩和胡健康復員回家了", "王總和小麗結婚了", "編劇邵鈞林和稽道青說", "這裏有關天培的有關事蹟", "龔學平等領導說,鄧穎超生前杜絕超生",] demo_chinese_name_recognition(sentences)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_translated_name_recognition(sentences): """ 音譯人名識別 [一桶/nz, 冰水/n, 當頭/vi, 倒下/v, ,/w, 微軟/ntc, 的/ude1, 比爾蓋茨/nrf, 、/w, Facebook/nx, 的/ude1, 扎克伯格/nrf, 跟/p, 桑德博格/nrf, 、/w, 亞馬遜/nrf, 的/ude1, 貝索斯/nrf, 、/w, 蘋果/nf, 的/ude1, 庫克/nrf, 全都/d, 不惜/v, 溼身/nz, 入鏡/nz, ,/w, 這些/rz, 硅谷/ns, 的/ude1, 科技/n, 人/n, ,/w, 飛蛾撲火/nz, 似地/d, 犧牲/v, 演出/vn, ,/w, 其實/d, 全/a, 爲了/p, 慈善/a, 。/w] [世界/n, 上/f, 最長/d, 的/ude1, 姓名/n, 是/vshi, 簡森·喬伊·亞歷山大·比基·卡利斯勒·達夫·埃利奧特·福克斯·伊維魯莫·馬爾尼·梅爾斯·帕特森·湯普森·華萊士·普雷斯頓/nrf, 。/w] """ segment = HanLP.newSegment().enableTranslatedNameRecognize(True) for sentence in sentences: term_list = segment.seg(sentence) print(term_list) if __name__ == "__main__": sentences = [ "一桶冰水當頭倒下,微軟的比爾蓋茨、Facebook的扎克伯格跟桑德博格、亞馬遜的貝索斯、蘋果的庫克全都不惜溼身入鏡,這些硅谷的科技人,飛蛾撲火似地犧牲演出,其實全爲了慈善。", "世界上最長的姓名是簡森·喬伊·亞歷山大·比基·卡利斯勒·達夫·埃利奧特·福克斯·伊維魯莫·馬爾尼·梅爾斯·帕特森·湯普森·華萊士·普雷斯頓。", ] demo_translated_name_recognition(sentences)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_japanese_name_recognition(sentences): """ 日本人名識別 [北川景子/nrj, 參演/v, 了/ule, 林詣彬/nr, 導演/nnt, 的/ude1, 《/w, 速度/n, 與/cc, 激情/n, 3/m, 》/w] [林志玲/nr, 亮相/vi, 網友/n, :/w, 肯定/v, 不是/c, 波多野結衣/nrj, ?/w] [龜山千廣/nrj, 和/cc, 近藤公園/nrj, 在/p, 龜山/nz, 公園/n, 裏/f, 喝酒/vi, 賞花/nz] """ Segment = JClass("com.hankcs.hanlp.seg.Segment") Term = JClass("com.hankcs.hanlp.seg.common.Term") segment = HanLP.newSegment().enableJapaneseNameRecognize(True) for sentence in sentences: term_list = segment.seg(sentence) print(term_list) if __name__ == "__main__": sentences =[ "北川景子參演了林詣彬導演的《速度與激情3》", "林志玲亮相網友:肯定不是波多野結衣?", "龜山千廣和近藤公園在龜山公園裏喝酒賞花", ] demo_japanese_name_recognition(sentences)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_place_recognition(sentences): """ 地名識別 [藍翔/nt, 給/p, 寧夏/ns, 固原市/ns, 彭陽縣/ns, 紅河鎮/ns, 黑牛溝村/ns, 捐贈/v, 了/ule, 挖掘機/n] """ Segment = JClass("com.hankcs.hanlp.seg.Segment") Term = JClass("com.hankcs.hanlp.seg.common.Term") segment = HanLP.newSegment().enablePlaceRecognize(True) for sentence in sentences: term_list = segment.seg(sentence) print(term_list) if __name__ == "__main__": sentences = ["藍翔給寧夏固原市彭陽縣紅河鎮黑牛溝村捐贈了挖掘機"] demo_place_recognition(sentences)
說明
算法詳解
# # -*- coding:utf-8 -*- from pyhanlp import * def demo_organization_recognition(sentences): """ 機構名識別 [我/rr, 在/p, 上海/ns, 林原科技有限公司/nt, 兼職/vn, 工做/vn, ,/w] [我/rr, 常常/d, 在/p, 臺川喜宴餐廳/nt, 吃飯/vi, ,/w] [偶爾/d, 去/vf, 開元地中海影城/nt, 看/v, 電影/n, 。/w] """ Segment = JClass("com.hankcs.hanlp.seg.Segment") Term = JClass("com.hankcs.hanlp.seg.common.Term") segment = HanLP.newSegment().enableOrganizationRecognize(True) for sentence in sentences: term_list = segment.seg(sentence) print(term_list) if __name__ == "__main__": sentences = [ "我在上海林原科技有限公司兼職工做,", "我常常在臺川喜宴餐廳吃飯,", "偶爾去開元地中海影城看電影。", ] demo_organization_recognition(sentences)
經過hanlp serve來啓動內置的http服務器,默認本地訪問地址爲:http://localhost:8765 ;也能夠訪問官網演示頁面:http://hanlp.hankcs.com/ 。
HanLP具有高度可自定義的特色,全部模型和詞典均可以自由替換。若是你但願與別的項目共享同一套data,只需將該項目的配置文件hanlp.properties拷貝到pyhanlp的安裝目錄下便可。本機安裝目錄能夠經過hanlp --version獲取。
同時,還能夠經過--config臨時加載另外一個配置文件:
hanlp segment --config path/to/another/hanlp.properties