没有使用egrep的停用词的单词频率

时间:2017-10-18 14:06:47

标签: bash shell terminal grep frequency

我想在文字文本中计算字频率" 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 

为什么这不起作用,应该是什么样的正确脚本?

注意:输出应该从低频率到高频率排序!

1 个答案:

答案 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