Как лучше всего найти общее количество слов в текстовом файле на Java? Я думаю, что Perl лучше всего подходит для поиска таких вещей. Если это правда, то вызов функции Perl из Java был бы лучшим? Что бы вы сделали в таком состоянии? Есть идеи получше?
Как лучше всего определить общее количество слов в файле на Java?
Ответы (5)
Поздравляем, вы столкнулись с одной из самых больших лингвистических проблем! Что такое слово? Говорят, что слово — это единственное слово, которое на самом деле означает то, что оно есть. Есть целая область языкознания, посвященная словам/единицам значения - Морфология.
Я предполагаю, что ваш вопрос относится к подсчету слов на английском языке. Однако создание независимого от языка счетчика/парсера слов практически невозможно из-за лингвистических различий. Например, можно подумать, что достаточно просто обработать группы символов, разделенных пробелом. Однако, если вы посмотрите на следующий пример на японском языке, вы увидите, что такой подход не работает:
これは日本語の例文です。
Этот пример содержит 3 разных слова, и ни одно из них не разделено пробелами. Как правило, границы японских слов анализируются с использованием подхода на основе словаря, и для этого существует ряд коммерческих библиотек. Нам повезло, что есть пробелы на английском языке! Я считаю, что индийские языки, китайский и корейский также имеют схожие проблемы.
Если это решение будет фактически развернуто любым способом, обеспечивающим многоязычный ввод, будет важно иметь возможность подключать различные методы подсчета слов в зависимости от анализируемого языка.
Я думаю, что первый ответ был хорошим, потому что он использует знания Java о значениях пробелов Unicode в качестве разделителей. Он токенизирует путем сопоставления с использованием следующего регулярного выражения: \p{javaWhitespace}+
Хотя Perl может это сделать, я бы посчитал излишним связать его/вызвать его для такого рода задач (если вы еще не проверили это).
- Мое предложение состояло бы в том, чтобы искать и учиться на коде, который делает то, что вам нужно в Интернете, например. здесь: http://schmidt.devlib.org/java/word-count.html< /а>
Если вы используете Unix, wc -w filename
поможет.
делая некоторые предположения о том, что определяет «слово», одним из решений было бы открыть файл с помощью средства чтения текстового потока и отсканировать его, подсчитав количество несмежных пробельных символов плюс один в конце, например.
this is some sample text
this is some more sample text
в приведенном выше тексте будет 11 слов, которые считаются 9 пробелами, 1 новой строкой и 1 концом файла.
Я бы инициализировал word_count
int значением 1, затем прокручивал каждый символ в файле и увеличивал word_count
для каждого символа пробела, если только предыдущий символ не был символом пробела. (Пробел, табуляция или новая строка.)