最も頻繁に表示される単語のペアを探す

最も頻繁に表示される単語のペアを探す

私はそれぞれ本の1枚を含む10のテキストファイルを持っており、1行で最も頻繁に表示される単語のペアを探したいと思います。つまり、

第1章:

hello world good boy green sun

good green boy sun world hello

第2章:

第3章:

.....など

1枚の希望の出力:

hello world (alphabet order)

答え1

awk '
  {
    $0 = tolower($0)
    for (i = 1; i < NF; i++) {
      pair = $i"" < $(i+1) ? $i" "$(i+1) : $(i+1)" "$i
      c = ++count[pair]
      if (c > max) max = c
    }
  }
  END {
    for (pair in count)
      if (count[pair] == max)
        print pair
  }'

答え2

この試み、

  1. awk各単語のペアを印刷します。
  2. perl単語ペアの単語を並べ替えるために使用されます(渡す)。
  3. sortsum を使用してuniq -c各ペアの発生回数を計算します。

awk '{for (i=1;i<NF;i++) { print tolower($i)" "tolower($(i+1)) }}' file \
| perl -ane '$,=" "; print sort @F; print "\n";' \
| sort | uniq -c | sort -b -k1nr -k2

出力:

  2 boy green
  2 hello world
  1 boy good
  1 boy sun
  1 good green
  1 good world
  1 green sun
  1 sun world

関連情報