hanlp擁有:中文分詞、命名實體識別、摘要關鍵字、依存句法分析、簡繁拼音轉換、智能推薦。java
這裏主要介紹一下hanlp的中文分詞、命名實體識別、依存句法分析,這裏就不介紹具體的hanlp的安裝了,百度教程不少,能夠看這裏:http://hanlp.com/ 裏面也有相關的一些介紹。python
我之前還使用過jieba分詞和LTP,綜合來講,LTP是作的相對要好一點,特別是中文處理這一塊,可是它的最大缺點是不開源,而hanlp功能更齊全並且開源,更加有利於你們的項目開發的使用。算法
首先使用hanlp對中文進行處理的前提是你們已經安裝好了hanlp:編程
第一將這幾個放在你的項目下,網絡
而後點擊hanlp.propertiess,更改編程語言
保證你的data數據在這個目錄之下工具
下面貼上一些處理天然語言的基本方法(如下代碼並不是原創,來自於百度上的大神):優化
#-*- coding:utf-8 -*-spa
from jpype import *視頻
startJVM(getDefaultJVMPath(), "-Djava.class.path=D:\python_projects\zhengzebiaodashi\hanlp\hanlp-1.3.4.jar;D:\python_projects\zhengzebiaodashi\hanlp",
"-Xms1g",
"-Xmx1g") # 啓動JVM,Linux需替換分號;爲冒號:
print("=" * 30 + "HanLP分詞" + "=" * 30)
HanLP = JClass('com.hankcs.hanlp.HanLP')
# 中文分詞
print(HanLP.segment('你好,歡迎在Python中調用HanLP的API'))
print("-" * 70)
print("=" * 30 + "標準分詞" + "=" * 30)
StandardTokenizer = JClass('com.hankcs.hanlp.tokenizer.StandardTokenizer')
print(StandardTokenizer.segment('你好,歡迎在Python中調用HanLP的API'))
print("-" * 70)
# NLP分詞NLPTokenizer會執行所有命名實體識別和詞性標註
print("=" * 30 + "NLP分詞" + "=" * 30)
NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
print(NLPTokenizer.segment('中國科學院計算技術研究所的宗成慶教授正在教授天然語言處理課程'))
print("-" * 70)
print("=" * 30 + "索引分詞" + "=" * 30)
IndexTokenizer = JClass('com.hankcs.hanlp.tokenizer.IndexTokenizer')
termList = IndexTokenizer.segment("主副食品");
for term in termList:
print(str(term) + " [" + str(term.offset) + ":" + str(term.offset + len(term.word)) + "]")
print("-" * 70)
print("=" * 30 + " N-最短路徑分詞" + "=" * 30)
# CRFSegment = JClass('com.hankcs.hanlp.seg.CRF.CRFSegment')
# segment=CRFSegment()
# testCase ="今天,劉志軍案的關鍵人物,山西女商人丁書苗在市二中院出庭受審。"
# print(segment.seg("你看過穆赫蘭道嗎"))
print("-" * 70)
print("=" * 30 + " CRF分詞" + "=" * 30)
print("-" * 70)
print("=" * 30 + " 極速詞典分詞" + "=" * 30)
SpeedTokenizer = JClass('com.hankcs.hanlp.tokenizer.SpeedTokenizer')
print(NLPTokenizer.segment('江西鄱陽湖乾枯,中國最大淡水湖變成大草原'))
print("-" * 70)
print("=" * 30 + " 自定義分詞" + "=" * 30)
CustomDictionary = JClass('com.hankcs.hanlp.dictionary.CustomDictionary')
CustomDictionary.add('攻城獅')
CustomDictionary.add('單身狗')
HanLP = JClass('com.hankcs.hanlp.HanLP')
print(HanLP.segment('攻城獅逆襲單身狗,迎娶白富美,走上人生巔峯'))
print("-" * 70)
print("=" * 20 + "命名實體識別與詞性標註" + "=" * 30)
NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
print(NLPTokenizer.segment('中國科學院計算技術研究所的宗成慶教授正在教授天然語言處理課程'))
print("-" * 70)
document = "水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發佈會上透露," \
"根據剛剛完成了水資源管理制度的考覈,有部分省接近了紅線的指標," \
"有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水項目進行區域的限批," \
"嚴格地進行水資源論證和取水許可的批准。"
print("=" * 30 + "關鍵詞提取" + "=" * 30)
print(HanLP.extractKeyword(document, 8))
print("-" * 70)
print("=" * 30 + "自動摘要" + "=" * 30)
print(HanLP.extractSummary(document, 3))
print("-" * 70)
# print("="*30+"地名識別"+"="*30)
# HanLP = JClass('com.hankcs.hanlp.HanLP')
# segment = HanLP.newSegment().enablePlaceRecognize(true)
# testCase=["武勝縣新學鄉政府大樓門前鑼鼓喧天",
# "藍翔給寧夏固原市彭陽縣紅河鎮黑牛溝村捐贈了挖掘機"]
# for sentence in testCase :
# print(HanLP.segment(sentence))
# print("-"*70)
# print("="*30+"依存句法分析"+"="*30)
# print(HanLP.parseDependency("徐先生還具體幫助他肯定了把畫雄鷹、松鼠和麻雀做爲主攻目標。"))
# print("-"*70)
text = r"算法工程師\n 算法(Algorithm)是一系列解決問題的清晰指令,也就是說,可以對必定規範的輸入,在有限時間內得到所要求的輸出。若是一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不一樣的算法可能用不一樣的時間、空間或效率來完成一樣的任務。一個算法的優劣能夠用空間複雜度與時間複雜度來衡量。算法工程師就是利用算法處理事物的人。\n \n 1職位簡介\n 算法工程師是一個很是高端的職位;\n 專業要求:計算機、電子、通訊、數學等相關專業;\n 學歷要求:本科及其以上的學歷,大多數是碩士學歷及其以上;\n 語言要求:英語要求是熟練,基本上能閱讀國外專業書刊;\n 必須掌握計算機相關知識,熟練使用仿真工具MATLAB等,必須會一門編程語言。\n\n2研究方向\n 視頻算法工程師、圖像處理算法工程師、音頻算法工程師 通訊基帶算法工程師\n \n 3目前國內外情況\n 目前國內從事算法研究的工程師很多,可是高級算法工程師卻不多,是一個很是緊缺的專業工程師。算法工程師根據研究領域來分主要有音頻/視頻算法處理、圖像技術方面的二維信息算法處理和通訊物理層、雷達信號處理、生物醫學信號處理等領域的一維信息算法處理。\n 在計算機音視頻和圖形圖像技術等二維信息算法處理方面目前比較先進的視頻處理算法:機器視覺成爲此類算法研究的核心;另外還有2D轉3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),運動估計運動補償算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),縮放算法(scaling),銳化處理算法(Sharpness),超分辨率算法(Super Resolution),手勢識別(gesture recognition),人臉識別(face recognition)。\n 在通訊物理層等一維信息領域目前經常使用的算法:無線領域的RRM、RTT,傳送領域的調製解調、信道均衡、信號檢測、網絡優化、信號分解等。\n 另外數據挖掘、互聯網搜索算法也成爲當今的熱門方向。\n"
print("=" * 30 + "短語提取" + "=" * 30)
print(HanLP.extractPhrase(text, 10))
print("-" * 70)
shutdownJVM()
可是我最近須要自定義一個詞典,該怎麼辦呢,繼續往下看:
第一:以**.txt命名本身的詞典
第二:將其加入到hanlp.propertiess中,我加入的是poems.txt,以下
第三:刪除CustomDictionary.txt.bin文件,而後運行代碼,記住要等程序運行完哦,我加入的詞典有47萬行,運行了14分鐘,不事後面運行就快了
# -*- coding:utf-8 -*-
from jpype import *
import time
i=time.time()
startJVM(getDefaultJVMPath(), "-Djava.class.path=D:\python_projects\zhengzebiaodashi\hanlp\hanlp-1.3.4.jar;D:\python_projects\zhengzebiaodashi\hanlp",
"-Xms1g",
"-Xmx1g") # 啓動JVM,Linux需替換分號;爲冒號:
HanLP = JClass('com.hankcs.hanlp.HanLP')
CustomDictionary = JClass('com.hankcs.hanlp.dictionary.CustomDictionary')
list=HanLP.parseDependency("李白的詩有哪些?")
print list
j=time.time()
print j-i
shutdownJVM()
李白 李白 b b _ 3 定中關係 _ _
的 的 u ude1 _ 1 右附加關係 _ _
詩 詩 n n _ 4 主謂關係 _ _
有 有 v vyou _ 0 核心關係 _ _
哪些 哪些 r ry _ 4 動賓關係 _ _
? ? wp w _ 4 標點符號 _ _
2.16999983788
你們有沒有發現,李白的詞性是b,這是什麼鬼,其實這是我本身詞典中添加的:李白 b 200(詞 詞性 權值)
若是你們以爲有些詞典不須要,能夠將其路徑刪除,以下:
本文轉自ybf&yyj的博客