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 文件夹,而不需要重新下载该文件。
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 = "水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露," \
"根据刚刚完成了水资源管理制度的考核,有部分省接近了红线的指标," \
"有部分省超过红线的指标,对一些超过红线的地方,陈明忠表示,对一些取用水项目进行区域的限批," \
"严格地进行水资源论证和取水许可的批准。"
print(HanLP.extractKeyword(document, 2))
# 执行结果
[水资源, 陈明忠]
print(HanLP.extractSummary(document, 3))
# 执行结果
[严格地进行水资源论证和取水许可的批准,
水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露,
有部分省超过红线的指标]
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 标点符号 _ _
另一种句法分析结果输出形式:
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)