如何将单个推文提供给分类器模型?

问题描述 投票:1回答:1

我正在编写一个python代码,涉及使用自然语言处理分析数据集并验证twitter更新。我的随机森林模型运作完美。

dataset = pd.read_csv('bully.txt', delimiter ='\t', quoting = 3)

corpus = []
for i in range(0,8576):
    tweet = re.sub('[^a-zA-Z]', ' ', dataset['tweet'][i])
    tweet = tweet.lower()
    tweet = tweet.split()
    ps = PorterStemmer()
    tweet = [ps.stem(word) for word in tweet if not word in 
 set(stopwords.words('english'))]
    tweet = ' '.join(tweet)
    corpus.append(tweet)

将数据集转换为矢量

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features = 10000)
X = cv.fit_transform(corpus).toarray()
y = dataset.iloc[:, 1].values

分为火车和测试数据

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = 0)

分类器模型

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier()
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

这是我访问推文的代码:

for status in tweepy.Cursor(api.home_timeline).items(1):
    print "tweet: "+ status.text.encode('utf-8')
    corpus1 = []
    update = status.text
    update = re.sub('[^a-zA-Z]', ' ', update)
    update = update.lower()
    update = update.split()
    ps = PorterStemmer()
    update = [ps.stem(word) for word in update if not word in set(stopwords.words('english'))]
    update = ' '.join(update)
    corpus1.append(update)

当我尝试使用模型对提取的twitter更新进行分类时:

if classifier.predict(update):
    print "bullying"

else:
    print "not bullying"

我收到此错误:

ValueError: could not convert string to float: dude

如何将单个推文发送给模型?

我的数据集是这样的:https://drive.google.com/open?id=1BG3cFszsZjAJ_pcST2jRxDH0ukf411M-

python machine-learning nlp classification tweepy
1个回答
0
投票

您使用CountVectorizer将文本数据转换为数字数组,其中行指示文档,列指示单词。因此,这意味着您的模型会将一组数字作为输入。如果您尝试直接使用字符串预测a,则模型不知道如何解释它。

要解决这个问题,您需要转换您的模型可以理解的字符串。

update=cv.transform([update])
if classifier.predict(update):
    print "bullying"

else:
    print "not bullying"

CountVectorizer不直接接受字符串对象,因此传递该项的列表。

© www.soinside.com 2019 - 2024. All rights reserved.