基于电影知识图谱的智能问答系统(四) --HanLP分词器

2023-10-31 05:40

本文主要是介绍基于电影知识图谱的智能问答系统(四) --HanLP分词器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇:基于电影知识图谱的智能问答系统(三) -- Spark环境搭建


一、什么是分词器?


       分词器,是将用户输入的一段文本,分析成符合逻辑的一种工具。到目前为止呢,分词器没有办法做到完全的符合人们的要求。和我们有关的分词器有英文的和中文的分词器:输入文本-关键词切分-去停用词-形态还原-转为小写中文的分词器分为:

单子分词    例:中国人 分成中,国,人

二分法人词 例:中国人 分成中国,国人

词典分词    例:中国人 分成中国,国人,中国人

现在用的是极易分词和庖丁分词

停用词:不影响语意的词


分词器有很多,比如中文分词器 IK Analyzer,有兴趣的可以看我的另一篇博文,其中有介绍它和Solr的结合使用


地址:Solr 7.2.1 配置中文分词器 IK Analyzer



二、什么是HanLP分词器?

首先:分词器自然语言处理

其次:HanLP也是一种分词器

最后:HanLP不仅能够分词,而且还可以标注单词的词性(这个很关键的,后面章节会再次讲到这个特性)


在线演示:http://hanlp.hankcs.com/




比如,在Java中随便来个句子使用HanLP进行分词如下:




这里我们还额外添加了自己的分词,比如好热啊中的“好热”,我们添加后并标注其词性为ng,当然ng是我们随便起的


执行这段代码,分词效果如下





这种词性标注有什么好处呢?  == 比如,所有人名均可以用nr这个标签来替代,思考下如下3个问题


1、张学友的生日是什么时候

2、巩俐的生日是什么时候

3、成龙的生日是什么时候


如果用HanLP分词后,相信 张学友 、巩俐、成龙的词性均是nr,不信的话,请看下面的截图




为什么HanLP会有这种能力呢? (博文下面会讲到如何在Spring-Boot项目中集成HanLP)


因为其有一堆的字/词典数据集,其中就包括了人名这个dict,如下




因此,针对1、2、3的问题,我们可以将其做成一个问题模板,如下


nr的生日是什么时候


于是乎,不管你问上述三个哪一个问题,我得到最终答案的步骤如下:


1、拿到原始句子(问题)

2、对原句子进行抽象,将人名用nr替换并抽象句子,比如张学友的生日是多少替换成nr的生日是多少

3、抽象句子匹配问题模板(一堆问题数据集合由Spark进行训练并计算),比如 nr 生日

4、问题模板还原成最终的问题,比如 nr 生日,替换其中的nr=张学友,最后效果就是 张学友 生日

5、拿到问题后,去图形数据库neo4j中查找问题的答案,比如





项目中使用HanLP+Spark的效果如下





前端展示如下





三、HanLP下载安装



官网下载地址:HanLP-汉语言处理包


这里我们采用第二种方式下载






(1)由于我们要集成到Spring-Boot中,因此,我们不需要下载jar包,而是通过pom依赖进行jar添加,而这里,我们需要下载hanlp的配置文件





(2)下载完配置文件后,我们需要下载HanLP的字典数据集


github下载地址:https://github.com/hankcs/HanLP/releases


打开地址,我们找到数据包的下载链接:






这个数据集有点大,下载会慢一点,请耐心等待下载完成






(3)上述两步完成后,接下来就是集成到我们的项目中使用了





四、Spring-Boot集成HanLP



(1)pom依赖



<!-- JUnit单元测试 -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId>
</dependency>
<!-- HanLP汉语言处理包 -->
<dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.6.3</version>
</dependency>


(2)添加HanLP属性配置文件【基于上述下载下来的】








(3)hanlp.properties属性文件说明


其实也没有上面好说明的,文件里面的注释已经很详细了,唯一注意一点的是这个地方:


每次更新自定义的新词典xxx.txt的内容时,要删除同目录下的词典缓存文件CustomDictionary.txt.bin


删除后,重启项目会报一个警告的错误,我们不用理会,由于HanLP会加载数据集到内存中,因此启动的过程会有点慢,等待HanLP加载完数据后,我们就可以使用它了







五、HanLP单元测试


HanLPTest.java


import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.dictionary.CustomDictionary;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;public class HanLPTest {@Testpublic void TestA(){String lineStr = "明天虽然会下雨,但是我还是会看周杰伦的演唱会。";try{Segment segment = HanLP.newSegment();segment.enableCustomDictionary(true);/*** 自定义分词+词性*/CustomDictionary.add("好热","ng 0");List<Term> seg = segment.seg(lineStr);for (Term term : seg) {System.out.println(term.toString());}}catch(Exception ex){System.out.println(ex.getClass()+","+ex.getMessage());}		}
}


执行结果如下:


明天/t
虽然/c
会/v
下雨/vi
,/w
但是/c
我/rr
还是/c
会/v
看/v
周杰伦/nr
的/ude1
演唱会/n
。/w

下一篇:基于电影知识图谱的智能问答系统(五) --Spark朴素贝叶斯分类器

这篇关于基于电影知识图谱的智能问答系统(四) --HanLP分词器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313190

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1