在Twitter数据上的python主题建模

时间:2017-04-27 10:27:12

标签: python machine-learning topic-modeling

我想在csv格式的twitter数据上执行主题建模。我在jupyter中加载了数据。

    # Import pandas as pd
    import pandas as pd
    # Load the dataset
    tweet_data = pd.read_csv("C://Users/shivam/Desktop/USA_TWEETS .csv", sep='\t', names = ["Date", "ID", "Place", "Text", "Username"])
    tweet_data_df = pd.DataFrame(tweet_data)

现在,我想应用主题建模。在文本变量上。我应该如何继续前进?

   # let us now, store the text variable of the data-frame in another object
   tweets = tweet_data.Text

请提供您的代码建议,我是主题建模概念的新手

我正在尝试做这样的事情,但得到了错误 - TypeError:期望的字符串或类似字节的对象

    from sklearn.feature_extraction.text import CountVectorizer, 
    TfidfVectorizer
    from sklearn.decomposition import LatentDirichletAllocation

    import pandas as pd
    import nltk
    from nltk.corpus import stopwords
    from nltk.tokenize import word_tokenize
    from nltk.stem import PorterStemmer



    stemmer = PorterStemmer()

    extracted_data = []


    for x in range(0, len(data)-1):
        for word in word_tokenize(text_data.tolist()[x]):
        extracted_data.append(word)

    print(extracted_data)

也可以帮助我,或者从头开始应用主题建模的任何其他代码。在此先感谢。

数据集: https://drive.google.com/open?id=0B5i9wCO1uYC9aV9fVHg4dHVidjQ

2 个答案:

答案 0 :(得分:0)

我会说使用lda package。 scikit-learn包便于降低维数,但不太方便获取主题词和文档主题分布。

该代码类似于从here复制的以下内容。

>>> import numpy as np
>>> import lda
>>> import lda.datasets
>>> X = lda.datasets.load_reuters()
>>> vocab = lda.datasets.load_reuters_vocab()
>>> titles = lda.datasets.load_reuters_titles()
>>> X.shape
(395, 4258)
>>> X.sum()
84010
>>> model = lda.LDA(n_topics=20, n_iter=1500, random_state=1)
>>> model.fit(X)  # model.fit_transform(X) is also available
>>> topic_word = model.topic_word_  # model.components_ also works
>>> n_top_words = 8
>>> for i, topic_dist in enumerate(topic_word):
...     topic_words = np.array(vocab)[np.argsort(topic_dist)][:-(n_top_words+1):-1]
...     print('Topic {}: {}'.format(i, ' '.join(topic_words)))

探索变量X,词汇和标题,看看它们是什么以及如何在自己的数据集上构建它们。 要构建 n_doc X n_vocab 矩阵,您可以使用scikit-learn的vectorizer

答案 1 :(得分:0)

您收到该错误的原因是您需要将字符串传递给分类器。

使用此:

tweet = " ".join(tweet)