Я пишу программу для подсчета слов каждого слова в любом текстовом файле. Содержимое файла НЕ известно заранее.
Желаемый результат: Например, [книга] [книга!] [Книга-][book?] [book,] [book's] и лайки, которые будут рассматриваться как одинаковые для подсчета слов.
Текущий вывод: book = 2, book. = 1, book - = 1, book? = 5, book = 3, book = 2, book! = 1
Когда я на самом деле ищудля book = 15
try(Stream<String> fileContents = Files.lines(filePath)){
Function<String, Stream<String>> splitIntoWords = line -> Pattern.compile(" ").splitAsStream(line);
Map<String, Long> wordFrequency = fileContents.flatMap(splitIntoWords)
.filter(word -> word.trim().length() > 4) //Consider only Words with length greater than 4
.map(String::toLowerCase)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(wordFrequency);
}
Я не хочу жестко кодировать определенные символы и знаки препинания в регулярном выражении, чтобы игнорировать, поскольку точное содержимое файла неизвестно.
Есть ли какой-нибудь общий способ сделать это?