首页 > 解决方案 > CountVectorizer 不尊重正则表达式

问题描述

我正在使用以下代码来获取文档术语矩阵:

from nltk.stem import SnowballStemmer
from sklearn.feature_extraction.text import CountVectorizer

stemmer = SnowballStemmer("english", ignore_stopwords=True)


class StemmedCountVectorizer(CountVectorizer):
    def build_analyzer(self):
        analyzer = super(StemmedCountVectorizer, self).build_analyzer()
        return lambda doc: ([stemmer.stem(w) for w in analyzer(doc)])

stemmed_count_vect = StemmedCountVectorizer(stop_words='english', 
                                            ngram_range=(1,1), 
                                            token_pattern=r'\b\w+\b', 
                                            min_df=1, 
                                            max_df=0.6)

但是,我仍然收到以下物品:

20009
2000mile
20011
20017
2001â
2007s
20081007
200h

我该如何解决?

标签: pythonnltk

解决方案


这种模式token_pattern=r'\b\w+\b'表示它需要一个或多个\w单词边界之间的字符类成员。这个字符类

[m] 匹配 Unicode 单词字符;这包括可以成为任何语言中单词一部分的大多数字符,以及数字和下划线。

所以在我看来,你需要更少的包容性字符类(一开始就省略数字)。


推荐阅读