安装

先安装java

yum -y install java-1.8.0-openjdk

github https://github.com/hankcs/pyhanlp

conda install -c conda-forge jpype1
pip install pyhanlp

使用命令 hanlp segment 进入交互分词模式,会从github上自动下载data数据,会比较慢。可以停止命令,然后手动下载data-for-1.7.4.zip 大约640M 到pynlp包文件夹的static目录下,再次执行hanlp segment命令时,会自动解压压缩包到 /static/data 文件夹,而不需要重新下载该文件。

pyhanlp 句法结构分析 pyhanlp使用_hanlp

切词

from pyhanlp import *
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
print(HanLP.segment(content))

# 执行结果如下:
[现如今/t, ,/w, 机器学习/gi, 和/cc, 深度/n, 学习/v, 带动/v, 人工智能/n, 飞速/d, 的/ude1, 发展/vn, ,/w, 
并/cc, 在/p, 图片/n, 处理/vn, 、/w, 语音/n, 识别/vn, 领域/n, 取得/v, 巨大/a, 成功/a, 。/w]
for term in HanLP.segment('下雨天地面积水'):
    print('{}\t{}'.format(term.word, term.nature))  # 获取单词与词性

// 执行结果
下雨天  n
地面    n
积水    n

添加自定义词典

content = "马伊琍与文章宣布离婚,华为是背后的赢家。"
print('原句:'+content)
print(HanLP.segment(content))

# 添加自定义词典
# insert会覆盖字典中已经存在的词,add会跳过已经存在的词
CustomDictionary.add("文章", "nr 300")
CustomDictionary.insert("工程机械", "nz 1024")
CustomDictionary.add("交易平台", "nz 1024 n 1")
print(HanLP.segment(content))

# 执行结果
原句马伊琍与文章宣布离婚,华为是背后的赢家。
[马伊琍/nr, 与/cc, 文章/n, 宣布/v, 离婚/vi, ,/w, 华为/nt, 是/vshi, 背后/f, 的/ude1, 赢家/n, 。/w]
[马伊琍/nr, 与/cc, 文章/nr, 宣布/v, 离婚/vi, ,/w, 华为/nt, 是/vshi, 背后/f, 的/ude1, 赢家/n, 。/w]

关键词提取 

document = "致各位关心赵丽颖女士和冯绍峰先生的朋友们:在经过认真地商讨后赵丽颖女士和冯绍峰先生决定向每一位关心他们的朋友告知:赵丽颖女士与冯绍峰先生已决定和平分手并结束婚姻关系,并已于近日办理相关手续。两人因工作相识结缘走到了一起也因工作的聚少离多选择重新回归朋友关系。过去的日子里,两人真心相待有过一段幸福美好的时光。即使现在选择分开两人也非常感恩过往的相遇相知。这是双方深思熟虑友好协商后做出的共同决定无关网络流言,也无关外界影响。未来,两人也将继续承担作为父母的责任,共同抚养并陪伴孩子成长。对干此事我们简要告知大家以上原因并诚挚地希望可以避免因不知情而产生不必要的误解与猜测进而对当事双方及其家人产生二次伤害。双方当事人及其工作室也将不再对此事进行其他回应。后续如有恶意捏造和传播谣言者,我们也将始终保留追究其法律责任的权利!最后,感谢所有一直关心支持爱护信任赵丽颖女士与冯绍峰先生的朋友们,祝福二人未来的生活安好顺遂,平安喜乐!"

print(HanLP.extractKeyword(document, 10))

# 执行结果
[工作, 双方, 决定, 先生, 冯绍峰, 未来, 选择, 共同, 告知, 朋友]

自动摘要

print(HanLP.extractSummary(document, 3))
# 执行结果
[致各位关心赵丽颖女士和冯绍峰先生的朋友们, 
这是双方深思熟虑友好协商后做出的共同决定无关网络流言, 
在经过认真地商讨后赵丽颖女士和冯绍峰先生决定向每一位关心他们的朋友告知]

短语提取

document = "成功勒索美国最大燃油管道运营商Colonial后,黑客又攻击了全球最大的肉类供应商JBS。当地时间5月31日,JBS向外界表示,公司服务器遭到黑客有组织的攻击,受影响的系统包括美国分部和澳大利亚分部,部分工厂暂停作业。作为全球最大的动物蛋白供应商,JBS的员工多达24万余人,产品出口到150多个国家和地区,不免令人担忧,一旦长时间大面积停产,可能会再次冲击全球肉类供应链。"

phrases = HanLP.extractPhrase(document,10)
print(phrases)

# 执行结果
[不免令人担忧, 产品出口国家, 全球最大, 全球肉类, 公司服务器, 再次冲击, 冲击全球, 分部澳大利亚, 动物蛋白, 勒索美国]

依存句法分析

print(HanLP.parseDependency(content))

# 执行结果
1       马伊琍  马伊琍  nh      nr      _       4       主谓关系        _       _
2       与      与      p       p       _       4       状中结构        _       _
3       文章    文章    n       n       _       2       介宾关系        _       _
4       宣布    宣布    v       v       _       0       核心关系        _       _
5       离婚    离婚    v       v       _       4       动宾关系        _       _
6       ,      ,      wp      w       _       4       标点符号        _       _
7       华为    华为    nz      nz      _       8       主谓关系        _       _
8       是      是      v       v       _       4       并列关系        _       _
9       背后    背后    nd      f       _       11      定中关系        _       _
10      的      的      u       u       _       9       右附加关系      _       _
11      赢家    赢家    n       n       _       8       动宾关系        _       _
12      。      。      wp      w       _       4       标点符号        _       _

pyhanlp 句法结构分析 pyhanlp使用_hanlp_02

另一种句法分析结果输出形式:

sentence = HanLP.parseDependency(content)
print(sentence)
for word in sentence.iterator():  # 通过dir()可以查看sentence的方法
    print("%d %s/%s --(%s)--> %s(%s)" %(word.ID, word.LEMMA, word.POSTAG, word.DEPREL, word.HEAD.LEMMA, word.HEAD.ID))

# 执行结果
1 马伊琍/nr --(主谓关系)--> 宣布(4)
2 与/p --(状中结构)--> 宣布(4)
3 文章/n --(介宾关系)--> 与(2)
4 宣布/v --(核心关系)--> ##核心##(0)
5 离婚/v --(动宾关系)--> 宣布(4)
6 ,/w --(标点符号)--> 宣布(4)
7 华为/nz --(主谓关系)--> 是(8)
8 是/v --(并列关系)--> 宣布(4)
9 背后/f --(定中关系)--> 赢家(11)
10 的/u --(右附加关系)--> 背后(9)
11 赢家/n --(动宾关系)--> 是(8)
12 。/w --(标点符号)--> 宣布(4)