Python_文本分析_詞頻_TFIDF統計

下面這段代碼是用來計算文本的詞頻、TF-IDF值

import numpy as np
import pandas as pd 
from sklearn.feature_extraction.text import TfidfTransformer  
from sklearn.feature_extraction.text import CountVectorizer

# Load data
comment1 = pd.read_csv(r"good_1.csv", header = 0, index_col = False, engine='python',encoding = 'utf-8')
comment2 = pd.read_csv(r"good_2.csv", header = 0, index_col = False, engine='python',encoding = 'utf-8')
comment3 = pd.read_csv(r"good_3.csv", header = 0, index_col = False, engine='python',encoding = 'utf-8')
comment4 = pd.read_csv(r"good_4.csv", header = 0, index_col = False, engine='python',encoding = 'utf-8')

# 生成corpus
corpus = []
for i in range(4):
    file = eval('comment'+str(i+1))
    print(file.shape)
    
    comment_txt = ''
    for line in range(file.shape[0]):
        if len(str(file.iloc[line,8])) >5:
            comment_txt += file.iloc[line,8]
        
        if (line % 2000 == 0):
            print(line, end = '  ')
    
    corpus.append(comment_txt)


a = pd.DataFrame(columns = [0, 1, 2, 3])

# 計數器和TFIDF生成器
cv = CountVectorizer()  
cv_fit = cv.fit_transform(corpus)  

# 計算
transformer = TfidfTransformer()  
tfidf_fit = transformer.fit_transform(cv_fit)  

word = cv.get_feature_names() 
weight = cv_fit.toarray()
weight_tfidf = tfidf_fit.toarray()    

for i in range(len(weight)):
    print("-------第", i+1, "段文本的詞語------")
    for j in range(len(word)):
        
        # 進度查看器
        if j % 2000 == 0:
            print(j,end ='  ')
            
        b = pd.DataFrame([str(i), str(word[j]), str(weight[i][j]), str(weight_tfidf[i][j])]).T
        a = pd.concat([a,b])
    print(' ')
        
a.columns = ['type','name','number','tfidf']

# 寫文件
a.to_csv(r"tfidf.csv",header=True,index=False,encoding='utf-8')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章