GNU/Linux >> Belajar Linux >  >> Linux

Temukan N Kata Paling Sering Dalam File Dengan Daftar Kata Berhenti Dari Baris Perintah?

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

Linux
  1. Temukan file dan direktori di Linux dengan perintah find

  2. Menggunakan Google Drive dari Baris Perintah Linux

  3. Temukan N Kata Paling Sering Dalam Sebuah File?

  1. Bagaimana Menemukan Kata Yang Paling Sering Di File .csv, Mengabaikan Duplikat Pada Setiap Baris?

  2. Bagaimana Menemukan Proses Dengan Deskriptor File Maksimum?

  3. Sedikit trik:pilih file atau baris acak di file dengan shuf

  1. Salin dan tempel di baris perintah Linux dengan xclip

  2. Temukan versi WordPress dari baris perintah

  3. Cara menggabungkan perintah 'tar' dengan 'find'