CountVectorizer fit-transform()不适用于自定义token_pattern

时间:2017-04-15 05:56:28

标签: python scikit-learn countvectorizer

我需要在包含“R”,“C”等编程语言名称的文本上使用CountVectorizer。但是CountVectorizer会丢弃只包含一个字符的“单词”。

    cv1 = CountVectorizer(min_df=2, stop_words='english')
    tokenize = cv1.build_tokenizer()
    tokenize("Python, Time Series, Cloud, Data Modeling, R")

输出:

缺货[172]: ['Python','时间','系列','云','数据','建模']

然后我调整'token_pattern',以便它也将'R'视为一个标记。

    cv1 = CountVectorizer(min_df=1, stop_words='english', token_pattern=r'(?u)\b\w\w+\b|R|C' ,tokenizer=None)
    tokenize = cv1.build_tokenizer()
    tokenize("Python, Time Series, Cloud, R ,Data Modeling") 

输出: 出[187]: ['Python','时间','系列','云','R','数据','建模']

但是,

    cvmatrix1 = cv1.fit_transform(["Python, Time Series, Cloud, R ,Data Modeling"])
    cv1.vocabulary_ 

给出输出:

缺货[189]: {'cloud':0,'data':1,'modeling':2,'python':3,'series':4,'time':5}

为什么会这样?“

1 个答案:

答案 0 :(得分:1)

R 被删除的原因是正则表达式捕获大写字母 R ,其中tokenizer的实际输入将为小写。这背后的原因是pre-processor在对其进行标记之前调用原始字符串上的.lower()函数:

tokenize = cv1.build_tokenizer()
preprocess = cv1.build_preprocessor()
tokenize(preprocess("Python, Time Series, Cloud, R ,Data Modeling"))

收率:

['python', 'time', 'series', 'cloud', 'data', 'modeling']