Это довольно распространенный способ найти «N самых распространенных вещей», за исключением того, что вы пропустили a sort
, и у вас есть подарок cat
:
tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -10
Если вы не вставите sort
перед этим, uniq -c
вы, вероятно, получите много ложных синглтон-слов. uniq
делает только уникальные линии, а не уникальность.
РЕДАКТИРОВАТЬ: я забыл трюк, "стоп-слова". Если вы смотрите на текст на английском языке (извините, здесь говорят на одноязычном языке для Северной Америки), такие слова, как "of", "и", "the", почти всегда занимают верхние два или три места. Вы, вероятно, хотите устранить их. В дистрибутиве GNU Groff есть названный файл, eign
который содержит довольно приличный список стоп-слов. Мой Arch дистрибутив есть /usr/share/groff/current/eign
, но я думаю, что я также видел /usr/share/dict/eign
или /usr/dict/eign
в старых Unixes.
Вы можете использовать стоп-слова, как это:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10
Я предполагаю, что большинство человеческих языков нуждаются в аналогичных «стоп-словах», удаленных из значимых значений частоты слов, но я не знаю, где предложить другие языки, чтобы остановить список слов.
РЕДАКТИРОВАТЬ: fgrep
следует использовать -w
команду, которая включает сопоставление целых слов. Это позволяет избежать ложных срабатываний в словах, которые просто содержат короткие остановки, такие как «а» или «я».