使用 Java 8 从字符串句子数组中获取词频

问题描述 投票:0回答:1

所以我有以下数组作为输入

String[] input = new String[] {
       "This is a sample string",
       " string ",                   // additional spaces here cause issues while splitting
       "Another sample string",
       "This is not    a sample string"
};

需要统计单个单词的频率。所需的输出是:

{a=2, not=1, string=4, This=2, is=2, sample=3, Another=1}

到目前为止,我得到了一些工作代码:

// 1. Convert String[] into a single " " delimited String 
String joined = String.join(" ", input);

// 2. Split on " " and then calculate count using Collectors.groupingBy
Map <String, Long> output = Arrays.stream(joined.split(" "))
        .filter(s -> !s.equals(""))    // To Deal with Empty Strings
        .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

System.out.println(output);

这对我来说看起来非常粗糙,请建议使用 Streams API 更好的方法来做到这一点。 谢谢你。

java java-8 java-stream
1个回答
0
投票

您的代码看起来基本正确,进行一些更改即可使其工作。使用

String.split("\\s+")
可以按任何空白字符序列进行拆分,而不是按空格
joined.split(" ")
进行拆分。使用当前代码,任何区分大小写的单词都将被视为两个不同的单词,例如
Sample
sample

 Map<String, Long> output = Arrays.stream(joined.split("\\s+"))
        .map(String::toLowerCase) // For case-insensitivity conversion if needed
        .filter(s -> !s.isEmpty()) // Filter out empty strings 
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
© www.soinside.com 2019 - 2024. All rights reserved.