TFIDF,ngrame的scikitlearn接口

(1)TFIDF计算的scikitlearn接口

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

# 我,他,了这些词是过滤了的
if __name__ == "__main__":
    corpus=["我 来到 北京 清华大学 北京",#第一类文本切词后的结果,词之间以空格隔开
        "他 来到 了 网易 杭研 大厦",#第二类文本的切词结果
        "小明 硕士 毕业 与 中国 科学院",#第三类文本的切词结果
        "我 爱 北京 天安门"]#第四类文本的切词结果
    vectorizer=CountVectorizer()#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
    transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值
    #fit_transform是将文本转为词频矩阵,其输出格式如(0, 8)  1,表示第0篇文章中的第八个词(是在整个bag中的排序)的频率是1
    word_frequency = vectorizer.fit_transform(corpus)
    print(word_frequency)
    tfidf=transformer.fit_transform(word_frequency)#第一个fit_transform是计算tf-idf
    word=vectorizer.get_feature_names()#获取词袋模型中的所有词语
    weight=tfidf.toarray()#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
    for i in range(len(weight)):#打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
        print (u"-------这里输出第",i,u"类文本的词语tf-idf权重------")
        for j in range(len(word)):
            print (word[j],weight[i][j])
注意点:
1用其接口“我,他,了”这些词是过滤了的
2词频的输出格式如(0, 8) 1,表示第0篇文章中的第八个词(是在整个bag中的排序)的频率是1
3 如果是中文的话需要先分词,分词工具可以使用如下jieba分词工具
  1. import jieba.posseg as pseg  
  2. words=pseg.cut("对这句话进行分词")  
  3. for key in words:  
  4.      print key.word,key.flag 

具体的分类中使用:https://www.cnblogs.com/generalz/p/5161765.html

https://blog.csdn.net/lrita/article/details/48179783


(2)ngram

vectorizer = sklearn.feature_extraction.text.TfidfVectorizer(analyzer="word", stop_words="english", binary=False, ngram_range=(1,2))
train_data = vectorizer.fit_transform(train_corpus)
test_data = vectorizer.transform(test_corpus)
#其中train_corpus和test_corpus是list存储的自然语言语句


阅读更多
个人分类: 自然语言处理
上一篇语言模型涉及的相关概念
下一篇shuffle
想对作者说点什么? 我来说一句

一篇介绍TFIDF的ppt

2011年03月25日 859KB 下载

没有更多推荐了,返回首页

关闭
关闭