Saya ingin menemukan kata-kata yang paling sering dalam file teks, dengan menggunakan daftar kata berhenti. Saya sudah memiliki kode ini:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10 > test.txt
dari posting lama
tetapi file saya berisi sesuatu seperti ini:
240
21 ipsum
20 Lorem
11 Textes
9 Blindtexte
7 Text
5 F
5 Blindtext
4 Texte
4 Buchstaben
Yang pertama hanya Spasi dan di teksnya ada tanda baca (seperti titik), tapi saya tidak mau, jadi apa yang harus saya tambahkan?
Jawaban yang Diterima:
Pertimbangkan file pengujian ini:
$ cat text.txt
this file has "many" words, some
with punctuation. some repeat,
many do not.
Untuk mendapatkan jumlah kata:
$ grep -oE '[[:alpha:]]+' text.txt | sort | uniq -c | sort -nr
2 some
2 many
1 words
1 with
1 this
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Cara kerjanya
-
grep -oE '[[:alpha:]]+' text.txt
Ini mengembalikan semua kata, dikurangi spasi atau tanda baca, dengan satu kata per baris.
-
sort
Ini mengurutkan kata-kata ke dalam urutan abjad.
-
uniq -c
Ini menghitung berapa kali setiap kata muncul. (Untuk
uniq
agar berfungsi, inputnya harus diurutkan.) -
sort -nr
Ini mengurutkan keluaran secara numerik sehingga kata yang paling sering muncul berada di atas.
Menangani kasus campuran
Pertimbangkan file uji kasus campuran ini:
$ cat Text.txt
This file has "many" words, some
with punctuation. Some repeat,
many do not.
Jika kita ingin menghitung some
dan Some
sama:
$ grep -oE '[[:alpha:]]+' Text.txt | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 with
1 This
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Di sini, kami menambahkan -f
pilihan untuk sort
sehingga akan mengabaikan kasus dan -i
pilihan untuk uniq
sehingga juga akan mengabaikan kasus.
Tidak termasuk kata berhenti
Misalkan kita ingin mengecualikan stopword ini dari hitungan:
$ cat stopwords
with
not
has
do
Jadi, kita tambahkan grep -v
untuk menghilangkan kata-kata ini:
$ grep -oE '[[:alpha:]]+' Text.txt | grep -vwFf stopwords | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 This
1 repeat
1 punctuation
1 file