가장 일반적으로 사용되는 단어 목록을 만드는 가장 쉬운 방법은 무엇입니까?

가장 일반적으로 사용되는 단어 목록을 만드는 가장 쉬운 방법은 무엇입니까?

소설, 논픽션, 신문 기사 등이 포함된 텍스트 파일이 많이 있다고 가정해 보겠습니다. (특정 언어로 된 텍스트의 무작위 예)

가장 일반적인 단어가 먼저 포함된 특정 단어의 빈도 목록을 원합니다.

이를 위해 C 코드를 작성할 수 있지만 더 빠른 방법이 있다면 알고 싶습니다. (더 빠르다는 것은 실행 시간이 아니라 인코딩 시간을 의미합니다.)

답변1

더 빠른 코딩 시간을 위해 지금 성공적으로 시도한 방법은 다음과 같습니다.

printf '%s\n' $(cat *.txt) | sort | uniq -c | sort -gr | less 

답변2

C로 작성하면 런타임이 빨라질 수 있지만 작성하는 데 시간이 더 오래 걸립니다. 좋은 절충안은 awk를 사용하는 것입니다.

count.awk

FNR == NR { pat[$1] = 1; next }
{
  for(p in pat) 
    if(index($0, p)) 
      pat[p]++
} 
END { 
  for(p in pat) 
    print pat[p]-1, p
}

먼저 단어 목록(한 줄에 한 단어)을 읽은 다음 나머지 입력에서 일치하는 항목을 계산합니다. 다음과 같이 실행하세요:

cat *.txt | awk -f tally.awk wordlist - | sort -nr

위의 코드는 하위 문자열과도 일치합니다. 전체 단어만 일치시키려면 index해당 줄을 다음으로 바꾸십시오.

if(match($0, "\\<" p "\\>"))

답변3

다음과 같이 할 수 있습니다(GNU grep 사용).

grep -hEo "[[:alnum:]_'-]+" ./*.txt | sort | uniq -c | sort -rn

위의 내용을 [:alnum:]_'-단어 구성 요소로 변경합니다.

관련 정보