HanLP中文分词、人名识别、地名识别

实验目的

  1. 从网上下载和安装HanLP自然语言处理包;
  2. 熟悉HanLP自然语言处理包的基本功能;
  3. 利用网络爬虫获取的信息,调用HanLP的API,进行中文分词、人名识别、地名识别.

研究背景

随着互联网和信息技术的快速发展,网络中产生了海量的文本信息,但是这些信息是散乱存在的,给用户快速查找、浏览文本信息,以及获取有价值的信息带来了诸多不便。鉴于此,自然语言处理技术应运而生,它是信息检索和文本挖掘的重要基础,其主要任务是对文章进行分词处理,获取每个词的词性和词义,作为进一步挖掘信息的基础,为研究人员带来了极大的便利 [1]。

实验内容

使用Python的HanLP自然语言处理包,调用其API,实现中文分词、中国人名识别、音译识别名字和地名识别。本实验选用的文本是实验3网络爬虫(上)爬取的百度百科的前40条简介数据,并且对比了不同语义(Semantic)算法下的结果。

Python实现

HanLP: Han Language Processing

The multilingual NLP library for researchers and companies, built on PyTorch and TensorFlow 2.x, for advancing state-of-the-art deep learning techniques in both academia and industry. HanLP was designed from day one to be efficient, user friendly and extendable. It comes with pretrained models for various human languages including English, Chinese, Japanese and many others.

文本分析目标定义

本实验选用的文本是实验3网络爬虫(上)爬取的百度百科的前40条简介数据。

  • 部分文本展示:

    克隆巴赫(1916—2001),美国心理学家、教育学家。他创建了一套常用的衡量心理或教育测验可靠性的方法——“克隆巴赫系数”(Cronbach’s coefficient alpha),并在此基础上建立了一个用于确定测量误差的统计模型。1957年当选为美国心理学会主席,1973年获美国心理学会颁发的杰出科学贡献奖,1974年当选为国家科学院院士。克隆巴赫系数(Cronbach's alpha)是衡量量表或测验的信度的一种方法。克隆巴赫α系数最早不是由克隆巴赫提出的,基本上克隆巴赫只是在一篇文章中将前人提出的可靠性系数进行了公式化。它克服了部分折半法的缺点,是社会科学研究最常使用的信度分析方法。美利坚合众国(英语:The United States of America,United States,简称“美国”),是由华盛顿哥伦比亚特区、50个州和关岛等众多海外领土组成的联邦共和立宪制国家。其主体部分位于北美洲中部,美国中央情报局《世界概况》1989年至1996年初始版美国总面积是937.3万平方公里,人口3.33亿,通用英语,是一个移民国家。美国原为印第安人的聚居地,15世纪末,西班牙、荷兰、法国、英国等相继移民至此。18世纪前,英国在美国大西洋沿岸建立了13个英属北美殖民地。1775年,爆发了美国人民反抗大英帝国殖民统治的独立战争。芝加哥大学于1890年由石油大王约翰·洛克菲勒创办,素以盛产诺贝尔奖得主而闻名,约40%的诺贝尔经济学奖得主与芝大相关。截止至2020年10月,芝加哥大学的校友、教授及研究人员中,共产生了100位诺奖得主、位列世界第四,另有10位菲尔兹奖得主(世界第六)、4位图灵奖得主及25位普利策奖得主曾在芝大工作或学习。华人诺贝尔物理学奖得主杨振宁、李政道、崔琦均在芝加哥大学取得物理学博士学位。美国第44任总统奥巴马曾长期在芝大法学院教授宪法(1992-2004年)。
    

Install RESTful Packages

本次实验不选用安装本地hanlp包,而是选择了其轻量版的RESTful packages,方便快捷。

HanLPClient实例化

from hanlp_restful import HanLPClient
HanLP = HanLPClient('https://www.hanlp.com/api', auth=None, language='zh')

tokenize [2]

tokenize(text: Union[str, List[str]], coarse: Optional[bool] = None, language=None) → List[List[str]]

Split a document into sentences and tokenize them. Note that it is always faster to tokenize a whole document than to tokenize each sentence one by one. So avoid calling this method sentence by sentence but put sentences into a list and pass them to the text argument.

fine-grained

seg = HanLP.tokenize(sample)
seg

部分输出:

[['克隆巴赫', '美国', '心理学家', '、', '教育学家', '。'],['他', '创建', '了', '一套', '常用', '的', '衡量',...],...
]

coarse-grained

seg_coar = HanLP.tokenize(sample, coarse=True)
seg_coar

部分输出:

[ ...['1957年', '当选', '为', '美国心理学会', '主席', ',', '1973年', '获', '美国心理学会', '颁发', '的', '杰出', ... ], ...
]

Named Entity Recognition [3]

Each element is a tuple of (entity, type, begin, end), where ends are exclusive offsets.

pku [4]

doc = HanLP(sample, tasks='ner/pku', language='zh')
ner_pku = doc['ner/pku']
ner_pku

部分输出:

[[['克隆巴赫', 'nr', 0, 1], ['美国', 'ns', 7, 8]],[['巴赫', 'nr', 18, 19]],[['美国心理学会', 'nt', 4, 7], ['美国心理学会', 'nt', 12, 15], ['国家科学院', 'nt', 26, 28]],[['巴赫', 'nr', 1, 2]],...
]

人名提取(nr):

nr = [w[0] for s in ner_pku for w in s if w[1]=='nr']
set(nr)
{'巴赫', '维纳', '波旁', '卡尔·海因里希·马克思', '恩格斯', '克隆巴赫', 'Silicon', '乔治·贝克莱', 'J.C', '汉斯·摩根索', '崔琦', '杨振宁', '恩利克·费米', '路易·', '安培', '奥巴马', '雷蒙·阿隆', '斯坦福', '李·克隆巴赫', '菲利浦', '亚伯拉罕·林肯', '约翰·洛克菲勒', 'Lee', '胡润', '卡尔·马克思', '马克思', '乔治·华盛顿', '李政道'}

地名提取(ns):

{'德国', '麦克斯韦', '希腊', '北美洲', '好莱坞', '绥靖', '旧金山', '法国', '中国', '美国', '旧金山湾区', '加利福尼亚州', '白宫', '关岛', '欧美', '加州', '泰晤士', '尔湾', '爱琴海', '香港特区', '华尔街', '奥克兰', '土耳其', '以色列', '北美', '西班牙', '费城', '荷兰', '自由州', '苏联', '帕罗奥多市', '硅谷', '伯克利市', '百老汇', '西欧', '圣迭戈', 'Berkeley', '大英帝国', '斯坦福', '欧洲', '蓄奴州', '地中海', '西西里', '美利坚合众国', '罗马', '古希腊', 'America', '圣塔芭芭拉', '华盛顿哥伦比亚特区', '拉丁美洲', '意大利', '洛杉矶', '爱奥尼亚', '巴黎', '英国', '芝加哥', '大西洋'}

msra [5]

部分输出:

[[['克隆巴赫', 'PERSON', 0, 1], ['2001', 'DATE', 4, 5], ['美国', 'LOCATION', 7, 8]],[['巴赫', 'PERSON', 18, 19]],[['1957年', 'DATE', 0, 2],['美国心理学会', 'ORGANIZATION', 4, 7],['1973年', 'DATE', 9, 11],...],...
]

人名提取(PERSON):

{'巴赫', '维纳', '波旁', '卡尔·海因里希·马克思', '恩格斯', '克隆巴赫', '普利策', '菲尔兹奖', '乔治·贝克莱', 'J.C', '汉斯·摩根索', '崔琦', '李政道', '杨振宁', '恩利克·费米', '路易·', '安培', '奥巴马', '雷蒙·阿隆', '斯坦福', '李·克隆巴赫', '菲利浦', '亚伯拉罕·林肯', '约翰·洛克菲勒', '诺贝尔奖', 'Lee', '胡润', '卡尔·马克思', '马克思', '乔治·华盛顿', '诺贝尔'}

地名提取(LOCATION):

{'德国', '麦克斯韦', '希腊', '北美洲', '绥靖', '旧金山', '法国', '中国', '华盛顿', '美国', '旧金山湾区', '加利福尼亚州', 'Silicon', '法', '北湾', '关岛', '欧美', '伯克利', '加州', '英', '泰晤士', 'Renaissance', '香港特区', '爱琴海', '奥克兰', '希腊半岛', '土耳其', 'Joseph', '大陆', '以色列', '北美', '西班牙', '费城', '荷兰', '自由州', '苏联', '帕罗奥多市', '硅谷', '伯克利市', '西欧', '哥伦比亚特区', 'cybernetics', 'Berkeley', '大英帝国', '欧洲', '美', '西里尔', '蓄奴州', '地中海', '西西里', '美利坚合众国', 'California', '曼哈顿', '阿拉伯语', '希波', '罗马', '古希腊', 'UCSB', 'America', '拉丁美洲', '意大利', '洛杉矶', '爱奥尼亚', '巴黎', '英国', '芝加哥', '大西洋', '地球'}

对比分析

可以发现,msra算法比pku算法识别到了更多英文地名和人名。此外,msra的可识别的实体种类也更多,但速度更慢。对于实际文本分析问题来说,要根据具体问题,选择合适的算法。

python3.8 with packages: hanlp_restful

参考文献

  1. 鲁江坤, 汪林林. Python数据挖掘实践[M]. 西安: 西安电子科技大学出版社, 2021. 190-205.
  2. NER: https://hanlp.hankcs.com/docs/api/hanlp/pretrained/ner.html
  3. TOK: https://hanlp.hankcs.com/docs/api/hanlp/pretrained/tok.html
  4. pku: https://hanlp.hankcs.com/docs/annotations/ner/pku.html
  5. msra: https://hanlp.hankcs.com/docs/annotations/ner/msra.html
  6. He,Han and Choi,Jinho D. (2021) .Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing.Online and Punta Cana, Dominican Republic:Association for Computational Linguistics.

转载请注明出处:©️Sylvan Ding

HanLP中文分词、人名识别、地名识别相关推荐

  1. solr mysql 全文搜索_全文检索Solr集成HanLP中文分词

    以前发布过 HanLP 的 Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),于是就抽空做了个Solr插件出来, ...

  2. Elasticsearch:hanlp 中文分词器

    HanLP 中文分词器是一个开源的分词器,是专为Elasticsearch而设计的.它是基于HanLP,并提供了HanLP中大部分的分词方式.它的源码位于: https://github.com/Ke ...

  3. Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置

    目录 hanlp分词插件 插件安装 在线安装 离线安装 安装数据包 同义词配置 hanlp分词插件 HanLP是一款免费开源(Apache License 2.0协议)中文语义分词工具,它提供中文分词 ...

  4. hanlp中文分词、提取摘要关键字、语句分析、智能推荐

    hanlp资源: hanlp介绍:http://hanlp.linrunsoft.com/ hanlp下载:https://github.com/hankcs/HanLP hanlp(分词)使用:ht ...

  5. 各种中文分词工具的使用方法

    诸神缄默不语-个人CSDN博文目录 本文将介绍jieba.HanLP.LAC.THULAC.NLPIR.spacy.stanfordcorenlp.pkuseg等多种中文分词工具的简单使用方法. 对于 ...

  6. 中文分词工具比较 6大中文分词器测试(哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba、FoolNLTK、HanLP)

    中文分词工具比较 6大中文分词器测试(jieba.FoolNLTK.HanLP.THULAC.nlpir.ltp) 哈工大LTP.中科院计算所NLPIR.清华大学THULAC和jieba 个人接触的分 ...

  7. 基于 HanLP 的 ES 中文分词插件

    一.分词插件 1.分词器概念 在 ES 中,分词器的作用是从文本中提取出若干词元(token)来支持索引的存储和搜索,分词器(Analyzer)由一个分解器(Tokenizer).零个或多个词元过滤器 ...

  8. 中文分词方法汇总笔记

    中文分词方法汇总笔记 分词难点 分词方法 传统基于字典(规则分词) 基于机器学习的分词方法 统计分词 语言模型 隐马尔可夫 HMM 模型 其他 分词工具和云服务 其他 感谢知乎 @华天清 的总结 分词 ...

  9. 中文分词好用的pyhanLP包

    HanLP: Han Language Processing 面向生产环境的多语种自然语言处理工具包(由一系列模型与算法组成的Java工具包),基于 TensorFlow 2.0,目标是普及落地最前沿 ...

  10. 机器学习笔记二十四 中文分词资料整理

    一.常见的中文分词方案 1. 基于字符串匹配(词典) 基于规则的常见的就是最大正/反向匹配,以及双向匹配. 规则里糅合一定的统计规则,会采用动态规划计算最大的概率路径的分词. 以上说起来很简单,其中还 ...

最新文章

  1. Java开发程序员最值得学习的10大技术
  2. 经典C语言程序100例之二八
  3. winform 判断控件有没有被遮挡_编程入门基础之 winform(2)
  4. 如何在VS和CB中配置MySQL环境
  5. 小白学习使用gitee问题产生汇总(持续更新)
  6. codeforces-constructive algorithms(构造算法.)
  7. 「leetcode」860.柠檬水找零【贪心算法】详细!
  8. python生成自己想要的KML文件
  9. 【日常学习——论文写作】毕业论文的查重
  10. 碎碎念情境记忆法——最适合程序员的背单词方法
  11. Android Studio如何更改app名称
  12. 小心肝队-冲刺日志(第六天)
  13. less中的变量 单位问题
  14. Dart语言基础,看完这篇文章就够了(二)
  15. 广工2022年本科毕设office格式模板(参考版)维普格式检验版
  16. mpeg2-ts格式解析
  17. 版本管理:Subversion Edge:角色与权限控制
  18. 不用代码,10分钟会采集微博、微信、知乎、58同城数据和信息
  19. win7一直显示正在关机_win7屏保设置图解
  20. 国家微型计算机三包规定文件,最新国家新三包规定原则

热门文章

  1. java实现日历打印
  2. Layui页面元素之导航
  3. CodeForces 949A Zebras
  4. 十大简单排序:桶排序
  5. 怎样用Python的Numpy库求反正切
  6. 常见的几个接口管理平台简介
  7. 天气预报接口_JMeter 接口自动化测试篇 26
  8. vvic、小红书API接口调用
  9. html调用打印机,[Javascript]网页调用打印机
  10. Android Studio3.0对于百度地图SDK的开发(基于方向传感器实现手机朝向显示)