TF IDF演算法提取文章的關鍵詞

2021-08-21 07:07:52 字數 3082 閱讀 7379

初學中文文字分詞,從最簡單的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...