1

我需要在包含诸如 '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") 

输出:Out[187]:['Python','Time','Series','Cloud','R','Data','Modeling']

但 ,

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

给出输出:

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

为什么会这样?`

4

1 回答 1

1

删除R的原因是正则表达式捕获大写字母R,其中标记器的实际输入将是小写的。其背后的原因是在对原始字符串进行标记之前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']
于 2017-04-15T06:54:06.267 回答