% j2 O8 r) F( Y- r' Z j% ]ββ :表示 topic-word 密度, ββ 越高,主题包含的单词更多,反之包含的单词更少 ) d6 L" M$ K6 j& t" T3 d , a3 ^6 u2 ^) Z# T0 m' L4 {( v主题数量:主题数量从语料中抽取得到,使用 Kullback Leibler Divergence Score 可以获取最好的主题数量。" ~. s, n' ?& Y# x
: {, t9 n5 V, v, U主题词数:组成一个主题所需要的词的数量。这些词的数量通常根据需求得到,如果说需求是抽取特征或者关键词,那么主题词数比较少,如果是抽取概念或者论点,那么主题词数比较多。 $ I% L, U6 F5 ?) ~" P+ p d5 }$ C# S1 [8 M8 r. t/ t+ L
迭代次数:使得 LDA 算法收敛的最大迭代次数, p# E7 U3 _3 @3 X0 E" I, \1 Q0 K
9 u% ^0 H5 g9 a5 o' d& m3 e, S1 K( a9 V2 V) i
1 K2 ~7 o5 _7 Q/ A. C& D
四、Running in Python # h2 G- L9 A: z' G! b准备文档集合 & x8 c$ y% m' f6 h7 d7 j- rdoc1 = "Sugar is bad to consume. My sister likes to have sugar, but not my father."6 F; ]* S/ g/ f5 b) [: _
doc2 = "My father spends a lot of time driving my sister around to dance practice."0 @ j* A' C' c# E
doc3 = "Doctors suggest that driving may cause increased stress and blood pressure.", Q) S5 E& D2 Y b1 ]# }3 r# X
doc4 = "Sometimes I feel pressure to perform well at school, but my father never seems to drive my sister to do better."2 m+ y, Y7 E W- u. \) Z
doc5 = "Health experts say that Sugar is not good for your lifestyle.") }+ M+ ^6 c. ]7 H" X3 u# G! _8 h3 q
3 _9 b" E" f! u$ I5 v0 p) r( ^# 整合文档数据 # Y# U4 P& |: x* C5 M7 Rdoc_complete = [doc1, doc2, doc3, doc4, doc5] ) `) @4 n. u1 _$ U, ~+ X/ }8 O" C |8 _( |2 j
数据清洗和预处理 ' {* ]3 _& G) B/ z) h数据清洗对于任何文本挖掘任务来说都非常重要,在这个任务中,移除标点符号,停用词和标准化语料库(Lemmatizer,对于英文,将词归元)。 . N" d0 L) x }! L + ?5 G5 N) s% f! x, n8 w' Nfrom nltk import stopwords " G( ?* c4 W) Q" C4 ]) Bfrom nltk.stem.wordnet import WordNetLemmatizer9 y( b$ F2 A' ? N1 ~/ u
import string 7 j6 I& |# a8 o* D9 T) C5 | : T2 k1 C* q( D4 }) E* }- mstop = set(stopwords.words('english')) & n: {& ~1 F/ R. y7 n8 Vexclude = set(string.punctuation) g) i/ r, \% B
lemma = WordNetLemmatizer() 0 T) Q% K: P# X9 [0 j" ?4 |( U7 y5 W! [/ k& V
def clean(doc):) _6 F7 c9 v) F9 N! I o
stop_free = " ".join([i for i in doc.lower().split() if i not in stop]) 2 G" p3 w' A! p punc_free = ''.join(ch for ch in stop_free if ch not in exclude): Y. t: r- P) v5 J6 l
normalized = " ".join(lemma.lemmatize(word) for word in punc_free.split())& X+ Y2 `$ C, _4 {& @
return normalized( t8 _9 o) R( t A s3 F
& }% d2 m. Z9 I- w: |
doc_clean = [clean(doc).split() for doc in doc_complete] 3 T8 B/ s6 E' ?6 M! q: a6 c0 L# ^1 b2 v& y; ^- U0 |
准备 Document - Term 矩阵% G# P2 h7 M9 ~7 N. R- @4 G
语料是由所有的文档组成的,要运行数学模型,将语料转化为矩阵来表达是比较好的方式。LDA 模型在整个 DT 矩阵中寻找重复的词语模式。Python 提供了许多很好的库来进行文本挖掘任务,“genism” 是处理文本数据比较好的库。下面的代码掩饰如何转换语料为 Document - Term 矩阵:9 t1 l; H1 j! V2 A