美文网首页pythonai
使用sklearn提取文本的tfidf特征

使用sklearn提取文本的tfidf特征

作者: Jlan | 来源:发表于2018-01-04 17:00 被阅读6846次
    from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, TfidfTransformer
    
    corpus = [
        'This is the first document.',
        'This is the second second document.',
        'And the third one.',
        'Is this the first document?',
    ]
    

    CountVectorizer是通过fit_transform函数将文本中的词语转换为词频矩阵

    • get_feature_names()可看到所有文本的关键字
    • vocabulary_可看到所有文本的关键字和其位置
    • toarray()可看到词频矩阵的结果
    vectorizer = CountVectorizer()
    count = vectorizer.fit_transform(corpus)
    print(vectorizer.get_feature_names())  
    print(vectorizer.vocabulary_)
    print(count.toarray())
    
    ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
    {'this': 8, 'is': 3, 'the': 6, 'first': 2, 'document': 1, 'second': 5, 'and': 0, 'third': 7, 'one': 4}
    [[0 1 1 1 0 0 1 0 1]
     [0 1 0 1 0 2 1 0 1]
     [1 0 0 0 1 0 1 1 0]
     [0 1 1 1 0 0 1 0 1]]
    

    TfidfTransformer是统计CountVectorizer中每个词语的tf-idf权值

    transformer = TfidfTransformer()
    tfidf_matrix = transformer.fit_transform(count)
    print(tfidf_matrix.toarray())
    
    [[ 0.          0.43877674  0.54197657  0.43877674  0.          0.
       0.35872874  0.          0.43877674]
     [ 0.          0.27230147  0.          0.27230147  0.          0.85322574
       0.22262429  0.          0.27230147]
     [ 0.55280532  0.          0.          0.          0.55280532  0.
       0.28847675  0.55280532  0.        ]
     [ 0.          0.43877674  0.54197657  0.43877674  0.          0.
       0.35872874  0.          0.43877674]]
    

    TfidfVectorizer可以把CountVectorizer, TfidfTransformer合并起来,直接生成tfidf值

    TfidfVectorizer的关键参数:

    • max_df:这个给定特征可以应用在 tf-idf 矩阵中,用以描述单词在文档中的最高出现率。假设一个词(term)在 80% 的文档中都出现过了,那它也许(在剧情简介的语境里)只携带非常少信息。
    • min_df:可以是一个整数(例如5)。意味着单词必须在 5 个以上的文档中出现才会被纳入考虑。设置为 0.2;即单词至少在 20% 的文档中出现 。
    • ngram_range:这个参数将用来观察一元模型(unigrams),二元模型( bigrams) 和三元模型(trigrams)。参考n元模型(n-grams)。
    tfidf_vec = TfidfVectorizer() 
    tfidf_matrix = tfidf_vec.fit_transform(corpus)
    
    print(tfidf_vec.get_feature_names())
    print(tfidf_vec.vocabulary_)
    
    ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
    {'this': 8, 'is': 3, 'the': 6, 'first': 2, 'document': 1, 'second': 5, 'and': 0, 'third': 7, 'one': 4}
    
    print(tfidf_matrix.toarray())
    
    [[ 0.          0.43877674  0.54197657  0.43877674  0.          0.
       0.35872874  0.          0.43877674]
     [ 0.          0.27230147  0.          0.27230147  0.          0.85322574
       0.22262429  0.          0.27230147]
     [ 0.55280532  0.          0.          0.          0.55280532  0.
       0.28847675  0.55280532  0.        ]
     [ 0.          0.43877674  0.54197657  0.43877674  0.          0.
       0.35872874  0.          0.43877674]]
    

    使用gensim的corpora和models也可以实现类似的功能,
    参考:

    相关文章

      网友评论

        本文标题:使用sklearn提取文本的tfidf特征

        本文链接:https://www.haomeiwen.com/subject/xharnxtx.html