在列表中列出最常用单词的最简单方法是什么?

在列表中列出最常用单词的最简单方法是什么?

假设我有一堆文本文件,其中包含小说、非小说、报纸文章等(给定语言的文本的随机示例。)

我想要给定单词的频率列表,首先是最常见的单词。

我可以编写一些 C 代码来执行此操作,但如果有更快的方法来执行此操作,我想知道。 (当我说更快时,我指的是编码时间,而不是运行时间。)

答案1

为了更快的编码时间,这是我现在成功尝试的:

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

答案2

用 C 语言编写它很可能具有快速的运行时间,但编写起来需要更长的时间。一个好的折衷方案可能是使用 awk:

计数.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:]_'-为单词成分。

相关内容