首页 文章 精选 留言 我的

精选列表

搜索[系统工具],共10000篇文章
优秀的个人博客,低调大师

【从入门到放弃-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,转载请注明出处

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册