Какой лучший способ определить общее количество слов файла в Java? - PullRequest
4 голосов
/ 10 ноября 2008

Как лучше всего узнать общее количество слов в текстовом файле на Java? Я думаю, что Perl лучше всех находит такие вещи. Если это правда, то вызов функции Perl из Java будет лучшим? Что бы вы сделали в таких условиях? Есть идеи получше?

Ответы [ 6 ]

16 голосов
/ 10 ноября 2008
int count = 0;
Scanner sc = new Scanner(new File("my-text-file.txt")); 
while (sc.hasNext()) {
   ++count;
   sc.next();
}
10 голосов
/ 10 ноября 2008

Поздравляем, вы наткнулись на одну из самых больших языковых проблем! Что такое слово? Говорят, что слово является единственным словом, которое на самом деле означает, что это такое. Целая область лингвистики посвящена словам / единицам значения - морфологии.

Я предполагаю, что ваш вопрос касается подсчета слов на английском языке. Однако создание не зависящего от языка счетчика / анализатора слов практически невозможно из-за языковых различий. Например, можно подумать, что достаточно просто обработать группы символов, разделенных пробелами. Однако, если вы посмотрите на следующий пример на японском языке, вы увидите, что этот подход не работает:

こ れ は 日本語 の 例文 で す.

Этот пример содержит 3 разных слова, и ни одно из них не разделено пробелами. Как правило, границы японских слов анализируются с использованием словарного подхода, и для этого есть ряд коммерческих библиотек. Нам повезло с пробелами на английском! Я считаю, что индийские языки, китайский и корейский также имеют похожие проблемы.

Если это решение действительно будет развернуто любым способом, при котором возможен многоязычный ввод, важно иметь возможность подключать различные методы подсчета слов в зависимости от анализируемого языка.

Я думаю, что первый ответ был хорошим, потому что он использует знания Java о значениях пробелов в Юникоде в качестве разделителей. Он токенизируется путем сопоставления с использованием следующего регулярного выражения: \p{javaWhitespace}+

2 голосов
/ 10 ноября 2008

Хотя Perl может это делать, я бы посчитал излишним связывать его / вызывать для такого рода задач (если у вас его уже нет).

  • Я бы посоветовал искать и изучать код, который делает то, что вам нужно в Интернете, например, здесь: http://schmidt.devlib.org/java/word-count.html
1 голос
/ 10 ноября 2008

Если вы работаете в Unix, wc -w filename сделает свое дело.

0 голосов
/ 10 ноября 2008

Делая некоторые предположения о том, что определяет «слово», одним из решений было бы открыть файл с помощью программы чтения текстового потока и отсканировать его, считая количество несмежных пробельных символов, плюс один для конца, например,

 this is some sample text
 this is some more sample text

в приведенном выше тексте будет 11 слов, которые будут считаться 9 пробелами, 1 новой строкой и 1 концом файла

0 голосов
/ 10 ноября 2008

Я бы инициализировал word_count int равным 1, затем перебрал бы каждый символ в файле и увеличивал word_count для каждого символа пробела , если предыдущий символ не был символом пробела. (Пробел, табуляция или новая строка.)

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