To prawie najczęstszy sposób na znalezienie „N najczęstszych rzeczy”, z tym wyjątkiem, że brakuje sort
Ci i masz za darmo cat
:
tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -10
Jeśli nie wpiszesz sort
wcześniej uniq -c
, prawdopodobnie uzyskasz wiele fałszywych singletonów. uniq
robi tylko unikalne przebiegi linii, a nie ogólną unikalność.
EDYCJA: Zapomniałem sztuczki „stop words”. Jeśli patrzysz na tekst w języku angielskim (przepraszam, jednojęzyczny tutaj w Ameryce Północnej), słowa takie jak „of”, „and”, „the” prawie zawsze zajmują pierwsze dwa lub trzy miejsca. Prawdopodobnie chcesz je wyeliminować. W dystrybucji GNU Groff znajduje się plik o nazwie eign
, który zawiera całkiem przyzwoitą listę słów kluczowych. Moja dystrybucja Arch ma /usr/share/groff/current/eign
, ale myślę, że widziałem też /usr/share/dict/eign
lub /usr/dict/eign
w starych Uniksach.
Możesz użyć takich słów zatrzymania:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10
Domyślam się, że większość ludzkich języków potrzebuje podobnych „słów kluczowych” usuniętych z liczącej częstotliwości słów, ale nie wiem, gdzie sugerować, aby uzyskać listy słów kluczowych innych języków.
EDYCJA: fgrep
należy użyć -w
polecenia, które umożliwia dopasowanie całego słowa. Pozwala to uniknąć fałszywych trafień w słowach, które zawierają jedynie krótkie zatrzymania, takie jak „a” lub „i”.