Python学习笔记(五)正则表达式

这篇博客记录了作者在学习Python正则表达式过程中处理数据的步骤。首先,使用正则表达式去除语料库中的各种标记,保留分词后的文本。接着,通过正则表达式创建词典,特别处理了中括号内的机构名。最终目标是进行分词并计算正确率和召回率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:学习笔记来源于自己在学习Python过程中遇到的小问题及对网络诸多大牛提供的方法的实践。

     

      此Python版本:Python 3.3.5

 

 

Python 正则表达式

 

 

最初接触python也是在有一天问师兄,实验室要用到的语言都有什么,师兄说了一堆,什么shell、C++、matlab、perl等等,说的我晕头转向Python学习笔记(五)正则表达式。后来做自然语言处理的大作业,有汉语分词系统、文本分类等等的题目,龟爬的我还是选择的k近邻文本分类,有进步的是,自己是用python这项脚本语言写的代码,虽然代码很少,写的也没有漂亮的结构,但,终究是用了python。

写大作业的时候就决定,之后一定要写一个汉语分词,哪怕是只用正向匹配、反向匹配这样简单地机械匹配方法,自己也要经历一遍这个过程。

 

好啦。第一步是处理数据

下载的是:北大分词语料库

语料库内容包括:已经分好的词及它们的词性标记、语料时间标签、以及中括号标记短语人名机构名等

 

处理数据需要做的工作是:

(1)由于我们只需要分词,所以其它标记都可以去掉了。所以先把所有标记去掉,只留下由空格分隔的词,可以用作我们自己做分词之后的正确率和召回率的计算标准

(2)把(1)得到的文件的词间空格去掉,可以作为需要被分词的对象

(3)把(1)得到的文件里的词做成每行一个的字典的形式,用于分词过程中的匹配

(4)利用分词算法,在基于字典(3)上对(2)进行分词,得到的结果与(1)相比较,计算正确率和召回率

注意:在这个语料库中,有一些机构名是用 [  ]  这样的中括号括起来的,中括号里面有多个分好的词,之前的数据处理已经提取了中括号里面的词,但是中括号本身也是一个词,需要作为特殊词提取到字典里去

 

 

处理数据第一步:去掉标记!

处理方法:正则表达式

 

pattern1 = re.compile('\/\w+')   #在语料里匹配到 /w 这样的标记,w 指一个词,+ 指一个或多个
line = pattern1.sub('', line)     #把line中匹配到的词替换成‘无’,也就是去掉

 

 

\s: space, 空格
+: 一个或多个
^: 开始,^\s,以空格开始
$: 结束,\s$,以空格结束

 

('\]\w{2}')     替换 ] 和 ] 后面的两个词

('^\s+')        替换以 空格 开始的一个或多个空格

('\s+$')        替换以 空格 结束的一个或多个空格

('\s+')          替换一个或多个 空格

 

处理数据第二步:生成字典!

 (1)去掉所有标记,只留空格,那么以空格为标准 split 一下就出现了字典

 pattern2 = re.compile (' ')

 string = pattern2.split(line)

再把 string 里的字符串输出,就是字典


(2)语料里有一些特殊词是这个样子的:

Python学习笔记(五)正则表达式


标记为nt的是一个机构名,是一个大词,里面还有几个小词。

第一步是去掉了所有的标记,生成了小词的字典,并没有把机构名这样的大词考虑进去。

所以,我们应用正则表达式的时候,可以先把 /w+ 这样的模式匹配掉,留下 [ ]nt 这样的模式

通过另一个正则来匹配中括号里面的词语。


执行:

Python学习笔记(五)正则表达式
红框里的含义就是匹配以 [ 为开始,以 ] 为结尾,中间有至少1个字的任意文本的模式。


讲解:<来自“正则表达式30分钟入门教程”>

Python学习笔记(五)正则表达式
——————————————————————————————————————————

Python学习笔记(五)正则表达式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值