软件工程应用与实践(5)——词云的获取

2021SC@SDUSC

文章目录

    • 一、简介
    • 二、word文档分词
      • 2.1 java引入jieba分词
      • 2.2 读取word文档完成分词
    • 三、词云的获取
      • 3.1 获取所有词
      • 3.2 去除停用词
    • 四、总结

一、简介

经过小组分工和讨论后,决定由我负责分析词云的获取和整理的部分。在老年健康知识图谱系统中,词云图表示了知识图谱中出现的专业名词及其出现频率。

软件工程应用与实践(5)——词云的获取

2.2 读取word文档完成分词

上面的小例子是对一个简单的字符串进行中文分词,在本项目中需要对word文档进行分词,因此需要首先读取word文档,再对word文档进行分词

三、词云的获取

在对word文档进行分词分词之后,由于word文档中有很多与医学无关的停用词,这一部分词不能显示到首页上,需要进行筛选,删除停用词后展示到首页。在本项目中,首先从文件中获取停用词,再对获取到的词语进行筛选。

3.1 获取所有词

本项目通过dao层访问数据库,服务层调用dao层接口,controller层调用服务层。mybatis完成dao层接口与sql语句的映射

保存词云的实体类

  • 使用lombok的@Data注解,当编译时自动为实体类添加get,set,equals,hashcode,toString方法
  • 使用lombok的@AllArgsConstructor注解,为类自动添加带参的构造方法
  • 使用lombok的@NoArgsConstructor注解,为类自动添加无参的构造方法
  • 使用lombok的@Accessors注解,可以实现链式调用

延伸说明:链式调用的进一步解释

当我们平时使用实体类,为实体类赋值时,需要反复调用set方法。假设我们有一个User类,里面有name,age,id三个属性,我们需要分别调用三次set方法

由于普通set方法的返回值是void,因此无法实现链式调用。在lombok中,使用@Accessors(chain = true)注解可以使set方法返回本对象,因此使用链式调用可以简化操作,不需要重复写多个set语句,仅需在一个语句中重复调用set方法即可

dao层接口

dao接口中的getWordCloudData()方法完成词云图的获取

mysql中的正则匹配

在使用sql语句从数据库中获取词云的过程中,需要排除非中文字符,本项目中使用mysql中的

函数用于匹配中文字符

3.2 去除停用词

在本项目中,在service层去除停用词,停用词保存在一个文件中,通过hutool的FileReader类按行获取停用词(readLines方法),并保存在List中。之后再对获取的所有词进行筛选,去除停用词即可。本项目利用了list集合中的contains方法判断集合中是否已经存在字符串

service层对应的代码

关于hutool工具中封装的FileReader源码分析

hutool工具对java中一些繁琐的操作(比如日期转换,类型转换,文件读取等)进行了一些封装。由于本课程源码分析,因此我希望在阅读基本的项目代码的基础上,还能进一步了解java工具当中的部分源码。在上面的例子中,我使用了FileReader类,通过传入路径获取FileReader类对象,我们来看一下FileReader底层是怎么实现的

首先找到对应的构造方法,发现这个方法调用了另一个该类中的构造方法

这里的DEFAULT_CHARSET在源码中也有体现。首先FileReader继承FileWrapper,而在FileWrapper类中的static代码块中,声明了DEFAULT_CHARSET为UTF-8

发现调用该构造方法后,这个构造方法又调用了一个新的构造方法

下面这个构造方法被调用

来源:叶卡捷琳堡

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月23日
下一篇 2021年9月23日

相关推荐