【从入门到放弃-Java】工具-词频分析
前言
最近有根据文件内容进行词频分析的需求,如果是纯英文的,写个程序处理比较容易,但涉及到中文词频分析,最关键的一步就是中文分词。
搜了不少文章,最后找到一篇比较好用的 Java实现中文词频统计。主要利用了ansj_seg进行中文分词,分词后再进行词频统计。
针对文章中提供的代码示例,做了稍许改动,贴在下面 做个记录。
依赖
添加最新版ansj_seg依赖
<dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>5.1.6</version> </dependency>
代码实现
代码可见 AloofJr
package com.my.tools.ansj; import com.alibaba.common.lang.StringUtil; import org.ansj.splitWord.analysis.ToAnalysis; import java.io.*; import java.util.*; /** * 对文件中文分词后,根据词频排序输出 * @author wq * @date 2020/4/8 */ public class Analysis { public static void main(String[] args) throws IOException { wordFrequency(""); } public static void wordFrequency(String path) throws IOException { List<Map.Entry<String, Integer>> wordList = getWordList(path); wordList.forEach(entry -> { System.out.println(entry.getKey() + "\t" + entry.getValue()); }); } /** * 获取 分词-词频 列表 * */ private static List<Map.Entry<String, Integer>> getWordList(String path) throws IOException { Map<String, Integer> map = new HashMap<>(16); String result = ToAnalysis.parse(getString(path)).toStringWithOutNature(); //分词后的内容,分词间使用英文逗号分隔。 String[] words = result.split(","); for (String word : words) { String str = word.trim(); // 过滤空白字符 if (StringUtil.isBlank(str)) { 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); } } return sortByValue(map); } /** * 根据词频从高到低排序 * */ private static List<Map.Entry<String, Integer>> sortByValue(Map<String, Integer> map) { if (map == null) { return null; } List<Map.Entry<String, Integer>> list = new ArrayList<>(); list.addAll(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }); return list; } /** * 获取文件内容 * */ private static String getString(String path) throws IOException { FileInputStream inputStream = new FileInputStream(new File(path)); 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
出处:https://www.cnblogs.com/asche/p/9673611.html
更多文章
见我的博客:https://nc2era.com
written by AloofJr,转载请注明出处

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java工程师如何写出高效代码?
1.常量&变量 1.1.直接赋值常量值,禁止声明新对象 直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常量值。 反例:Long i = new Long(1L);String s = new String("abc"); 正例:Long i = 1L;String s = "abc"; 1.2.当成员变量值无需改变时,尽量定义为静态常量 在类的每个对象实例中,每个成员变量都有一份副本,而成员静态常量只有一份实例。 反例:public class HttpConnection { private final long timeout = 5L; ... } 正例:public class HttpConnection { private static final long TIMEOUT = 5L; ... } 1.3.尽量使用基本数据类
- 下一篇
史上最强副驾驶——开车打瞌睡?Python叫醒你
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足4小时,交通事故肇事几率等同于醉驾。 为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生。这是一项安全技术,可以预防驾驶员在驾驶过程中因疲劳而导致的安全事故。 该Python中级项目的目的是建立一个驾驶员疲劳检测系统,用于检测人眼闭合时长。当检测到驾驶员疲劳驾驶时,该系统将发出警告。 驾驶员疲劳检测系统 本Python项目将使用OpenCV收集来自网络摄像头的图像,将其输入到“深度学习”模型中,由该模型对人眼按“睁开”或“闭合”进行分类。该Python项目将采取的方法如下: 第1步-从相机中获取图像作为输入。 第2步-检测图像中的脸部并创建一个感兴趣区(ROI)。 第3步-从ROI中检测人眼并将其输入分类器。 第4步-分类器将按睁开或闭合对人眼进行分类。 第5步-计算分数判断驾驶员是否处于疲劳状态。 在学习先决条件、数据集和模型结构前,如果您是新手,建议您参考Python MasterSheet先了...
相关文章
文章评论
共有0条评论来说两句吧...