NLP自然语言处理常用的Python库 及安装方法

注意:以下pip命令都是在Anaconda prompt中运行的。因为使用anaconda来安装pyhon库时,它会自动解决各种依赖问题,方便快捷

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

或者先新建一个环境,然后再安装:
第一步:创建一个名为 tensorflow 的新环境,并安装pip,python3.6,以及anaconda的基础包(包括numpy,pandas等)

conda create -n tensorflow pip python=3.6 anaconda

第二步:进入新建的环境(想要退回基础环境base时,输入:deactivate

activate tensorflow

第三步:输入以下命令安装tensorflow cpu版本:

pip install --ignore-installed --upgrade tensorflow

第四部(optional):在pycharm中想使用tensorflow时,需要将项目的interpreter修改为该环境中的python.exe,一般在安装目录下的envs文件夹中可以找到新建的环境,点进去就可以找到这个python.exe
在这里插入图片描述

4、Jieba

广泛使用的中文分词工具,也可以用来做词性标注。
项目地址:https://github.com/fxsjy/jieba
安装:

pip install 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++:我装的是JDK 11.0.1(Java™ SE Development Kit 11.0.1)和Visual C++ 2015。
    安装方法请自行百度,各种教程多到不行
    附JDK 11.0.1下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
    多说一句:网上某些地方说的JDK 1.8,其实就是JDK 8;安装完JDK后需要配置环境变量
  • 安裝Jpype,在anaconda promt中输入:conda install -c conda-forge jpype1
    Jpype是一个让我们可以通过python来运行Java代码的工具包
  • 测试是否按照成功:
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 -*-
# 引入java的执行环境;Jpype是一个让我们可以通过python来运行Java代码的工具包
from jpype import *

# 启动JVM,Linux需替换分号;为冒号:
startJVM(getDefaultJVMPath(), "-Djava.class.path=H:\software\hanlp\hanlp-1.7.0.jar;H:\software\hanlp",
         "-Xms1g",
         "-Xmx1g")  
# 启动了JVM以后,就可以运行Java语句了

print("=" * 30 + "HanLP分词" + "=" * 30)
# 初始化一个Java类
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
展开阅读全文

没有更多推荐了,返回首页