가장 자주 나타나는 단어 쌍 찾기

가장 자주 나타나는 단어 쌍 찾기

나는 각각 책의 한 장을 포함하는 10개의 텍스트 파일을 가지고 있으며, 한 줄에서 가장 자주 나타나는 단어 쌍을 찾고 싶습니다. 즉,

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

관련 정보