java如何求词频
求词频的方法
在Java中求词频可以通过多种方式实现,以下是几种常见的方法:
使用HashMap统计词频
HashMap是统计词频最常用的数据结构,利用键值对存储单词及其出现次数。
import java.util.HashMap;
import java.util.Map;
public class WordFrequency {
public static Map<String, Integer> countWordFrequency(String[] words) {
Map<String, Integer> frequencyMap = new HashMap<>();
for (String word : words) {
frequencyMap.put(word, frequencyMap.getOrDefault(word, 0) + 1);
}
return frequencyMap;
}
public static void main(String[] args) {
String[] words = {"apple", "banana", "apple", "orange", "banana", "apple"};
Map<String, Integer> frequency = countWordFrequency(words);
System.out.println(frequency); // 输出:{orange=1, banana=2, apple=3}
}
}
使用Stream API简化统计
Java 8及以上版本可以使用Stream API简化词频统计代码。
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class WordFrequencyStream {
public static void main(String[] args) {
String[] words = {"apple", "banana", "apple", "orange", "banana", "apple"};
Map<String, Long> frequency = Arrays.stream(words)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(frequency); // 输出:{orange=1, banana=2, apple=3}
}
}
处理文本文件中的词频
如果需要从文本文件中统计词频,可以结合文件读取和上述方法。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FileWordFrequency {
public static void main(String[] args) throws IOException {
String filePath = "sample.txt";
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
Map<String, Long> frequency = lines
.flatMap(line -> Arrays.stream(line.split("\\s+")))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(frequency);
}
}
}
注意事项
- 处理文本时可能需要考虑大小写敏感性,可以通过
toLowerCase()或toUpperCase()统一格式。 - 分割单词时可能需要处理标点符号,可以使用正则表达式如
\\W+。 - 对于大数据量,建议使用并行流(
parallelStream())提高性能。






