GNU/Linux >> LINUX-Kenntnisse >  >> Linux

N häufigste Wörter in einer Datei mit einer Stoppwortliste von der Befehlszeile aus finden?

Ich möchte die häufigsten Wörter in einer Textdatei finden, indem ich eine Stoppwörterliste verwende. Ich habe bereits diesen Code:

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

aus einem alten Post
aber meine Datei enthält so etwas:

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

Das erste ist nur ein Leerzeichen und im Text sind es Satzzeichen (wie Punkte), aber das möchte ich nicht, also was muss ich hinzufügen?

Akzeptierte Antwort:

Betrachten Sie diese Testdatei:

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

So erhalten Sie eine Wortanzahl:

$ 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

Wie es funktioniert

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

    Dies gibt alle Wörter abzüglich Leerzeichen oder Satzzeichen mit einem Wort pro Zeile zurück.

  • sort

    Dies sortiert die Wörter in alphabetischer Reihenfolge.

  • uniq -c

    Dabei wird gezählt, wie oft jedes Wort vorkommt. (Für uniq um zu funktionieren, muss seine Eingabe sortiert sein.)

  • sort -nr

    Dadurch wird die Ausgabe numerisch sortiert, sodass das häufigste Wort ganz oben steht.

Umgang mit gemischten Fällen

Betrachten Sie diese gemischte Testdatei:

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

Wenn wir some zählen wollen und Some genauso:

$ 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

Hier haben wir das -f hinzugefügt Option zum sort damit Groß- und Kleinschreibung und das -i ignoriert werden Option zu uniq damit auch die Groß-/Kleinschreibung ignoriert wird.

Stoppwörter ausgenommen

Angenommen, wir möchten diese Stoppwörter aus der Zählung ausschließen:

$ cat stopwords 
with
not
has
do

Also fügen wir grep -v hinzu um diese Wörter zu eliminieren:

$ 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. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Verwenden von Google Drive über die Linux-Befehlszeile

  3. Wie finde ich das häufigste Wort in einer .csv-Datei und ignoriere Duplikate in jeder Zeile?

  4. Ein kleiner Trick:Wählen Sie mit shuf eine zufällige Datei oder Zeile in der Datei aus

  5. Klicken Sie mit der rechten Maustaste, um Untertitel aus dem Dateimanager oder der Befehlszeile mit OpenSubtitlesDownload.py herunterzuladen

So suchen Sie nach Dateien über die Linux-Befehlszeile

So senden Sie eine E-Mail mit Dateianhang von der Befehlszeile aus

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl

was ist der zuverlässigste befehl, um die tatsächliche größe einer datei zu finden linux

Listen Sie Partitionsbezeichnungen über die Befehlszeile auf

Wie kann ich eine Datei mit Zeilennummern öffnen, die von der Befehlszeile in 'vi' angezeigt werden?