1行に1つの文を保存するテキストファイルがありますが、1つの文(ファイルの1行)に平均して何単語があるのかを知りたいです。どうすればいいですか?
また、このファイルの一意の単語数と2つのファイルの共通の一意の単語数をどのように計算しますか?
事前にありがとう
答え1
wc file
与えられた数の行、単語、バイトが表示されますfile
。単語対行の比率は、行当たりの平均単語数を提供する。
一意の単語数を計算するには、ファイルを1行に1つの単語(ここでは1つ以上のスペースで区切られた項目)に分割してソートし、一意の単語数を数えます。
tr -s ' ' '\n' < file | sort -u | wc -l
句読点を削除する必要がある場合は、並べ替える前に結果をフィルタリングする必要があります(例えば不要な文字を削除するためtr
)。
2つのファイルの一意の単語数を数えるには、次のようにしますcomm
。
comm -3 <(tr -s ' ' '\n' < file1 | sort -u) <(tr -s ' ' '\n' < file2 | sort -u)
file1
file2
または両方には、発生せずにのみ発生する単語が一覧表示されます。
comm -12 <(tr -s ' ' '\n' < file1 | sort -u) <(tr -s ' ' '\n' < file2 | sort -u)
両方のファイルに表示される単語をリストし、wc -l
パイプで計算します。
複数のファイルの一意の単語数を数えるには、次に供給する前に接続してくださいtr
。
cat file1 file2 | tr -s ' ' '\n' | sort -u | wc -l
答え2
これにより、1 行あたりの平均単語数が印刷されます。
wc input.txt | awk '{print $2 / $1}'
あなたの質問は不明であり、改善が必要です。それが本当にあなたの問題を解決できるかどうかはわかりません。
答え3
以下を使用して単語数を計算します。幸せ(以前のPerl_6)
raku -e 'my @a.=push($_.words.elems) for lines; say @a; put @a.sum; put @a.elems; put @a.sum / @a.elems;'
入力例:
the
the of
the of and
the of and in
the of and in a
the of and in a is
the of and in a is that
the of and in a is that for
the of and in a is that for it
the of and in a is that for it as
出力例:
[1 2 3 4 5 6 7 8 9 10]
55
10
5.5
上記は、Perlシリーズのプログラミング言語であるRakuで書かれた答えです。つまり、Perl/Rakuテーマ変数をlines
繰り返しロードします。配列を宣言し、[ショートカット]演算子を使用して一度に配列に入力を追加します。配列にプッシュされる実際の値は、各行が分類されて計算に使用されるため、単語数です。最後に、出力は、および -divided_by- を使用して生成され、平均を取得します。for
$_
@a
$_
push
.=
@a = @a.push($_.words.elems)
@a
.words
.elems
sum
elems
sum
elems
常にオブジェクトの完全な機械表現を出力するには、を使用しますput
。を使用すると、say
Rakuオブジェクトについて人がより読みやすくまとめることができます(99要素以降の切り捨て)。
[ユニークな単語を数える方法はいくつかあります。以下のリンクを参照してくださいunique
。 ]