我想在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
答案 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)