使用sklearn进行文本TF-IDF处理
参考资料:
https://zhuanlan.zhihu.com/p/27330205?group_id=857373762461515776
一个不错的介绍,可以优先看看这个
在进行自然预言处理中的文本处理任务中经常会使用到TF-IDF,在这里进行简单记录.
给一个维基百科上的描述
在一份給定的文件裡,詞頻(term frequency,tf)指的是某一個給定的詞語在該文件中出現的频率。這個數字是对词数(term count)的归一化,以防止它偏向長的文件。(同一個詞語在長文件裡可能會比短文件有更高的詞数,而不管該詞語重要與否。)對於在某一特定文件裡的詞語 ti來說,它的重要性可表示為:
以上式子中 n{i,j}是該詞在文件 d{j}中的出現次數,而分母則是在文件d{j}中所有字詞的出現次數之和。
逆向文件頻率(inverse document frequency,idf)是一個詞語普遍重要性的度量。某一特定詞語的 idf,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到:
|D|:語料庫中的文件總數
分母包含詞語 t{i} 的文件數目
以上出自维基百科,具体内容可以点击进去细看
题目描述:
在使用TF-IDF时,对于不熟悉sklearn的同学通常都会手动统计每个词的频率进行计算.不过其实sklearn已经对其进行了封装
from sklearn.feature_extraction.text import TfidfVectorizer
X_train = ['hello', 'hi', 'hei']
X_test = ['hi', 'haa', 'hei']
vectorizer = TfidfVectorizer(stop_words='english')
vectorizer.fit_transform(X_train).todense()
X_train = vectorizer.transform(X_train)
print X_train
X_test = vectorizer.transform(X_test)
print X_test