NLP第一节练习(1)
文本无处不在,我们可以利用Unix的命令行做一些简单的操作,有的甚至比编写python程序要快得多。
用到的Unix命令
-
man
查看命令的使用
e.g. man tr -
输入/输出重定向
- > 输出到文件
- < 从文件输入
- | 组合
-
tr
tr是个简单的替换命令,从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
tr [OPTION]…SET1[SET2]- -s 如果匹配于SET1的字符在输入序列中存在连续的重复,在替换时会被统一缩为一个字符的长度
- -c 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换。
- -d 删除匹配SET1 的内容,并不作替换。
- -t 削减 SET1 指定范围,使之与 SET2 设定长度相等
- -cs 如果指写了-c,则-s适用于SET1的补码中的字符
- -cd 删除所有SET1补码中的字符
-
sort
将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][–help][–verison][文件]- -b 忽略每行前面开始出的空格字符。
- -c 检查文件是否已经按照顺序排序。
- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字母。
- -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。
- -n 依照数值的大小排序。
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
- -t<分隔字符> 指定排序时所用的栏位分隔字符。
- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
-
uniq
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][–help][–version][输入文件][输出文件]- -c或–count 在每列旁边显示该行重复出现的次数。
- -d或–repeated 仅显示重复出现的行列。
- -f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位。
- -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
- -u或–unique 仅显示出一次的行列。
- -w<字符位置>或–check-chars=<字符位置> 指定要比较的字符。
- –help 显示帮助。
-
head
head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。- -q 隐藏文件名
- -v 显示文件名
- -c<字节> 显示字节数
- -n<行数> 显示的行数
-
rev
rev命令将文件中的每行内容以字符为单位反序输出- -n<数字>:指定显示头部内容的行数;
- -c<字符数>:指定显示头部内容的字符数;
- -v:总是显示文件名的头信息;
- -q:不显示文件名的头信息。
-
tail
用于显示指定文件末尾内容,常用查看日志文件- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示行数
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
- -q, --quiet, --silent 从不输出给出文件名的首部
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
例子1
统计文本中的单词数
- input: nyt_201811.txt
- output: 文件中的单词表及其对应频次
解答
tr -sc ‘A-Za-z’ ‘\n’ < nyt_201811.txt | sort | uniq -c
可以使用head只列出一些结果
例子2
通过将所有大写字母转换成小写字母来合并大小写
解答
- 首先用换换行符分割,把连续的字符以单独的字符表示
- 将所有的大写字母替换成小写字母
- 以字母序排列
- 合并重复项并计数
tr -sc ‘A-Za-z’ ‘\n’ < nyt_201811.txt | tr ‘A-Z’ 'a-z‘ | sort | uniq -c
或者
tr -sc ‘A-Za-z’ ‘\n’ < nyt_201811.txt | tr ‘[:upper:]’ ‘[:lower:]’ | sort | uniq -c
例子3
不同的元音序列的频次
解答
tr -sc ‘A-Za-z’ ‘\n’ < nyt_201811.txt | tr ‘A-Z’ ‘a-z’ | tr -sc ‘aeiou’ ‘\n’ | sort | uniq -c
例子4
找出最常用的50个单词
解答
tr -sc ’A-Za-z’ ‘\n’ < nyt_201811.txt | sort | uniq -c | sort -nr | head -n 50
例子5
找出NYT中以’zz’结尾的单词
解答
tr -sc ’A-Za-z’ ‘\n’ < nyt_201811.txt | tr ‘A-Z’ ‘a-z’ | rev | sort | uniq -c | rev | tail -n 10
??发现不止这么少以’zz‘结尾