CountVectorizer 关于文本特征提取,前面一篇文章TF-IDF介绍了HashingTF,本文将再介绍一种Spark MLlib的API CountVectorizer。 CountVectorizer 和 CountVectorizerModel 旨在帮助将文本文档集合转化为频数向量。 当先验词典不可用时,CountVectorizer可以用作Estimator提取词汇表,并生成一个CountVectorizerModel。 在拟合过程中,CountVectorizer会从整个文档集合中进行词频统计并排序后的前vocabSize个单词。 使用字典(A,B,C)调用CountVectorizer产生CountVectorizerModel。
import pandas as pd import xgboost as xgb import jieba from sklearn.feature_extraction.text import CountVectorizer CountVectorizer: 功能: 将文本文档集合转换为计数的稀疏矩阵。内部的实现方法为调用scipy.sparse.csr_matrix模块。 并且,如果在调用CountVectorizer() 时不提供先验词典并且不使用执行某种特征选择的分析器,则特征词的数量将等于通过该方法直接分析数据找到的词汇量。 最后可以简单的描述下TfidfVectorizer了 TfidfVectorizer 功能: 前文说过 TfidfVectorizer 相当于两者的结合使用,先后调用 CountVectorizer 和 参数及使用方法与 CountVectorizer和TfidfTransformer 一致,这里不再描述。
TfidfVectorizer 是 CountVectorizer 的扩展,它结合了词频(TF)和逆文档频率(IDF),生成更有效的文本表示。 和 TfidfTransformer 的组合, 先使用 CountVectorizer 计算词频,再使用 TfidfTransformer 应用IDF缩放。 关键参数详解 TfidfVectorizer 继承了 CountVectorizer 的所有参数,并增加了以下特有参数: 参数 类型 默认值 说明 norm ‘l1’, ‘l2’, None ‘l2’ CountVectorizer 对比 场景 选择 简单词频统计 CountVectorizer 大多数文本分类任务 TfidfVectorizer 中文文本处理 TfidfVectorizer + jieba 分词 需要解释性 TfidfVectorizer(可查看IDF值) 后续需词频信息 CountVectorizer 常用场景的参数配置 2.1 预处理标准化(统一处理大小写、特殊字符等) CountVectorizer
而特征数值的常见计算方式有两种,分别是:CountVectorizer和TfidfVectorizer。对于每一条训练文本, CountVectorizer只考虑每种词汇在该条训练文本中出现的频率。 from sklearn.feature_extraction.text import CountVectorizer #采用默认的配置对CountVectorizer进行初始化(默认配置不去除英文停用词 count_vec = CountVectorizer() #只使用词频统计的方式将原始训练和测试文本转化为特征向量。 mnb_count= MultinomialNB () #使用朴素贝叶斯分类器,对CountVectorizer(不去除停用词)后的训练样本进行参数学习。 分别使用CountVectorizer与TfidfVectorizer,并且去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试 #分别使用停用词过滤配置初始化CountVectorizer与
[20210811110826.png] 特征提取 目标 应用DictVectorizer实现对类别特征进行数值化、离散化 应用CountVectorizer实现对文本特征进行数值化 应用TfidfVectorizer 总结 对于特征当中存在类别信息的都会做one-hot编码处理 文本特征提取 作用:对文本数据进行特征值化 sklearn.feature_extraction.text.CountVectorizer( stop_words=[]) 返回词频矩阵 CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵 CountVectorizer.inverse_transform 分析 准备句子,利用jieba.cut进行分词 实例化CountVectorizer 将分词结果变成字符串当作fit_transform的输入值 def count_word(text): "" # 1、实例化一个转换器类 transfer = CountVectorizer(stop_words=["从宝妈"]) data_new = transfer.fit_transform
,同时可以看到提取后的特征的含义,二值方式进行向量化,1代表是,0代表不是,说明city:是Dubai 文本特征提取:词频向量(CountVectorizer) 词库模型(Bag-of-words model CountVectorizer 类会将文档全部转换成小写。然后把句子分割成词块(token)或有意义的字母序 列,并统计它们出现的次数。 from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'UNC played Duke in basketball 公式说明: 因为用了CountVectorizer 将文本转化为数字,那么就用数学的方法,如果d比较小,那么两段文本的比较相近 from sklearn.feature_extraction.text 类TfidfVectorizer则将 CountVectorizer 和 TfidfTransformer的功能集成在了一起。
3.词频:计算每个单词在文档中出现的频率 词袋模型处理流程: 分词构建词汇表编码 极简实践 相关代码流程: (使用的scikit-learn) bag of words + 计数 创建 CountVectorizer usecols, nrows=nrows) # 利用参数usecols 只取第1和7列 id 和 text df from sklearn.feature_extraction.text import CountVectorizer vect = CountVectorizer(min_df=3, stop_words='english') #### ①限制每个词至少在3个文本里出现过,将特征数量大大减少:由6000多减少到 num_of_features:{}'.format(len(feature_names))) 再给一个完整的例子: from sklearn.feature_extraction.text import CountVectorizer documents text = ["The quick brown fox jumped over the lazy dog."] # create the transform vectorizer = CountVectorizer
使用 CountVectorizer 计算字数 CountVectorizer 提供了一个简单的方法,既可以标记文本文档的集合, 也可以生成每个已知单词的索引, 还可以使用这一套索引对新文档进行编码。 下面是一种使用方法: 实例化一个 CountVectorizer 类。 调用 fit() 函数以从一个或多个文档中建立索引。 下面是使用 CountVectorizer 标记,构建索引,然后编码文档的示例。 "] # 实例化 CountVectorizer 类 vectorizer = CountVectorizer() # 标记并建立索引 vectorizer.fit(text) # 查看结果 TfidfVectorizer 的实例化、拟合和转换方法和 CountVectorizer 类似。
具体请参考,浪尖文章:基于DataFrame的StopWordsRemover处理 4, CountVectorizer CountVectorizer 和 CountVectorizerModel 旨在帮助将文本文档集合转化为频数向量 当先验词典不可用时,CountVectorizer可以用作Estimator提取词汇表,并生成一个CountVectorizerModel。 在拟合过程中,CountVectorizer会从整个文档集合中进行词频统计并排序后的前vocabSize个单词。 具体请参考,浪尖的另一篇文章:CountVectorizer 二 数据 20个主题的数据,每篇文章一个文件,每个主题100个文件。共两千个文件。 // Set params for CountVectorizer val vectorizer = new CountVectorizer().setInputCol("filtered").setOutputCol
▌主题建模 ---- ---- 使用scikit-learn中的CountVectorizer只需要调整最少的参数,就能将已经清理好的文档表示为DocumentTermMatrix(文档术语矩阵)。 CountVectorizer显示停用词被删除后单词出现在列表中的次数。 ? 上图显示了CountVectorizer是如何在文档上使用的。 上图是从CountVectorizer的输出截取的。 该文档术语矩阵被用作LDA(潜在狄利克雷分布Latent Dirichlet Allocation)算法的输入。 这适用于将CountVectorizer输出的文档术语矩阵作为输入。 该算法适用于提取五个不同的主题上下文,如下面的代码所示。当然,这个主题数量也可以改变,这取决于模型的粒度级别。 ? : http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html
2.2 Python爬虫代码实现from wordcloud import WordCloudfrom sklearn.feature_extraction.text import CountVectorizer 8))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')plt.title('快手评论词云图')plt.show()# 使用CountVectorizer 进行关键词词频统计vectorizer = CountVectorizer(stop_words=['的', '了', '是', '我', '有', '在', '就', '都', '不', '也']) from wordcloud import WordCloudfrom sklearn.feature_extraction.text import CountVectorizer# 将所有分词后的评论合并成一个字符串 进行关键词词频统计vectorizer = CountVectorizer(stop_words=['的', '了', '是', '我', '有', '在', '就', '都', '不', '也'])
使用 CountVectorizer 计算字数 CountVectorizer 提供了一个简单的方法,既可以标记文本文档的集合, 也可以生成每个已知单词的索引, 还可以使用这一套索引对新文档进行编码。 下面是一种使用方法: 实例化一个 CountVectorizer 类。 调用 fit() 函数以从一个或多个文档中建立索引。 下面是使用 CountVectorizer 标记,构建索引,然后编码文档的示例。 "] # 实例化 CountVectorizer 类 vectorizer = CountVectorizer() # 标记并建立索引 vectorizer.fit(text) # 查看结果 TfidfVectorizer 的实例化、拟合和转换方法和 CountVectorizer 类似。
car_sales.loc[:,'is_weekend'] = car_sales['dow'].apply(lambda x: 1 if (x==0 or x==6) else 0) 四:文本型特征 4.1 词袋模型 #countvectorizer 是一个向量化的计数器 from sklearn.feature_extraction.text import CountVectorizer vec= CountVectorizer() doc = { transformer', 'useful', 'very'] 注意:不是X.get_feature_names() 4.2 词袋模型 #在初始化计数器时,设置一下词向量的长度范围 vec = CountVectorizer
os from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer noise_pattern, "", document) return clean_text.strip() 下一步,再降噪数据上抽取出有用的特征,抽取1-gram和2-gram的统计特征 vec = CountVectorizer os from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer init__(self,classifier=MultinomialNB()): self.classifier=classifier self.vectorizer=CountVectorizer
词袋模型 CountVectorizer 是文本特征提取的基础工具,它实现了词袋模型(Bag of Words, BoW),将文本转换为词频矩阵。 CountVectorizer 的工作流程: 预处理:清理文本(如转小写、去除标点) 分词:将文档拆分为词语(tokens) 构建词汇表:创建从词语到特征索引的映射 计数:统计每个文档中每个词的出现频率 程序实现 import jieba import sklearn from sklearn.feature_extraction.text import CountVectorizer text = [ text] words_seg_str = [" ".join(t) for t in words_list] print("分词后的文本:",words_list_str) count_vec = CountVectorizer
MultinomialNB from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer in pd.concat([ham_train_part, spam_train_part]): part_words += text 接下来我们要统计每个单词出现的次数,使用sklearn的CountVectorizer ()函数,如: words = ['This is the first sentence', 'And this is the second sentence'] cv = CountVectorizer tfidf.idf_) # 查看idf print('tfidf:\n', tfidf_matrix.toarray()) # 查看tf-idf # 将正常邮件与垃圾邮件的单词都整理为句子,单词间以空格相隔,CountVectorizer in train['text']] # 测试集所有的单词整理成句子 test_all_texts = [' '.join(text) for text in test['text']] cv = CountVectorizer
使用seklearn中的CountVectorizer()函数,可以设置编码格式、分隔符等。 from sklearn.feature_extraction.text import CountVectorizer data = ["Get busy living, Or get busy dying ", "No pains, no gains."] transfer = CountVectorizer() data = transfer.fit_transform(data) print 使用pip安装: pip install jieba 使用函数jieba.cut()便可分词,返回一个词语列表,我们对每个词语前加一个空格,组成新的句子,然后再调用CountVectorizer()函数便可进行词频统计 import jieba from sklearn.feature_extraction.text import CountVectorizer data = ["南京市长江大桥",
我们将简要介绍一些常用的特征提取方法: 字典加载特征:DictVectorizer 文本特征提取: 词频向量(CountVectorizer) TF-IDF向量(TfidfVectorizer,TfidfTransformer 二,文本特征提取 1,字频向量(CountVectorizer) 词库模型(Bag-of-words model)是文字模型化最常用方法,它为每个单词设值一个特征值。 CountVectorizer 类会将文档全部转换成小写。然后把句子分割成词块(token)或有意义的字母序列,并统计它们出现的次数。 类TfidfVectorizer则将 CountVectorizer 和 TfidfTransformer 的功能集成在了一起。 ? ?
在Python中,我们可以使用scikit-learn库来实现朴素贝叶斯分类器: from sklearn.feature_extraction.text import CountVectorizer train_test_split(data['text'], data['label'], test_size=0.2, random_state=42) # 创建朴素贝叶斯分类器 model = make_pipeline(CountVectorizer train_test_split(data['text'], data['label'], test_size=0.2, random_state=42) # 创建情感分析模型 model = make_pipeline(CountVectorizer
2.2 特征处理和模型训练 模型训练借鉴了兜哥《web安全之深度学习实战》书中第十一章思想,采用CountVectorizer和TfidfTransformer对n-gram后的样本进行特征向量处理,分别采用多层神经网络 = CountVectorizer(ngram_range=(2, 2), decode_error="ignore", min_df=1, analyzer="word", token_pattern (texts).toarray() tf_x = tfidftransformer.fit_transform(cv_x).toarray() joblib.dump(countvectorizer _" + options.version + ".pkl") return tf_x, lables, countvectorizer, tfidftransformer def evaluation 实际操作中可根据训练样本的实际情况对CountVectorizer模型中maxfeatures和ngramrange参数进行微调已达到最佳效果。项目分别采用混淆矩阵和ROC曲线对模型进行评估。 ?