CountVectorizer 可以将文本文档集合转换为token计数矩阵。(token可以理解成词)
此实现通过使用scipy.sparse.csr_matrix产生了计数的稀疏表示。
如果不提供一个先验字典,且不使用某种特征选择的分析器,则特征数量与通过分析数据得到的词汇表的大小一致。
参数:
input:
默认content 可选 filename、file、content
如果是filename,传给fit的参数必须是文件名列表
如果是file,传给fit的参数必须是文件对象,有read方法
如果是content,这是字符串序列或者是字节序列
build_tokenizer:
返回一个将字符串分为词语序列的方法
binary:
True代表非零计数为1。用于模拟二进制事件而不是整数计数的离散概率模型是有用的。
模型fit后输出的结果含义:
如 :
texts = ["How are you?", "I am fine fine.", "我 很好"] v = CountVectorizer(token_pattern=r'(?u)\b\w+\b', stop_words='english') # 使用内置停用词,保留长度为1的词 count = v.fit_transform(texts) print(count)
(1, 0) 2
(2, 2) 1
(2, 1) 1
词表中有三个词,fine、很好、我;
输出的count结果代表(词所在句子,在词表中的编号) 句中出现次数
设置词表中包含一个词的情况:
使用CountVectorizer()将文本向量化时,文本中长度为一的字符会被自动过滤,如果需要保存长度为一的字符,可设置参数token_pattern = r'(?u)\b\w+\b'(default=r"(?u)\\b\\w\\w+\\b"),使用TfidfVectorizer() 时可使用相同设置。
Hash Trick:
常用的文本降维方法是Hash Trick。定义一个特征Hash后对应的哈希表的大小,这个哈希表的维远小于词表的特征维度,可看成是降维。具体的方法是,对应任意一个特征名,用Hash函数找到对应哈希表的位置,将该特征名对应的词频统计值累加到该哈希表位置。此时有可能两个原始特征的哈希后位置在一起导致词频累加特征值突然变大,为了解决这个问题,出现了hash Trick的变种signed hash trick,这样哈希后的特征仍然是一个无偏的估计,不会导致某些哈希位置的值过大。
from sklearn.feature_extraction.text import HashingVectorizer corpus = ["I come to China to travel", "This is a car polupar in China", "I love tea and Apple ", "The work is to write some papers in science"] vectorizer2 = HashingVectorizer(n_features=6, norm=None) print(vectorizer2.fit_transform(corpus))
Hash Trick的解释性不强。
参考:
sklearn.feature_extraction.text.CountVectorizer 学习 - 桑胡 - 博客园 (cnblogs.com)