sklearn中CountVectorizer里token_pattern默认参数解读

前言

今年早些时候参加比赛,用到了sklearn中的CountVectorizer函数,函数比较简单,就是把每一行文本变成词的向量形式,当然可以用ngram的参数,保留一些局部的序的关系,总之,在很多比赛中都是很好用的一个方案。但是它其中的token_pattern默认参数是用一则正则表达式来描述的,我又不理解,同时对于待转换的文本中又没有匹配上单独的一个词(比如单独的一个a或者1等等单个的字符),所以近期读了下正则表达式的书,再结合一些资料,对这样一个默认的正则表达式进行解读并修改成自己需要的正则匹配模式。

解读

首先我们先用ipython的内省功能看下它的token_pattern默认参数是什么:

写出来就是"(?u)\\b\\w\\w+\\b",其实看到的这个是有问题,问题在于它原本的正则表达式不是这个,而是"(?u)\b\w\w+\b",它多的\是因为显示出来的字符串是用r的模式解读出来,自动带了转义,因此解读"(?u)\b\w\w+\b"这个正则表达式即可。首先"(?u)“放在前面的意思是匹配中对大小写不敏感,然后紧接着的”\b"和末尾的"\b"表示匹配两个词语的间隔(可以简单的理解为空格),中间的"\w"表示匹配一个字母或数字或下划线或汉字,紧接着的"\w+“表示匹配一个或者多个字母或数字或下划线或汉字,所以这个正则表达式就会忽略掉单个的字符,因为它不满足这个正则表达式的匹配,因此我们可以给他改为”(?u)\b\w+\b",这样就不会忽略单个的字符。当然大家也可以根据自己的需求写相关的正则表达式,推荐看Ben Forta那本书,很简洁。

参考文献

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值