用python調度hanlp

下載jpype1:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype
安裝對應版本:pip install xxxxxx(對應文件)
注意: pip install jpype1報錯
下載安裝hanlp:
官方文檔:github:https://github.com/hankcs/HanLP
下載地址:https://github.com/hankcs/HanLP/releases下載hanlp-1.7.4-release.zip
和data-for-1.7.4.zip(建議網盤下載)
解壓後,在配置文件中(hanlp.properties),修改第一行root=(你放data文件的目錄)後保存關閉
簡單啓動:

import jpype
jvmPath = jpype.getDefaultJVMPath()      
print(jvmPath)
jpype.startJVM(jvmPath)
jpype.java.lang.System.out.println("hello world!")
jpype.java.lang.System.out.println("I love you!")
jpype.shutdownJVM()

實際使用:分配內存

from jpype import *
startJVM(getDefaultJVMPath(), 
"-Djava.class.path=Z:\hanlp\hanlp-1.7.4.jar;"
"Z:\hanlp", "-Xms1g","-Xmx1g") 

報錯:

Deprecated: convertStrings was not specified when starting the JVM. The default
behavior in JPype will be False starting in JPype 0.8. The recommended setting
for new code is convertStrings=False. The legacy value of True was assumed for
this session. If you are a user of an application that reported this warning,
please file a ticket with the developer.


並不需要管他。
繼續使用:

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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章