gpt4 book ai didi

bash - 如何创建文件中每个单词的频率列表?

转载 作者:行者123 更新时间:2023-11-29 08:42:08 24 4
gpt4 key购买 nike

我有这样一个文件:

This is a file with many words.
Some of the words appear more than once.
Some of the words only appear one time.

我想生成一个包含两列的列表。第一列显示出现的单词,第二列显示出现的频率,例如:

this@1
is@1
a@1
file@1
with@1
many@1
words3
some@2
of@2
the@2
only@1
appear@2
more@1
than@1
one@1
once@1
time@1
  • 为了简化这项工作,在处理列表之前,我将删除所有标点符号,并将所有文本更改为小写字母。
  • 除非有一个简单的解决方案,否则 wordsword 可以算作两个单独的词。

到目前为止,我有这个:

sed -i "s/ /\n/g" ./file1.txt # put all words on a new line
while read line
do
count="$(grep -c $line file1.txt)"
echo $line"@"$count >> file2.txt # add word and frequency to file
done < ./file1.txt
sort -u -d # remove duplicate lines

出于某种原因,这只在每个单词后显示“0”。

如何生成文件中出现的每个单词的列表以及频率信息?

最佳答案

不是sedgrep,而是trsortuniq,和 awk:

% (tr ' ' '\n' | sort | uniq -c | awk '{print $2"@"$1}') <<EOF
This is a file with many words.
Some of the words appear more than once.
Some of the words only appear one time.
EOF

a@1
appear@2
file@1
is@1
many@1
more@1
of@2
once.@1
one@1
only@1
Some@2
than@1
the@2
This@1
time.@1
with@1
words@2
words.@1

在大多数情况下,您还想删除数字和标点符号,将所有内容都转换为小写(否则“THE”、“The”和“the”将单独计算在内)并抑制零长度单词的条目。对于 ASCII 文本,您可以使用以下修改后的命令执行所有这些操作:

sed -e  's/[^A-Za-z]/ /g' text.txt | tr 'A-Z' 'a-z' | tr ' ' '\n' | grep -v '^$'| sort | uniq -c | sort -rn

关于bash - 如何创建文件中每个单词的频率列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10552803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com