java 中文词频统计_Java实现中文词频统计
昨日有个中文词频统计的需求, 百度一番后, 发现一大堆标题党文章, 讲的与内容严重不符, 这里就简单记录下自己实现的流程吧!
与英文单词的词频统计不同, 中文的难点在于如何分词, 不过好在有许多优秀的现成库供调用,这里就使用了 ansj_seg 插件.
首先添加依赖:
下载jar
访问 http://maven.nlpcn.org/org/ansj/ 最好下载最新版 ansj_seg/
同时下载nlp-lang.jar 需要和ansj_seg 配套..配套关系可以看jar包中的maven依赖,一般最新的ansj配最新的nlp-lang不会有错。
导入到eclipse ,开始你的程序吧
maven
org.ansj
ansj_seg
5.1.1
基本用法为:
String str = "欢迎使用ansj_seg,(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!" ;
System.out.println(ToAnalysis.parse(str));
欢迎/v,使用/v,ansj/en,_,seg/en,,,(,ansj/en,中文/nz,分词/n,),在/p,这里/r,如果/c,你/r,遇到/v,什么/r,问题/n,都/d,可以/v,联系/v,我/r,./m,我/r,一定/d,尽我所能/l,./m,帮助/v,大家/r,./m,ansj/en,_,seg/en,更快/d,,,更/d,准/a,,,更/d,自由/a,!
下面就贴上代码:
public static void wordFrequency() throws IOException {
Map map = new HashMap<>();
String article = getString();
String result = ToAnalysis.parse(article).toStringWithOutNature();
String[] words = result.split(",");
for(String word: words){
String str = word.trim();
// 过滤空白字符
if (str.equals(""))
continue;
// 过滤一些高频率的符号
else if(str.matches("[)|(|.|,|。|+|-|“|”|:|?|\\s]"))
continue;
// 此处过滤长度为1的str
else if (str.length() < 2)
continue;
if (!map.containsKey(word)){
map.put(word, 1);
} else {
int n = map.get(word);
map.put(word, ++n);
}
}
Iterator> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry = iterator.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
List> list = new ArrayList<>();
Map.Entry entry;
while ((entry = getMax(map)) != null){
list.add(entry);
}
System.out.println(Arrays.toString(list.toArray()));
}
/**
* 找出map中value最大的entry, 返回此entry, 并在map删除此entry
* @param map
* @return
*/
public static Map.Entry getMax(Map map){
if (map.size() == 0){
return null;
}
Map.Entry maxEntry = null;
boolean flag = false;
Iterator> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry = iterator.next();
if (!flag){
maxEntry = entry;
flag = true;
}
if (entry.getValue() > maxEntry.getValue()){
maxEntry = entry;
}
}
map.remove(maxEntry.getKey());
return maxEntry;
}
/**
* 从文件中读取待分割的文章素材.
* 文件内容来自简书热门文章: https://www.jianshu.com/p/5b37403f6ba6
* @return
* @throws IOException
*/
public static String getString() throws IOException {
FileInputStream inputStream = new FileInputStream(new File("/home/as_/IdeaProjects/SpringMaven/article-txt"));
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder strBuilder = new StringBuilder();
String line;
while((line = reader.readLine()) != null){
strBuilder.append(line);
}
reader.close();
inputStream.close();
return strBuilder.toString();
}
最后依旧附上图片:
作者:Asche
java 中文词频统计_Java实现中文词频统计相关推荐
- java判断字符长度_java判断中文字符串长度的简单实例
话不多说,上代码: /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static i ...
- java判断字符串长度_java判断中文字符串长度的简单实例
/** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static int length( ...
- java 文本词频统计_Java实现中文词频统计
昨日有个中文词频统计的需求, 百度一番后, 发现一大堆标题党文章, 讲的与内容严重不符, 这里就简单记录下自己实现的流程吧! 与英文单词的词频统计不同, 中文的难点在于如何分词, 不过好在有许多优秀的 ...
- java统计词频算法_Java实现的词频统计——功能改进
本次改进是在原有功能需求及代码基础上额外做的修改,保证了原有的基础需求之外添加了新需求的功能. 功能: 1. 小文件输入--从控制台由用户输入到文件中,再对文件进行统计: 2.支持命令行输入英文作品的 ...
- java实验6 词频统计_Java实现的词频统计——单元测试
前言:本次测试过程中发现了几个未知字符,这里将其转化为十六进制码对其加以区分. 1)保存统计结果的Result文件中显示如图: 2)将其复制到eclipse环境下的切分方法StringTokenize ...
- java 文本词频统计_java实现文本词频统计
File f=new File(path); Mapmap=new HashMap<>(); Version matchVersion = Version.LUCENE_31; Analy ...
- java web乱码问题_Java Web中文乱码问题解决
一.为什么会出现中文乱码问题: java内核和class文件是基于unicode码的,这使Java程序具有良好的跨平台性,但也导致在Java和JSP文件在编译时以及Java程序与其他媒介交互时等情况下 ...
- java 拼音首字母_java获取中文拼音首字母的实例
导读热词 正文 如下所示: import net.sourceforge.pinyin4j.PinyinHelper; public class PinyinHelperUtil { /** * 得到 ...
- java 中文转成_Java将中文转换成unicode字符。
在看Java国际化程序的实现.从最基础的建立不同国家的属性文件开始吧. 中文:你好! 英语:Hello! 法语:Bonjour! 在属性文件定义时必须按照"名称_国家代码"的形式命 ...
- java二进制转为汉字_Java 实现中文与二进制代码互转
//将二进制字符串转化为中文 import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; im ...
最新文章
- lwip中dns相关函数gethostbyname()的原理
- eltree ref什么时候有_Vue3响应式系统源码解析-Ref篇
- 交互式图表_如何构建罗马数字转换器和交互式罗马数字图表
- 我父亲的新发明--玉米点播器
- [译]优秀的开发人员是培养出来的,不是招聘过来的
- 解决 IDEA导入Eclipse项目出现的中文注释乱码问题
- F - Substrings(一些函数的运用)
- 游戏开发--开源18---Volity|PhiloGL|impactJs|createjs|C...
- NAT(地址转换技术)详解
- “十三五”输电通道规模倍增 重点建设配电网
- 市面上比较好用的钣金展开软件都有哪些?
- VSCode全配置(c++、unity、html...等配置和好用设置,持续更新)
- stm32正常运行流程图_stm32学习笔记之问题总结
- Python计算Arduino声音方向范围和绘制声音位置二维概率分布热图
- VLAN的划分以及三层交换机理论,OMG,太详细了吧,看它!
- 百度首次发布3D地图 杨洋导航语音完整版上线
- Ubuntu桌面自动切换壁纸(不用写脚本和xml配置文件)
- linux设备和驱动匹配的方法,Linux使用设备树的i2c驱动与设备匹配方式
- Spring Cloud全家桶主要组件及简要介绍
- 银行开放api接口_开放标准API如何彻底改变银行业
热门文章
- 本地项目文件上传到码云的全过程(附每个步骤详细插图)
- 计算几何(基础部分)
- Twaver-HTML5基础学习(13)连线(Link)连线的绑定与展开
- 关于二进制转换为十六进制
- 安卓版Qinmei 追番必备神器 缓冲快
- android redis客户端,redis client (redis客户端)
- 求多项式的值之polyval 和polyvalm
- Python常用模块 之 datetime模块——处理时间和日期
- 网络工程师中级--下午科目
- win7计算机事件查看器,win7事件查看器是什么,事件查看器概述