1

J'ai une liste de mots dans la variable de texte avec leurs étiquettes. J'aime faire un classificateur qui peut prédire l'étiquette du nouveau texte d'entrée.Classification de texte en utilisant Python

Je pense utiliser le paquetage scikit-learn en Python pour utiliser le modèle SVM.

Je me rends compte que le texte doit être converti en forme vectorielle, donc j'essaye TfidfVectorizer et CountVectorizer.

Ceci est mon code jusqu'à présent en utilisant TfidfVectorizer:

from sklearn import svm 
from sklearn.feature_extraction.text import TfidfVectorizer 

label = ['organisasi','organisasi','organisasi','organisasi','organisasi','lokasi','lokasi','lokasi','lokasi','lokasi'] 
text = ['Partai Anamat Nasional','Persatuan Sepak Bola', 'Himpunan Mahasiswa','Organisasi Sosial','Masyarakat Peduli','Malioboro','Candi Borobudur','Taman Pintar','Museum Sejarah','Monumen Mandala'] 

vectorizer = TfidfVectorizer(min_df=1) 

X = vectorizer.fit_transform(text) 
y = label 

klasifikasi = svm.SVC() 

klasifikasi = klasifikasi.fit(X,y) #training 

test_text = ['Partai Perjuangan'] 
test_vector = vectorizer.fit_transform(test_text) 

prediksi = klasifikasi.predict([test_vector]) #test 

print(prediksi) 

J'essaie aussi CountVectorizer avec la même code ci-dessus. deux montrant le même résultat d'erreur:

ValueError: setting an array element with a sequence. 

Comment résoudre ce problème? Merci

+0

vous demandez comment résoudre un problème, mais je ne trouve nulle part dans un problème de question mentionnée - si quel est le problème? – Drako

+0

Avez-vous essayé 'TfidfTransformer (smooth_idf = True)' à la place? –

+0

@Coldspeed son montrant une erreur: 'TypeError: aucune conversion prise en charge pour les types: (dtype (' ytomo

Répondre

2

L'erreur est due à cette ligne:

prediksi = klasifikasi.predict([test_vector]) 

La plupart des estimateurs de scikit ont besoin d'un tableau de forme [n_samples, n_features]. La sortie test_vector de TfidfVectorizer est déjà prête à être utilisée pour les estimateurs. Vous n'avez pas besoin d'envelopper entre crochets ([ et ]). L'emballage en fait une liste qui ne convient pas.

Essayez d'utiliser comme ceci:

prediksi = klasifikasi.predict(test_vector) 

Mais même alors vous gt erreur. En raison de cette ligne:

test_vector = vectorizer.fit_transform(test_text) 

Ici vous équipons la vectorisation d'une manière différente de ce qui a été appris par l'estimateur klasifikasi. fit_transform() est juste un raccourci pour appeler fit() (apprentissage des données), puis transform() il. Pour les données de test, toujours utiliser la méthode transform(), jamais fit() ou fit_transform()

donc le bon code sera:

test_vector = vectorizer.transform(test_text) 
prediksi = klasifikasi.predict(test_vector) 

#Output: array(['organisasi'], dtype='|S10') 
+0

merci. Cela m'a vraiment aidé. – ytomo