中英文NLP处理工具包, 基于tensorflow2.0, 使用在学术界和行业中推广最先进的深度学习技术。
这个安装很离谱,在网站https://pypi.org/project/hanlp/#description
上有显示对应的版本及适用情况。
官网上 hanlp 只支持 python3.6~3.9,但其中需要用到 TensorFlow 2.0 以上的版本,
而 TensorFlow 现在(2022.7.14)只支持 python3.7~3.10。
因而我单独下载配置了 python3.8 的环境,注:pyhanlp 暂时只能适用 python3.8及以下版本。
最后进行如下指令安装,其中最后一步hanlp
用于检测是否成功安装。
pip install pyhanlp
pip install hanlp[full] -U
hanlp
正确输出
usage: hanlp [-h] [-v] {segment,parse,serve,update} ...
HanLP: Han Language Processing v1.8.3
positional arguments:
{segment,parse,serve,update}
which task to perform?
segment word segmentation
parse dependency parsing
serve start http server
update update jar and data of HanLP
optional arguments:
-h, --help show this help message and exit
-v, --version show installed versions of HanLP
导入文件
import hanlp
from hanlp.utils.lang.en.english_tokenizer import tokenize_english
在该代码运行中要下载两个比较大的包,总共 8G 起步,记得使用清华镜像下载。
# 加载CTB_CONVSEG预训练模型进行分词任务
tokenizer = hanlp.load('CTB6_CONVSEG')
print(tokenizer("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"))
# 进行英文分词, 英文分词只需要使用规则即可
tokenizer = tokenize_english
print(tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.'))
运行结果
['工信处', '女', '干事', '每', '月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']
['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.']
通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机
顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体
鲁迅, 浙江绍兴人, 五四新文化运动的重要参与者, 代表作朝花夕拾
鲁迅(人名) / 浙江绍兴(地名)人 / 五四新文化运动(专有名词) / 重要参与者 / 代表作 / 朝花夕拾(专有名词)
作用:
同词汇一样, 命名实体也是人类理解文本的基础单元, 因此也是 AI 解决 NLP 领域高阶任务的重要基础环节
# 加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZH
recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)
# 这里注意它的输入是对句子进行字符分割的列表, 因此在句子前加入了list()
print(recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。')))
# 进行英文命名实体识别
recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_CASED_EN)
print(recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "House"]))
运行结果
[('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)]
[('Obama', 'PER', 1, 2), ('White House', 'LOC', 6, 8)]
# 加载中文命名实体识别的预训练模型CTB5_POS_RNN_FASTTEXT_ZH
tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)
# 输入是分词结果列表
ret = tagger(['我', '的', '希望', '是', '希望', '和平'])
# 返回对应的词性
print(ret)
# 加载英文命名实体识别的预训练模型PTB_POS_RNN_FASTTEXT_EN
tagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN)
# 输入是分词结果列表
ret = tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.'])
# 返回对应的词性
print(ret)
运行结果
['PN', 'DEG', 'NN', 'VC', 'VV', 'NN']
['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']
通常会出现警告Warning : `load_model` does not return WordVectorModel or SupervisedModel any more, but a `FastText` object which is very similar.
,可通过加入如下内容解决
import fasttext
fasttext.FastText.eprint = lambda x: None
词性表
# IP:简单从句
# NP:名词短语
# VP:动词短语
# PU:断句符,通常是句号、问号、感叹号等标点符号
# LCP:方位词短语
# PP:介词短语
# CP:由‘的’构成的表示修饰性关系的短语
# DNP:由‘的’构成的表示所属关系的短语
# ADVP:副词短语
# ADJP:形容词短语
# DP:限定词短语
# QP:量词短语
# NN:常用名词
# NR:固有名词
# NT:时间名词
# PN:代词
# VV:动词
# VC:是
# CC:表示连词
# VE:有
# VA:表语形容词
# AS:内容标记(如:了)
# VRD:动补复合词
# CD: 表示基数词
# DT: determiner 表示限定词
# EX: existential there 存在句
# FW: foreign word 外来词
# IN: preposition or conjunction, subordinating 介词或从属连词
# JJ: adjective or numeral, ordinal 形容词或序数词
# JJR: adjective, comparative 形容词比较级
# JJS: adjective, superlative 形容词最高级
# LS: list item marker 列表标识
# MD: modal auxiliary 情态助动词
# PDT: pre-determiner 前位限定词
# POS: genitive marker 所有格标记
# PRP: pronoun, personal 人称代词
# RB: adverb 副词
# RBR: adverb, comparative 副词比较级
# RBS: adverb, superlative 副词最高级
# RP: particle 小品词
# SYM: symbol 符号
# TO:”to” as preposition or infinitive marker 作为介词或不定式标记
# WDT: WH-determiner WH限定词
# WP: WH-pronoun WH代词
# WP$: WH-pronoun, possessive WH所有格代词
# WRB:Wh-adverb WH副词