zoukankan      html  css  js  c++  java
  • sklearn: CountVectorize处理及一些使用参数

    sklearn: CountVectorize处理及一些使用参数

    CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。

    CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。

    CountVectorizer(analyzer='word', binary=False, decode_error='strict',
            dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
            lowercase=True, max_df=1.0, max_features=None, min_df=1,
            ngram_range=(1, 1), preprocessor=None, stop_words=None,
            strip_accents=None, token_pattern='(?u)\b\w\w+\b',
            tokenizer=None, vocabulary=None)
    

    CountVectorizer类的参数很多,分为三个处理步骤:preprocessing、tokenizing、n-grams generation.

    一般要设置的参数是:ngram_range,max_df,min_df,max_features,analyzer,stop_words,token_pattern等,具体情况具体分析

    1. ngram_range : 例如ngram_range(min,max),是指将text分成min,min+1,min+2,.........max 个不同的词组。比如 '我 爱 中国' 中ngram_range(1,3)之后可得到'我' '爱' '中国' '我 爱' '爱 中国' 和'我 爱 中国',如果是ngram_range (1,1) 则只能得到单个单词'我' '爱'和'中国'。
    2. max_df:可以设置为范围在[0.0 1.0]的float,也可以设置为没有范围限制的int,默认为1.0。 这个参数的作用是作为一个阈值,当构造语料库的关键词集的时候,如果某个词的document frequence大于max_df,这个词不会被当作关键词。如果这个参数是float,则表示词出现的次数与语料库文档数的百分比,如果是int,则表示词出现的次数。如果参数中已经给定了vocabulary,则这个参数无效。
    3. min_df: 类似于max_df,不同之处在于如果某个词的document frequence小于min_df,则这个词不会被当作关键词。
    4. max_features:默认为None,可设为int,对所有关键词的term frequency进行降序排序,只取前max_features个作为关键词集。
    5. analyzer:一般使用默认,可设置为string类型,如’word’, ‘char’, ‘char_wb’,还可设置为callable类型,比如函数是一个callable类型。
    6. stop_words:设置停用词,设为english将使用内置的英语停用词,设为一个list可自定义停用词,设为None不使用停用词,设为None且max_df∈[0.7, 1.0)将自动根据当前的语料库建立停用词表。
    7. token_pattern:过滤规则,表示token的正则表达式,需要设置analyzer == ‘word’,默认的正则表达式选择2个及以上的字母或数字作为token,标点符号默认当作token分隔符,而不会被当作token。
    8. decode_error:默认为strict,遇到不能解码的字符将报UnicodeDecodeError错误,设为ignore将会忽略解码错误,还可以设为replace,作用尚不明确。
    9. binary:默认为False,一个关键词在一篇文档中可能出现n次,如果binary=True,非零的n将全部置为1,这对需要布尔值输入的离散概率模型的有用的。

    实例:

    from sklearn.feature_extraction.text import CountVectorizer
    corpus = ['我 爱 中国 中国','爸爸 妈妈 爱 我','爸爸 妈妈 爱 中国']
    # corpus = ['我爱中国','爸爸妈妈爱我','爸爸妈妈爱中国']
    vectorizer = CountVectorizer(min_df=1, ngram_range=(1, 1)) ##创建词袋数据结构,里面相应参数设置
    features = vectorizer.fit_transform(corpus)  #拟合模型,并返回文本矩阵
     
    print("CountVectorizer:")
    print(vectorizer.get_feature_names())   #显示所有文本的词汇,列表类型
    #词表
    #['中国', '妈妈', '爸爸'] 
    
    print(vectorizer.vocabulary_)    #词汇表,字典类型
    #key:词,value:对应编号
    #{'中国': 0, '爸爸': 2, '妈妈': 1} 
    
    print(features)   #文本矩阵
    #第一行 (0, 0)	2 表示为:第0个列表元素,**词典中索引为0的元素**, 词频为2
    #  (0, 0)	2       
    #  (1, 1)	1
    #  (1, 2)	1
    #  (2, 1)	1
    #  (2, 2)	1
    #  (2, 0)	1
    
    print(features.toarray())   #.toarray() 是将结果转化为稀疏矩阵
    #将结果转化为稀疏矩阵
    #[[2 0 0]
    # [0 1 1]
    # [1 1 1]]
    
    print(features.toarray().sum(axis=0)) #统计每个词在所有文档中的词频
    #文本中的词频
    #[3 2 2]
    
  • 相关阅读:
    tushare学习
    TVP-VAR模型
    时间序列分析
    python tusahre使用
    金融大讲堂-笔记
    多元GARCH模型
    方差与协方差
    代码生成器,项目更新第一版,mybatis-plus
    Springboot手动搭建项目——配置mybatis tk框架
    java基础,集合,HashMap,源码解析
  • 原文地址:https://www.cnblogs.com/jimlau/p/13591584.html
Copyright © 2011-2022 走看看