불용어 목록을 사용하여 텍스트 파일에서 가장 일반적인 단어를 찾고 싶습니다. 이미 다음 코드가 있습니다.
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
첫 번째는 단지 공백이고 텍스트에서는 구두점(점과 같은)이지만 이를 원하지 않는데 무엇을 추가해야 합니까?
답변1
다음 테스트 파일을 고려해보세요.
$ 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
이렇게 하면 공백이나 구두점을 제외한 모든 단어가 한 줄에 한 단어씩 반환됩니다.
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
답변2
주문하다:
cat text.txt | tr ' ' '\n' | grep -v 'word\|word2' |sort|
어떻게 작동하나요?
다음은 파일 내용입니다
$catfile.txt
Lorem Ipsum은 인쇄 및 조판 산업의 단순한 더미 텍스트입니다. Lorem Ipsum은 1500년대 무명 인쇄업자가 활자 갤리를 가져와 활자 견본 책을 만들기 위해 뒤섞인 이후 업계 표준 더미 텍스트였습니다.
$ cat file.txt|tr ' ' '\n'| grep -w 'an\|a\|is'|sort| 1 알 수 없음 1 언제 2 및 인형 2개 2 입숨 2 로렘 2 텍스트 2개 유형 2 3개
설명하다: 새 줄을 줄 바꿈한 다음 목록에서 단어를 제거한 다음 일반적으로 사용되는 단어를 정렬하고 계산합니다.