初學中文文字分詞,從最簡單的tf-idf演算法入手,理解其中的邏輯結構,其中使用jieba分詞包作為分詞模型。這裡部分內容參考了_hahaha的部落格。
tf-idf原理
舉個例子
我們在大學選修了數學和體育兩門課,數學為9學分,體育為1學分,期末的時候考試成績分別為60和100分,那麼如果我們說平均分是80分合理嗎?其實是不合理的,因為乙個9學分,乙個1學分,我們投入的時間和精力是不一樣的,所以應該用(9/10*60)+(1/10*100)=64分這樣更為合理一些,這裡80分是平均值,64分是數學期望,所以我們也說數學期望是加權的平均值。
tf = 該詞在文件中出現的次數
idf = log2(文件總數/包含該詞的文件數量 + 1)
tf-idf = tf * idf
import os
import codecs
import pandas
import re
import jieba
import numpy
# 建立語料庫
filepaths =
filecontents =
for root, dirs, files in os.walk(
'data/sogouc.mini/sample'
): for name in files:
filepath = os.path.join(root, name)
f = codecs.open(filepath, 'r', 'utf-8')
filecontent = f.read()
f.close()
corpus = pandas.dataframe()
# 匹配中文分詞
zhpattern = re.compile(u'[\u4e00-\u9fa5]+')
# 分詞
segments =
filepaths =
for index, row in corpus.iterrows(): # 對語料庫按行進行遍歷
filepath = row['filepath']
filecontent = row['filecontent']
segs = jieba.cut(filecontent)
for seg in segs:
if zhpattern.search(seg): # 匹配中文分詞
segmentdf = pandas.dataframe()
# 停用詞過濾
stopwords = pandas.read_csv( # 讀取停用詞表
'data/stopwordscn.txt',
encoding='utf-8',
index_col=false,
quoting=3,
sep='\t'
)segmentdf = segmentdf[~segmentdf['segment'].isin(stopwords['stopword'])]
# 按文章進行詞頻統計
segstat = segmentdf.groupby(
by=['filepath', 'segment']
)['segment'].agg().reset_index().sort_values( # reset_index()
'計數',
ascending=false # 倒序排列
)# 把詞頻為小於1的詞刪掉
segstat = segstat[segstat['計數'] > 1]
文件向量化:
假設有m篇文章d1
、d2、d3
、......、dm
,對它們分別進行分詞,得到n個分詞向量w1
、w2、w3
、......、wn
,那麼就得到這m篇文件的分詞向量矩陣f。其中fij代表第i篇文章中分詞j出現的頻率。
那麼單篇文件的向量化,即第i篇文章,使用矩陣f的第i行資料進行表,即 di =。
# 文件向量化
tf = segstat.pivot_table(
index='filepath', # 資料透視表的列
columns='segment', # 資料透視表的行
values='計數', # 資料透視表中的值
fill_value=0, # na值統一替換為0
)
#計算tf-idf
def handler(x):
return numpy.log2(len(corpus) / (numpy.sum(x > 0) + 1))
tf_idf = pandas.dataframe(tf * idf)
tag1s =
tag2s =
tag3s =
tag4s =
tag5s =
for filepath in tf_idf.index:
tags = tf_idf.loc[filepath].sort_values( # 用loc(索引名)遍歷行,每行為乙個series
ascending=false # 對每行進行倒序排列
)[:5].index # 取每行前五個的索引值(即前五個分詞名稱)
TF IDF 提取關鍵詞
class document p s p p string,1,preg split no empty this build tf else public function build tf public function build tfidf idf else arsort this tfidf...
提取關鍵詞 tf idf演算法講解
結果你肯定猜到了,出現次數最多的詞是 的 是 在 這一類最常用的詞。它們叫做 停用詞 stop words 表示對找到結果毫無幫助 必須過濾掉的詞。用統計學語言表達,就是在詞頻的基礎上,要對每個詞分配乙個 重要性 權重。最常見的詞 的 是 在 給予最小的權重,較常見的詞 中國 給予較小的權重,較少見...
TF IDF關鍵詞提取方法的學習
tf idf term frequency inverse document frequency 是一種用於資訊檢索與資料探勘的常用加權技術。tf意思是詞頻 term frequency idf意思是逆向檔案頻率 inverse document frequency 最近學習了阮一峰先生關於tf i...