【问题标题】:CountVectorizer() not working with single letter wordCountVectorizer() 不适用于单字母词
【发布时间】:2020-11-30 00:14:57
【问题描述】:

考虑我必须对以下数据应用 CountVectorizer():

words = [
     'A am is',
     'This the a',
     'the am is',
     'this a am',
]

我做了以下事情:

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())

它返回以下内容:

[[1 1 0 0]
 [0 0 1 1]
 [1 1 1 0]
 [1 0 0 1]]

供参考print(vectorizer.get_feature_names())打印['am', 'is', 'the', 'this']

为什么没有读取“a”??
CountVectorizer()中是不是单字母单词不算单词

【问题讨论】:

    标签: python machine-learning scikit-learn countvectorizer


    【解决方案1】:

    查看doc

    token_pattern

    表示什么构成的正则表达式 “令牌”,仅在分析器 == 'word' 时使用。默认正则表达式选择 2 个或更多字母数字字符的标记(标点符号完全 忽略并始终视为标记分隔符)。

    默认标记器会忽略所有单个字符标记。这就是a 丢失的原因。

    如果您希望单字符标记出现在词汇表中,那么您必须使用服装标记器。

    示例代码

    from sklearn.feature_extraction.text import CountVectorizer
    vectorizer = CountVectorizer(tokenizer=lambda txt: txt.split())
    X = vectorizer.fit_transform(words)
    print (vectorizer.get_feature_names())
    

    输出:

    ['a', 'am', 'is', 'the', 'this']
    

    【讨论】:

    • "tokenizer=lambda txt: txt.split()" 是如何工作的?这里发生了什么?
    • lambda txt: txt.split() 是一个函数,它获取文本并在空间中分割它,每个空间现在都是 CountVectorizer 使用的标记
    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2017-09-11
    • 2015-07-10
    • 2016-02-14
    相关资源
    最近更新 更多