LDA的使用记录--gensim库

在之前的实验中,我们利用LDA库来实现了lda, 并且采用二种特征表述方法,一种是直接统计词频的方法,一种是利用TF-IDF来作为特征,并且在有限的测试集上取得了较为理想的效果,当然,这个效果是否真的好,我们需要持怀疑态度哈,需要进一步的验证,这才是严谨的科研态度啊,不管不管,我现在就任性的默认为它能用~~
现在我们需要考虑利用gensim库中的LDA方法,当然,他们都说,学习最好的文档,应该是官方的API和文档,好吧,我承认,在我不懂别人代码的时候,我还是会去查一下的~~gensim中的LDA的实现也有上述二种特征的表述。在这里,我们也是采用二种方式来解决。
实验的代码如下:

# -*- coding:utf-8 -*-

from nltk.tokenize import RegexpTokenizer
from stop_words import get_stop_words
from nltk.stem.porter import PorterStemmer
from gensim import corpora, models

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

if __name__ == "__main__":

    corpus = []   # 存储文档
    tokens = []   # 存储文档中的单词
    # 读取文档的操作
    for line in open('a.txt','r').readlines():
        if '\xef\xbb\xbf' in line:
            line = line.replace('\xef\xbb\xbf', ' ')
        corpus.append(line.strip())
    print corpus

    # 去标点符号,去截止词的操作
    en_stop = get_stop_words('en')   # 利用Pypi的stop_words包,需要去掉stop_words

    # # 提取主干的词语的操作
    # p_stemmer = PorterStemmer()

    # 分词的操作
    tokenizer = RegexpTokenizer(r'\w+')
    for text in corpus:
        raw = text.lower()
        token = tokenizer.tokenize(raw)
        stop_remove_token = [word for word in token if word not in en_stop]
        # stem_token = [p_stemmer.stem(word) for word in stop_remove_token]
        tokens.append(stop_remove_token)
    # print tokens

    # 得到文档-单词矩阵 (直接利用统计词频得到特征)
    dictionary = corpora.Dictionary(tokens)   # 得到单词的ID,统计单词出现的次数以及统计信息
    # print dictionary.token2id         # 可以得到单词的id信息  <dict>
    # print type(dictionary)            # 得到的是gensim.corpora.dictionary.Dictionary的class类型

    texts = [dictionary.doc2bow(text) for text in tokens]    # 将dictionary转化为一个词袋,得到文档-单词矩阵

    # # 直接利用词频作为特征来进行处理
    # lda_model = models.ldamodel.LdaModel(texts, num_topics=3, id2word=dictionary,  passes=500)
    # print lda_model.print_topics(num_topics=3,num_words=4)
    # corpus_lda = lda_model[texts]
    # for doc in corpus_lda:
    #     print doc

    # 利用tf-idf来做为特征进行处理
    texts_tf_idf = models.TfidfModel(texts)[texts]     # 文档的tf-idf形式(训练加转换的模式)
    # # for text in texts_tf_idf:            # 逐行打印得到每篇文档的每个单词的TD-IDF的特征值
    # #     print text
    # lda_tf_idf = models.LdaModel(texts_tf_idf, num_topics=3, id2word=dictionary, update_every=0, passes=200)
    # print lda_tf_idf.print_topics(num_topics=3,num_words=4)
    # # doc_topic = [a for a in l
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值