我想在文字文本中计算字频率" text.txt"不使用终端计算停用词(来自名为" stopwords.txt"的列表)。
cat text.txt | tr -sc 'A-Za-z' '\n' | tr 'A-Z' 'a-z' | egrep -vwFf stopwords.txt | sort | uniq -c
为什么这不起作用,应该是什么样的正确脚本?
注意:输出应该从低频率到高频率排序!
答案 0 :(得分:0)
您可以考虑使用awk
使用一个进程而不是效率较低的管道来执行此操作:
$ awk 'BEGIN{RS="[^[:alpha:]]"}
/^$/{next}
{word=tolower($1)}
FNR==NR {stop[word]; next}
word in stop {next}
{wc[word]++}
END{ for (e in wc) printf "%4d\t%s\n", wc[e], e }
' stopwords words
(gawk
仅在这种情况下......)
POSIX awk:
$ awk 'BEGIN{FS="[^[:alpha:]]"}
{for (i=1; i<=NF; i++){
word=tolower($i)
if (FNR==NR)
stop[word]
else if (word in stop || $i~/^$/)
continue
else
wc[word]++
}
}
END{ for (e in wc) printf "%4d\t%s\n", wc[e], e }
' stopwords words
然后,您的“管道”可以通过sort
| sort -n