用Linux处理语料(持续更新中)
自然语言的计算机处理一开始就是在类Unix系统中进行的,很多早期的NLP程序等等都是在Unix环境下开发的,所以大多可以看到源代码,研究者可以根据自身的需要对其进行修改完善,或者放到自己的程序中,来实现一些更高级的功能。
我们这里大多是英语老师或学生,外语出身,对技术方面掌握得可能不是很多,另外可能多数用的是Windows操作系统,习惯了使用带有图形界面(GUI)的软件,对命令行并不熟悉。但是,Windows下必须使用一些特定的软件才做得到的功能,在Linux下往往用发行版自带的命令行工具就可以完成,而且没有商业软件的各种限制(比如限制只能处理特定长度的文件等)。Linux下默认就安装了perl、bash等环境,而这些东西其实是实现文本处理的真正功臣,软件其实多半是在其基础上加入了图形界面而已。这里列出的是几个最基本的小工具的用法。我是当英语老师的,出于教学科研需要在这个优秀的论坛里学到了许多宝贵的知识和技能,以此作为一点回报。此处抛砖引玉,说得不正确之处请各位高手指正并补充。
文件处理:
转换文本文件的编码
enca filename #首先探测该文件的编码
enconv filename #将其转换为你的locale编码,如Linux中普遍采用的UTF-8
enconv -x GB2312 filename
将小文件拼接为大文件
cat file1 file2 > file3 # 把file1与file2连接起来,输出到file3
cat -n file1 file2 > file3 # -n表示加行号
将大文件largefile切割成小文件
split -bytes=1m largefile outputprefix
split -bytes=40k largefile outputprefix
split -bytes=800b largefile outputprefix
注:outputprefix为指定输出文件的共同前缀,如mycorpus;该命令输出时默认加上两位排序字母为后缀,如aa, ab, ..., 最终输出的各文件名为mycorpusaa, mycorpusab, mycorpusac, ...
批量更改文件名
rename 's/\.bak$//' *.bak # 把文件名中的.bak全部去掉
rename 's/Ch(\d*)/第$1回/' *.txt # 把'Ch04'改为'第04回'
将pdf文件转换为纯文本文件
pdftotext filename.pdf filename.txt
字符串操作:
批量替换多个文本文件中的符合regexp的字符串为指定字符串string
sed -i 's/regexp/string/g' *.txt
去掉tag
sed -i 's/tag//g' *.txt
sed -i 's/_\w+//g' *.txt # 把 _NN0这种类型的tag去掉
sed -i 's/\/\w+//g' *.txt # 去掉Brown库所使用那种类型的tag
sed -i 's/\[[^]]+\]//g' *.txt # 去掉CLEC所使用那种类型的标注
sed -i 's/<[^>]*>//g' *.txt # 去掉<*>类型的标注
检索操作(许多内容待补充):
在文件中检索指定字符串(中文文本无需先分词)
grep Oliver OliverTwist.txt
grep 三个代表 20081211.txt
grep -w pain * # 在所有文件中寻找作为独立单词的pain,即不包括Spain/painful/pains/paint/painting/paints等,相当于AntConc软件中的Word选项
grep -i china * # 在所有文件中寻找china,不分大小写
grep vp3 *.txt > vp3.txt # 到CLEC/st目录里,在所有的5个库文件中寻找包含vp3的所有行,将结果输出到vp3.txt中
grep '<w VBG>' *.txt > vbg.txt # 找到所有包含<w VBG>的行,将结果输出到vbg.txt
注:关于在grep中使用正则表达式,见http://www.robelle.com/smugbook/regexpr.html
Windows下的一些优秀软件工具也有Linux版本,如
AntConc http://www.antlab.sci.waseda.ac.jp/software.html 该页面可下载各平台版本
ICTCLAS http://www.ictclas.org/Download.html 该页面有开源、共享等数个版本下载,都可以运行于Linux环境下
目前最方便易用的Linux发行版是Ubuntu(最新版本为9.10,代号为Karmic Koala)。Windows用户可以用Ubuntu带的一个小工具wubi.exe将Ubuntu安装到Windows系统中,就好像是一个普通的软件程序,非常方便。
http://www.ubuntu.com/ Ubuntu官方网站
http://forum.ubuntu.org.cn/ Ubuntu中文网上论坛
自然语言的计算机处理一开始就是在类Unix系统中进行的,很多早期的NLP程序等等都是在Unix环境下开发的,所以大多可以看到源代码,研究者可以根据自身的需要对其进行修改完善,或者放到自己的程序中,来实现一些更高级的功能。
我们这里大多是英语老师或学生,外语出身,对技术方面掌握得可能不是很多,另外可能多数用的是Windows操作系统,习惯了使用带有图形界面(GUI)的软件,对命令行并不熟悉。但是,Windows下必须使用一些特定的软件才做得到的功能,在Linux下往往用发行版自带的命令行工具就可以完成,而且没有商业软件的各种限制(比如限制只能处理特定长度的文件等)。Linux下默认就安装了perl、bash等环境,而这些东西其实是实现文本处理的真正功臣,软件其实多半是在其基础上加入了图形界面而已。这里列出的是几个最基本的小工具的用法。我是当英语老师的,出于教学科研需要在这个优秀的论坛里学到了许多宝贵的知识和技能,以此作为一点回报。此处抛砖引玉,说得不正确之处请各位高手指正并补充。
文件处理:
转换文本文件的编码
enca filename #首先探测该文件的编码
enconv filename #将其转换为你的locale编码,如Linux中普遍采用的UTF-8
enconv -x GB2312 filename
将小文件拼接为大文件
cat file1 file2 > file3 # 把file1与file2连接起来,输出到file3
cat -n file1 file2 > file3 # -n表示加行号
将大文件largefile切割成小文件
split -bytes=1m largefile outputprefix
split -bytes=40k largefile outputprefix
split -bytes=800b largefile outputprefix
注:outputprefix为指定输出文件的共同前缀,如mycorpus;该命令输出时默认加上两位排序字母为后缀,如aa, ab, ..., 最终输出的各文件名为mycorpusaa, mycorpusab, mycorpusac, ...
批量更改文件名
rename 's/\.bak$//' *.bak # 把文件名中的.bak全部去掉
rename 's/Ch(\d*)/第$1回/' *.txt # 把'Ch04'改为'第04回'
将pdf文件转换为纯文本文件
pdftotext filename.pdf filename.txt
字符串操作:
批量替换多个文本文件中的符合regexp的字符串为指定字符串string
sed -i 's/regexp/string/g' *.txt
去掉tag
sed -i 's/tag//g' *.txt
sed -i 's/_\w+//g' *.txt # 把 _NN0这种类型的tag去掉
sed -i 's/\/\w+//g' *.txt # 去掉Brown库所使用那种类型的tag
sed -i 's/\[[^]]+\]//g' *.txt # 去掉CLEC所使用那种类型的标注
sed -i 's/<[^>]*>//g' *.txt # 去掉<*>类型的标注
检索操作(许多内容待补充):
在文件中检索指定字符串(中文文本无需先分词)
grep Oliver OliverTwist.txt
grep 三个代表 20081211.txt
grep -w pain * # 在所有文件中寻找作为独立单词的pain,即不包括Spain/painful/pains/paint/painting/paints等,相当于AntConc软件中的Word选项
grep -i china * # 在所有文件中寻找china,不分大小写
grep vp3 *.txt > vp3.txt # 到CLEC/st目录里,在所有的5个库文件中寻找包含vp3的所有行,将结果输出到vp3.txt中
grep '<w VBG>' *.txt > vbg.txt # 找到所有包含<w VBG>的行,将结果输出到vbg.txt
注:关于在grep中使用正则表达式,见http://www.robelle.com/smugbook/regexpr.html
Windows下的一些优秀软件工具也有Linux版本,如
AntConc http://www.antlab.sci.waseda.ac.jp/software.html 该页面可下载各平台版本
ICTCLAS http://www.ictclas.org/Download.html 该页面有开源、共享等数个版本下载,都可以运行于Linux环境下
目前最方便易用的Linux发行版是Ubuntu(最新版本为9.10,代号为Karmic Koala)。Windows用户可以用Ubuntu带的一个小工具wubi.exe将Ubuntu安装到Windows系统中,就好像是一个普通的软件程序,非常方便。
http://www.ubuntu.com/ Ubuntu官方网站
http://forum.ubuntu.org.cn/ Ubuntu中文网上论坛
Last edited: