如何计算 tex 文件中单词出现的次数?我这样做的原因是为了更容易识别我在文本中使用过多的单词。目前我在 bash 中使用以下一行代码。
cat *.tex | sed 's/[[:space:]|[:punct:]]\+/\n/g' | sort | uniq -c | sort -n
它的作用是,输出所有带有 的 .tex 文件cat
,使用 用换行符替换空格和标点符号sed
,sort
输出,计算唯一的单词,然后sort
在 输出数字后再次计算uniq -c
。
我对这种方法的一个问题是,原本属于一个单词但被空格分开的单词会被分开计算。例如“New York”,您会得到 k 个 New 和 n 个 York,并且还会混合出现其他的 New 和 York。
编辑:当然,另一个问题是,如何识别词形变化,例如变格和动词变位?但这可能超出了一行代码的范围,或者有人知道如何应对吗?
编辑2:正如 Hendrik 和 Joseph 指出的那样,这并不是真正与 TeX 相关的,但也许有人会觉得它有用:)
答案1
关于运行 latex,然后dvi2tty
在输出.dvi
文件上使用,不能说太多。这将更好地处理宏扩展。因此,我建议:
dvi2tty 00.dvi | sed 's/[[:space:]|[:punct:]|[:digit:]]\+/\n/g' | sed '/^$/d' | tr "A-Z" "a-z" | sort | uniq -c | sort -nr | sed "/ 1 /d"
它和你的管道类似,不同之处在于
- 它将数字视为分隔符。
- 它忽略空格
- 它消除了空行
- 它会消除仅出现一次的单词。