>

자연 언어 처리를 사용하여 데이터 세트를 분석하고 트위터 업데이트를 검증하는 파이썬 코드를 작성 중입니다. 내 랜덤 포레스트 모델이 완벽하게 작동합니다.

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)

모델을 사용하여 추출 된 트위터 업데이트를 분류하려고 할 때 :

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-


  • 답변 # 1

    CountVectorizer를 사용하여 텍스트 데이터를 숫자 배열로 변환합니다. 여기서 행은 문서를 나타내고 열은 단어를 나타냅니다. 따라서 이것은 모델이 입력으로 숫자 배열을 취한다는 것을 의미합니다. 문자열로 직접을 예측하려고하면 모델에서 해석 방법을 모릅니다.

    이 문제를 해결하려면 모델에서 이해할 수있는 문자열을 변환해야합니다.

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

    CountVectorizer는 문자열 객체를 직접 가져 가지 않으므로 해당 항목의 목록이 전달됩니다.

  • 이전 공백 후 모든 문자를 삭제하는 정규식 // Android Java
  • 다음 php - Webconfig 파일로 인해 Robotstxt 파일이 표시되지 않습니다