主題抽取
經過分詞、單詞清洗、詞幹提取後,基於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...