GNU/Linux >> Znalost Linux >  >> Linux

Najít N nejfrekventovanějších slov v souboru se seznamem stop slov z příkazového řádku?

Chci najít nejčastější slova v textovém souboru pomocí seznamu stop slov. Tento kód již mám:

tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head  -10 > test.txt

ze starého příspěvku
, ale můj soubor obsahuje něco takového:

240 
 21 ipsum
 20 Lorem
 11 Textes
 9 Blindtexte
 7 Text
 5 F
 5 Blindtext
 4 Texte
 4 Buchstaben

První je jen mezera a v textu jsou to interpunkční znaménka (jako tečky), ale tohle nechci, tak co k tomu mám dodat?

Přijatá odpověď:

Zvažte tento testovací soubor:

$ cat text.txt
this file has "many" words, some
with punctuation.  some repeat,
many do not.

Chcete-li získat počet slov:

$ 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

Jak to funguje

  • grep -oE '[[:alpha:]]+' text.txt

    Tím se vrátí všechna slova bez mezer nebo interpunkce s jedním slovem na řádek.

  • sort

    Tím se slova seřadí v abecedním pořadí.

  • uniq -c

    Toto počítá, kolikrát se každé slovo vyskytuje. (Pro uniq aby fungoval, jeho vstup musí být setříděn.)

  • sort -nr

    Toto seřadí výstup číselně tak, aby nejčastější slovo bylo nahoře.

Zpracování smíšených případů

Zvažte tento testovací soubor se smíšenými případy:

$ cat Text.txt
This file has "many" words, some
with punctuation.  Some repeat,
many do not.

Pokud chceme počítat some a Some stejně:

$ 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

Zde jsme přidali -f možnost sort takže bude ignorovat malá a velká písmena a -i možnost uniq takže bude také ignorovat malá a velká písmena.

Vyloučení zastavovacích slov

Předpokládejme, že chceme tato zastavovací slova vyloučit z počítání:

$ cat stopwords 
with
not
has
do

Takže přidáme grep -v k odstranění těchto slov:

$ 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. Najít N nejfrekventovanějších slov v souboru?

  2. Jak najít nejfrekventovanější slovo v souboru .csv, ignorovat duplikáty na každém řádku?

  3. Jak najít proces s maximálním počtem deskriptorů souborů?

  1. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

  2. Klepnutím pravým tlačítkem stáhnete titulky ze správce souborů nebo příkazového řádku pomocí OpenSubtitlesDownload.py

  3. Jak vymazat obsah souboru z příkazového řádku?

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Tisk z příkazového řádku pomocí LibreOffice, příkazy lpr?

  3. Jak mohu otevřít soubor s čísly řádků zobrazenými z příkazového řádku v 'vi'?