(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分词工具
- import jieba.posseg as pseg
- words=pseg.cut("对这句话进行分词")
- for key in words:
- 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()