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那本书,很简洁。

参考文献

  • 正则表达式简明参考
  • Sams Teach Yourself Regular Expressions in 10 Minutes (by Ben Forta)

你可能感兴趣的:(正则表达式)