Java教程

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);
        }
    }
}






这篇关于Java计算字符串中的词频的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!