注:学习笔记来源于自己在学习Python过程中遇到的小问题及对网络诸多大牛提供的方法的实践。
Python 正则表达式
最初接触python也是在有一天问师兄,实验室要用到的语言都有什么,师兄说了一堆,什么shell、C++、matlab、perl等等,说的我晕头转向。后来做自然语言处理的大作业,有汉语分词系统、文本分类等等的题目,龟爬的我还是选择的k近邻文本分类,有进步的是,自己是用python这项脚本语言写的代码,虽然代码很少,写的也没有漂亮的结构,但,终究是用了python。
写大作业的时候就决定,之后一定要写一个汉语分词,哪怕是只用正向匹配、反向匹配这样简单地机械匹配方法,自己也要经历一遍这个过程。
好啦。第一步是处理数据。
下载的是:北大分词语料库
语料库内容包括:已经分好的词及它们的词性标记、语料时间标签、以及中括号标记短语人名机构名等
处理数据需要做的工作是:
(1)由于我们只需要分词,所以其它标记都可以去掉了。所以先把所有标记去掉,只留下由空格分隔的词,可以用作我们自己做分词之后的正确率和召回率的计算标准
(2)把(1)得到的文件的词间空格去掉,可以作为需要被分词的对象
(3)把(1)得到的文件里的词做成每行一个的字典的形式,用于分词过程中的匹配
(4)利用分词算法,在基于字典(3)上对(2)进行分词,得到的结果与(1)相比较,计算正确率和召回率
注意:在这个语料库中,有一些机构名是用 [
处理数据第一步:去掉标记!
处理方法:正则表达式
pattern1 = re.compile('\/\w+')
line = pattern1.sub('', line)
\s: space, 空格
+: 一个或多个
^: 开始,^\s,以空格开始
$: 结束,\s$,以空格结束
('\]\w{2}')
('^\s+')
('\s+$')
('\s+')
处理数据第二步:生成字典!
再把 string 里的字符串输出,就是字典
(2)语料里有一些特殊词是这个样子的:
标记为nt的是一个机构名,是一个大词,里面还有几个小词。
第一步是去掉了所有的标记,生成了小词的字典,并没有把机构名这样的大词考虑进去。
所以,我们应用正则表达式的时候,可以先把 /w+ 这样的模式匹配掉,留下 [ ]nt 这样的模式
通过另一个正则来匹配中括号里面的词语。
执行:
红框里的含义就是匹配以 [ 为开始,以 ] 为结尾,中间有至少1个字的任意文本的模式。
讲解:<来自“正则表达式30分钟入门教程”>
——————————————————————————————————————————