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的时候vectorizer.fit_transform
# test的时候vectorizer.transform

classifier = sklearn.svm.LinearSVC(C=1)

classifier.fit(train_data, train_labels)

classes = classifier.classes_

test_result = classifier.predict(test_data)

test_result_prob = classifier.decision_function(test_data)

#其中train_corpus和test_corpus是list存储的自然语言语句

(3)其他

# 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
tf_vectorizer = CountVectorizer()

# fit_transform是将文本转为词频矩阵
tf_matrix = tf_vectorizer.fit_transform(sen_seg_list)
tf_weight = tf_matrix.toarray()

# 该类会统计每个词语的tf-idf权值
tfidf_transformer = TfidfTransformer()
# fit_transform是计算tf-idf
tfidf_matrix = tfidf_transformer.fit_transform(tf_matrix)

# 获取词袋模型中的所有词语
word_list = tf_vectorizer.get_feature_names()

# 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
tfidf_weight = tfidf_matrix.toarray()

 

阅读更多
想对作者说点什么?

博主推荐

换一批

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