ストップワードリストを使用して、テキストファイルで最も頻繁に使用される単語を検索したいと思います。私はすでにこのコードを持っています:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10 > test.txt
古い投稿から
しかし、私のファイルには次のようなものが含まれています:
240
21 ipsum
20 Lorem
11 Textes
9 Blindtexte
7 Text
5 F
5 Blindtext
4 Texte
4 Buchstaben
最初のものは単なるスペースであり、テキストでは句読点(ポイントなど)ですが、これは必要ないので、何を追加する必要がありますか?
承認された回答:
このテストファイルを検討してください:
$ cat text.txt
this file has "many" words, some
with punctuation. some repeat,
many do not.
単語数を取得するには:
$ 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
仕組み
-
grep -oE '[[:alpha:]]+' text.txt
これにより、スペースや句読点を除いたすべての単語が1行に1語返されます。
-
sort
これにより、単語がアルファベット順に並べ替えられます。
-
uniq -c
これは、各単語が出現する回数をカウントします。 (
uniq
の場合 動作させるには、入力を並べ替える必要があります。) -
sort -nr
これにより、出力が数値で並べ替えられ、最も頻繁に使用される単語が一番上に表示されます。
混合ケースの処理
この混合ケースのテストファイルを検討してください:
$ cat Text.txt
This file has "many" words, some
with punctuation. Some repeat,
many do not.
some
を数えたい場合 およびSome
同じように:
$ 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
ここでは、-f
を追加しました sort
のオプション 大文字と小文字と-i
を無視するようにします uniq
のオプション 大文字と小文字も無視するようにします。
ストップワードを除く
これらのストップワードをカウントから除外したいとします:
$ cat stopwords
with
not
has
do
したがって、grep -v
を追加します これらの単語を削除するには:
$ 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