1. 程式人生 > >NLP自然語言處理常用的Python庫 及安裝方法

NLP自然語言處理常用的Python庫 及安裝方法

1、NLTK

Natural Language Toolkit,自然語言處理工具包,在NLP領域中,最常使用的一個Python庫。
安裝:pip install nltk

2、Gensim

可以用來從文件中自勱提取語義主題。它包含了很多非監督學習演算法如:TF/IDF,潛在語義分析(Latent Semantic Analysis,LSA)、隱含狄利克雷分配(Latent Dirichlet Allocation,LDA),層次狄利克雷過程
( Hierarchical Dirichlet Processes ,HDP )等。它還支援Word2Vec,Doc2Vec等模型。
安裝:
方法一: pip install gensim
方法二:

http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下載對應版本的whl檔案,然後在命令列進入檔案所在目錄,輸入:pip install **.whl 其中 ** 要替換為你的檔案的檔名。

3、Tensorflow

這個東西是Google研發的,廣泛用於深度學習領域。
安裝:pip install tensorflow

4、Jieba

廣泛使用的中文分詞工具,也可以用來做詞性標註。
專案地址:https://github.com/fxsjy/jieba

5、Stanford NLP

支援中文、英文、阿拉伯語、法語、德語、西班牙語等多種語言
Stanford NLP提供了一系列自然語言分析工具。它能夠給出基本的詞形,詞性,不管是公司名還是人名等,格式化的日期,時間,量詞,並且能夠標記句子的結構,語法形式和字詞依賴,指明那些名字指向同樣的實體,指明情緒,提取發言中的開放關係等。

安裝:

  1. 安裝stanford nlp自然語言處理包:pip install stanfordcorenlp

  2. 下載Stanford CoreNLP檔案:https://stanfordnlp.github.io/CoreNLP/download.html
    在這裡插入圖片描述

  3. 下載中文模型jar包,https://stanfordnlp.github.io/CoreNLP/download.html
    在這裡插入圖片描述
    按圖中Chinese 右邊的那個連結。

  4. 將第二步中的zip檔案解壓(直接選擇 “解壓到當前資料夾”),然後將第三步中的jar包放到該資料夾中。這個資料夾隨便放到什麼地方都可以。
    在這裡插入圖片描述

  5. 現在第一步中安裝的stanfordcorenlp就派上用場了。
    在python中要使用stanford nlp時,先寫下面的語句:

from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP(r'H:\stanford-corenlp-full-2018-10-05', lang='zh')

需要將第二行中的路徑換成你的資料夾路徑。(我是直接將第四步中的資料夾放在了H盤中)
聽說stanfordcorenlp是用JAVA寫的,所以可能要先配置JDK

6、Hanlp

Han Language Processing,漢語言處理包

HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。

功能:中文分詞 詞性標註 命名實體識別 依存句法分析 關鍵詞提取 新詞發現 短語提取 自動摘要 文字分類 拼音簡繁

專案地址:https://github.com/hankcs/HanLP

Hanlp環境安裝

  • 安裝Java和Visual C++:我裝的是Java 1.8和Visual C++ 2015。
  • 安裝Jpype,在anaconda promt中輸入:conda install -c conda-forge jpype1
  • 測試是否按照成功:
from jpype import *
startJVM(getDefaultJVMPath(), "-ea")
java.lang.System.out.println("Hello World")
shutdownJVM()

Hanlp安裝

  • 下載hanlp-release.zip包: https://github.com/hankcs/HanLP
    在這裡插入圖片描述

  • 下載data.zip
    在這裡插入圖片描述

  • 對兩個zip檔案解壓後,將第一個zip包中的三個檔案放在data資料夾的同級目錄中:
    在這裡插入圖片描述

  • 用Notepad++或其他編輯器,開啟hanlp.properties,修改第一行,然後儲存:
    在這裡插入圖片描述
    改為data資料夾的父目錄。注意:該路徑中最好不要有中文。如果你頭鐵,你就去試試咯
    注意斜槓方向!!!

示例程式:
將第三行程式碼中的兩個路徑換成你自己的路徑,注意斜槓的方向

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

from jpype import *

startJVM(getDefaultJVMPath(), "-Djava.class.path=H:\software\hanlp\hanlp-1.7.0.jar;H:\software\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 + " 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)


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()

輸出:

==============================HanLP分詞==============================
[你好/vl, ,/w, 歡迎/v, 在/p, Python/nx, 中/f, 呼叫/v, HanLP/nx, 的/ude1, API/nx]
----------------------------------------------------------------------
==============================標準分詞==============================
[你好/vl, ,/w, 歡迎/v, 在/p, Python/nx, 中/f, 呼叫/v, HanLP/nx, 的/ude1, API/nx]
----------------------------------------------------------------------
==============================NLP分詞==============================
[中國科學院計算技術研究所/n, 的/u, 宗/n, 成慶/nr, 教授/n, 正在/d, 教授/n, 自然語言處理/v, 課程/n]
----------------------------------------------------------------------
==============================索引分詞==============================
主副食品/n [0:4]
主副食/j [0:3]
副食品/n [1:4]
副食/n [1:3]
食品/n [2:4]
----------------------------------------------------------------------
============================== CRF分詞==============================
----------------------------------------------------------------------
============================== 極速詞典分詞==============================
[江西/ns, 鄱陽湖/ns, 乾枯/v, ,/w, 中國/ns, 最大/d, 淡水湖/Vg, 變成/v, 大/a, 草原/n]
----------------------------------------------------------------------
============================== 自定義分詞==============================
[攻城獅/nz, 逆襲/nz, 單身狗/nz, ,/w, 迎娶/v, 白富美/nr, ,/w, 走上/v, 人生/n, 巔峰/n]
----------------------------------------------------------------------
====================命名實體識別與詞性標註==============================
[中國科學院計算技術研究所/n, 的/u, 宗/n, 成慶/nr, 教授/n, 正在/d, 教授/n, 自然語言處理/v, 課程/n]
----------------------------------------------------------------------
==============================關鍵詞提取==============================
[水資源, 陳明忠, 進行, 紅線, 部分, 專案, 用水, 國務院新聞辦]
----------------------------------------------------------------------
==============================自動摘要==============================
[嚴格地進行水資源論證和取水許可的批准, 水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞釋出會上透露, 有部分省超過紅線的指標]
----------------------------------------------------------------------
==============================短語提取==============================
[演算法工程師, 演算法處理, 一維資訊, 演算法研究, 訊號處理, 資訊演算法, 通訊物理層, 處理演算法, 視訊演算法, 網際網路搜尋演算法]
----------------------------------------------------------------------
JVM has been shutdown

Process finished with exit code 0