Как игнорировать знаки препинания и символы, добавленные к слову, чтобы они учитывались как одинаковые при подсчете количества слов? - PullRequest
0 голосов
/ 06 декабря 2018

Я пишу программу для подсчета слов каждого слова в любом текстовом файле. Содержимое файла НЕ известно заранее.

Желаемый результат: Например, [книга] [книга!] [Книга-][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);
}

Я не хочу жестко кодировать определенные символы и знаки препинания в регулярном выражении, чтобы игнорировать, поскольку точное содержимое файла неизвестно.

Есть ли какой-нибудь общий способ сделать это?

1 Ответ

0 голосов
/ 06 декабря 2018

Pattern.compile("\\P{L}+").split ...
Это разделит любой символ (или более чем один), который НЕ является буквой какого-либо языка.Я думаю, это дает вам то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...