我想使用停用词列表找到文本文件中最常见的单词。我已经有这个代码:
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
命令:
猫文本.txt | tr ' ' '\n' | grep -v '单词\|word2' |排序| uniq-c|排序-nk1
这是如何运作的
以下是文件内容
$猫文件.txt
Lorem Ipsum 是印刷和排版行业的简单虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一位不知名的印刷商拿走了一堆字体并将其打乱以制作一本字体样本簿。
$ cat file.txt|tr ' ' '\n'| grep -v -w 'an\|a\|is'|排序| uniq-c|排序-nk1|尾部 1 未知 1 当 2和 2 个假人 2 伊普苏姆 2 洛雷姆 2 个 2 文字 2型 3 的
描述:换行换行,然后从列表中剔除单词,然后排序并统计常用的单词