TF IDF和gensim實現主題提取

2021-10-07 05:15:22 字數 2165 閱讀 8313

主題抽取

經過分詞、單詞清洗、詞幹提取後,基於tf-idf演算法可以抽取一段文字中的核心主題詞彙,從而判斷出當前文字的主題。屬於無監督學習。gensim模組提供了主題抽取的常用工具 。

import gensim.models.ldamodel as gm

import gensim.corpora as gc

# 把lines_tokens**現的單詞都存入gc提供的詞典物件,對每乙個單詞做編碼。

line_tokens =

['hello'

,'world',.

..]dic = gc.dictionary(line_tokens)

# 通過字典構建詞袋

bow = dic.doc2bow(line_tokens)

# 構建lda模型

# bow: 詞袋

# num_topics: 分類數

# id2word: 詞典

# passes: 每個主題保留的最大主題詞個數

model = gm.ldamodel(bow, num_topics=n_topics, id2word=dic, passes=25)

# 輸出每個類別中對類別貢獻最大的4個主題詞

topics = model.print_topics(num_topics=n_topics, num_words=

4)

案例:

import nltk.tokenize as tk

import nltk.corpus as nc

import nltk.stem.snowball as sb

import gensim.models.ldamodel as gm

import gensim.corpora as gc

doc =

with

open

('../data/topic.txt'

,'r'

)as f:

for line in f.readlines():

:-1]

)tokenizer = tk.wordpuncttokenizer(

) stopwords = nc.stopwords.words(

'english'

)signs =

[','

,'.'

,'!'

]stemmer = sb.snowballstemmer(

'english'

)lines_tokens =

for line in doc:

tokens = tokenizer.tokenize(line.lower())

line_tokens =

for token in tokens:

if token not

in stopwords and token not

in signs:

token = stemmer.stem(token)

# 把lines_tokens**現的單詞都存入gc提供的詞典物件,對每乙個單詞做編碼。

dic = gc.dictionary(lines_tokens)

# 遍歷每一行,構建詞袋列表

bow =

for line_tokens in lines_tokens:

row = dic.doc2bow(line_tokens)

n_topics =

2# 通過詞袋、分類數、詞典、每個主題保留的最大主題詞個數構建lda模型

model = gm.ldamodel(bow, num_topics=n_topics, id2word=dic, passes=25)

# 輸出每個類別中對類別貢獻最大的4個主題詞

topics = model.print_topics(num_topics=n_topics, num_words=4)

print

(topics)[(

0,'0.025*"cryptographi" + 0.025*"made" + 0.018*"algorithm" + 0.018*"hard"'),

(1,'0.042*"spaghetti" + 0.019*"italian" + 0.018*"19th" + 0.018*"centuri"'

)]

gensim 實現tfidf 之語料的流式載入

有37萬個文字資料來生成tfidf模型,如果直接一次性放入記憶體,會出現memoryerror gensim實現了流式載入語料的功能,故定義迭代器完成語料的載入。生成字典過程中,遍歷file檔案,每個處理乙個文字資料。import warnings warnings.filterwarnings a...

TF IDF的原理和實現

1 tf idf原理 是term frequency inverse document frequency的縮寫,即 詞頻 逆文字頻率 它由兩部分組成,tf和idf tf也就是我們前面說到的詞頻,我們之前做的向量化也就是做了文字中各個詞的出現頻率統計,並作為文字特徵 idf,即 逆文字頻率 幾乎所有...

python 動手實現tfidf

最近自己實現了一下tfidf,發現實現起來細節跟tfidf的公式還是不大一樣,我這裡把我的實現過程分享出來。import pandas as pd import glob import numpy as np from nltk.tokenize import word tokenize impor...