我正在编写一个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-
您使用CountVectorizer将文本数据转换为数字数组,其中行指示文档,列指示单词。因此,这意味着您的模型会将一组数字作为输入。如果您尝试直接使用字符串预测a,则模型不知道如何解释它。
要解决这个问题,您需要转换您的模型可以理解的字符串。
update=cv.transform([update])
if classifier.predict(update):
print "bullying"
else:
print "not bullying"
CountVectorizer不直接接受字符串对象,因此传递该项的列表。