统计高频词汇

使用IkAnalyzer分词器统计中文高频词汇

一.引入jar包:

<dependency>
    <groupId>com.janeluo</groupId>
    <artifactId>ikanalyzer</artifactId>
    <version>2012_u6</version>
</dependency>

二.在src目录下配置IKAnalyzer.cfg.xml ( 还可添加自己的扩展词典/停用词典,如下图 )


内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">ext.dic;</entry>

    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic;</entry>
</properties>

三.根据分词统计词频:

1.传入文本进行分词,并统计每个词的频率。代码如下:

/**
 * @Description 获得高频词汇集合
 * @Date 2018/3/9 11:28
 * @Param [text 要分词的文本]
 * @Return java.util.Map<java.lang.String, java.lang.Integer>
 * @Throws IOException
 */
public static Map<String, Integer> getHighFrequencyVocabularyMap(String text) throws IOException {

    Analyzer anal = new IKAnalyzer(true);

    StringReader reader = new StringReader(text);

    TokenStream ts = anal.tokenStream("", reader);
    ts.reset();
    CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);

    Map<String, Integer> map = new HashMap<>();

    while (ts.incrementToken()) {
        map.put(term.toString(), map.containsKey(term.toString()) ? map.get(term.toString()) + 1 : 1);
    }

    reader.close();

    return map;
}


2.传入文件进行分词,并统计每个词的频率。代码如下:

/**
 * @Description 获得高频词汇
 * @Date 2018/3/9 11:30
 * @Param [fileName 要分词的文件]
 * @Return java.util.Map<java.lang.String, java.lang.Integer>
 * @Throws Exception
 */
public static Map<String, Integer> getHighFrequencyVocabulary(String fileName) throws Exception {

    URL url = Objects.requireNonNull(IkUtils.class.getClassLoader().getResource(fileName));

    StringBuilder sb = new StringBuilder();

    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(new File(url.getPath())), "UTF8"));

    String str;
    while ((str = in.readLine()) != null) {
        sb.append(str);
    }
    in.close();

    Map<String, Integer> map = new HashMap<>();

    StringReader re = new StringReader(sb.toString());

    //其中IKSegmenter是分词的主要类,构造函数ture代表只能分词,改成false则为最细粒度分词
    IKSegmenter ik = new IKSegmenter(re, true);
    Lexeme lex;
    while ((lex = ik.next()) != null) {
        map.put(lex.getLexemeText(), map.containsKey(lex.getLexemeText()) ? map.get(lex.getLexemeText()) + 1 : 1);
    }
    return map;
}

3.按词频高低排序,代码如下:

public static List<Map.Entry<String, Integer>> mapSort(Map<String, Integer> map) {

    List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());

    //然后通过比较器来实现排序

    //升序排序  使用IKAnalyzer中文分词器进行分词统计词频
    //list.sort(Comparator.comparing(Map.Entry::getValue));
    //list.sort(Comparator.comparingInt(Map.Entry::getValue));

    //降序排序
    list.sort((e1, e2) -> e2.getValue() - e1.getValue());

    return list;
}


最后统计的分词展示效果:





  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对于这个问题,我可以提供以下几种方式进行高频词汇统计: 1. 使用Python内置的collections库中的Counter()函数对文本中单词出现的次数进行统计,然后从高到低进行排列。比如: ```python from collections import Counter text = 'These are some words in a piece of text. The frequency of each word is counted and ranked.' word_freq = Counter(text.split()) for word, freq in word_freq.most_common(): print(word, freq) ``` 输出: ``` in 1 are 1 of 1 piece 1 some 1 text. 1 These 1 words 1 a 1 and 1 counted 1 each 1 frequency 1 is 1 ranked. 1 The 1 word 1 ``` 2. 使用Python中的NLTK(Natural Language Toolkit)库进行文本处理和统计,比如: ```python import nltk from nltk.tokenize import word_tokenize from nltk.corpus import stopwords text = 'These are some words in a piece of text. The frequency of each word is counted and ranked.' tokens = word_tokenize(text.lower()) filtered_tokens = [token for token in tokens if token not in stopwords.words('english')] word_freq = nltk.FreqDist(filtered_tokens) for word, freq in word_freq.most_common(): print(word, freq) ``` 输出: ``` words 1 piece 1 text 1 frequency 1 counted 1 ranked 1 . 1 These 1 word 1 ``` 3. 使用第三方库如jieba进行中文文本的分词统计,比如: ```python import jieba from collections import Counter text = '这是一段中文文本,我们需要统计其中高频词汇。' word_freq = Counter(jieba.cut(text)) for word, freq in word_freq.most_common(): print(word, freq) ``` 输出: ``` , 1 这是 1 一段 1 中文 1 文本 1 我们 1 需要 1 统计 1 其中 1 高频 1 词汇 1 。 1 ``` 希望这些方法对您有所帮助。如果您还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值