为了账号安全,请及时绑定邮箱和手机立即绑定

Java计算字符串中的词频

标签:
Java

方法一 采用Java8的方式计算

import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @ClassName WordFrequencyStatsJava
 * @Desc 计算字符串中的词频
 * @Author diandian
 **/
public class WordFrequencyStatsJava {

    /**
     * 采用Java8的方式计算字符串中的词频
     * @param str
     * @return
     */
    public Map<String, Long> getWordFreqStats(String str){
        Stream<String> stream = Stream.of(str.toLowerCase(Locale.ROOT).split("\\W+")).parallel();
        Map<String, Long> wordFreq = stream.collect(Collectors.groupingBy(String :: toString, Collectors.counting()));
        return wordFreq;
    }

    public static void main(String[] args) {
        String str = "A good persuasion : therefore , hear me , Hermia .\n" +
                "I have a widow aunt , a dowager \n" +
                "Of great revenue , and she hath no child :\n" +
                "From Athens is her house remote seven leagues ;\n" +
                "And she respects me as her only son .\n" +
                "There , gentle Hermia , may I marry thee ,\n" +
                "And to that place the sharp Athenian law \n" +
                "Cannot pursue us . If thou lov'st me then ,\n" +
                "Steal forth thy father's house to-morrow night ,\n" +
                "And in the wood , a league without the town ,\n" +
                "Where I did meet thee once with Helena ,\n" +
                "To do observance to a morn of May ,\n" +
                "There will I stay for thee .";
        WordFrequencyStatsJava statsJava = new WordFrequencyStatsJava();
        Map<String, Long> stringLongMap = statsJava.getWordFreqStats(str);
        stringLongMap.forEach((k,v) -> System.out.println(k + " 出现的个数:" + v));

    }
}


方法二:使用Apach 的 commons-math3包来计算

引入依赖:

<dependency>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-math3</artifactId>
     <version>3.6.1</version>
</dependency>
import org.apache.commons.math3.stat.Frequency;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * @ClassName WordFrequencyStats
 * @Desc 计算字符串中的词频
 * @Author diandian
 **/
public class WordFrequencyStats {

    /**
     * 计算单词词频
     * @param words
     * @return
     */
    public Map<String, Integer> getWordFreqStats(String[] words){
        Frequency freq = new Frequency();
        for(int i = 0; i < words.length; i++){
            freq.addValue(words[i].trim());
        }

        Map<String, Integer> stringIntegerMap = new HashMap<>();
        for(int i = 0; i < words.length; i++){
            stringIntegerMap.put(words[i], (int)freq.getCount(words[i]));
        }
        return stringIntegerMap;
    }

    public static void main(String[] args) {
        WordFrequencyStats wordFreq = new WordFrequencyStats();
        String str = "A good persuasion : therefore , hear me , Hermia .\n" +
                "I have a widow aunt , a dowager \n" +
                "Of great revenue , and she hath no child :\n" +
                "From Athens is her house remote seven leagues ;\n" +
                "And she respects me as her only son .\n" +
                "There , gentle Hermia , may I marry thee ,\n" +
                "And to that place the sharp Athenian law \n" +
                "Cannot pursue us . If thou lov'st me then ,\n" +
                "Steal forth thy father's house to-morrow night ,\n" +
                "And in the wood , a league without the town ,\n" +
                "Where I did meet thee once with Helena ,\n" +
                "To do observance to a morn of May ,\n" +
                "There will I stay for thee .";

        String[] words = str.toLowerCase(Locale.ROOT).split("\\W+");
        Map<String, Integer> strMap = wordFreq.getWordFreqStats(words);
        for(String key : strMap.keySet()){
            Integer value = strMap.get(key);
            System.out.println(key + " 个数:" + value);
        }
    }
}






点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.5万
获赞与收藏
8507

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消