当前位置: 首页 > 图灵资讯 > 技术篇> Java 结合中文分词库 jieba 统计一堆文本中各个词语的出现次数【代码记录】

Java 结合中文分词库 jieba 统计一堆文本中各个词语的出现次数【代码记录】

来源:图灵教育
时间:2023-06-26 15:45:35

文章目录
  • 1、需求
  • 2、代码
  • 3、结果

1、需求

Java 结合中文分词库 jieba 统计一堆文本中各个词语的出现次数【代码记录】_java

2、代码

package com.zibo.main;import com.huaban.analysis.jieba.JiebaSegmenter;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;public class WordCount {    public static void main(String[] args) {        String file = "C:\\Users\\Administrator\\Desktop\\video_film_no_spaces.txt";        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {            // 读取文本            StringBuilder content = new StringBuilder();            String line;            while ((line = reader.readLine()) != null) {                content.append(line);            }            String text = content.toString();            // 为存储词语和出现次数创建Hashmap            Map<String, Integer> wordCounts = new HashMap<>();            // 使用"jieba“中文分词库”            JiebaSegmenter segmenter = new JiebaSegmenter();            List<String> words = segmenter.sentenceProcess(text);            // 遍历每个单词,统计出出现的次数            for (String word : words) {                // 如果单词已经在Hashmap中,将其计数加1                if (wordCounts.containsKey(word)) {                    int count = wordCounts.get(word);                    wordCounts.put(word, count + 1);                }                // 如果单词不在Hashmap中,则将其添加到Hashmap并设置为1                else {                    wordCounts.put(word, 1);                }            }            // 输出每个单词及其出现次数            for (Map.Entry<String, Integer> entry : wordCounts.entrySet()) {                String word = entry.getKey();                // 若文字长度小于 2 ,跳过                if (word.length() < 2) {                    continue;                }                // 如果文字不是中文,跳过                if (!word.matches([\\u4e00-\u9fa5]+) {                    continue;                }                int count = entry.getValue();                System.out.println(word + " 出现了 " + count + " 次");            }        } catch (IOException e) {            e.printStackTrace();        }    }}

3、结果

D:\MySoft\Environment\Java\jdk-17.0.5\bin\java.exe "-javaagent:D:\MySoft\JetBrains\IntelliJ IDEA 2022.3.1\lib\idea_rt.jar=54655:D:\MySoft\JetBrains\IntelliJ IDEA 2022.3.1\bin" -Dfile.encoding=UTF-8 -classpath ...com.zibo.main.WordCountmain dict load finished, time elapsed 603 msmodel load finished, time elapsed 29 ms.惊栗 出现了 2 次经典 出现了 9 次剧情片 出现了 1 次音乐喜剧 出现了 32 次儿童 出现了 23 次灾难 出现了 39 次同性 出现了 23 次犯罪 出现了 963 次喜剧片 出现了 1 次动画 出现了 81 次传记 出现了 57 次惊悚 出现了 804 次冒险 出现了 548 次奇幻 出现了 490 次爱情喜剧 出现了 370 次枪战 出现了 1 次历史 出现了 120 次伦理 出现了 18 次其他 出现了 1 次音乐 出现了 30 次剧情 出现了 1725 次爱情 出现了 502 次家庭 出现了 205 次动作 出现了 3004 次喜剧 出现了 2807 次情色 出现了 4 次性喜剧 出现了 28 次脱口秀 出现了 9 次科幻 出现了 347 次运动 出现了 74 次恐怖 出现了 291 次戏曲 出现了 2 次黑色 出现了 1 次电影 出现了 1 次西部 出现了 53 次悬疑剧 出现了 33 次纪录片 出现了 8 次歌舞 出现了 38 次文艺 出现了 6 次纪录 出现了 2 次悬疑 出现了 252 次古装 出现了 208 次古装剧 出现了 92 次短片 出现了 9 次歌舞剧 出现了 7 次武侠 出现了 194 次战争 出现了 212 次鬼怪 出现了 1 二次Process finished with exit code 0