2015-12-22 2 views
-2

У меня есть некоторые твиты для анализа настроений. Таким образом, я выбрал твиты, используя Twitter4J, после чего я решил использовать библиотеки Weka для использования таких методов, как KMeans, Naive Bayes, SVM и т. Д.Классифицировать твиты в Java с помощью Weka

Во-первых, я переместил твиты в текстовый файл вручную и сам написал свои классы. Это мои данные о тренировках. В моем коде я прочитал этот файл и попытался обучить и проверить свою модель. Но я получил ошибку

"Exception in thread "main" weka.core.UnsupportedAttributeTypeException: Cannot handle string attributes!" 

Чтобы исправить это, я использовал фильтр StringtoWordVector, но он тоже не работал. Вот мой код:

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 

import weka.classifiers.Classifier; 
import weka.classifiers.Evaluation; 
import weka.classifiers.bayes.NaiveBayes; 
import weka.classifiers.lazy.IBk; 
import weka.classifiers.meta.FilteredClassifier; 
import weka.core.Attribute; 
import weka.core.FastVector; 
import weka.core.Instance; 
import weka.core.Instances; 
import weka.filters.unsupervised.attribute.StringToWordVector; 

public class Driver { 
    public static BufferedReader readDataFile(String filename) { 
     BufferedReader inputReader = null; 

     try { 
      inputReader = new BufferedReader(new FileReader(filename)); 
     } catch (FileNotFoundException ex) { 
      System.err.println("File not found: " + filename); 
     } 

     return inputReader; 
    } 

    public static void main(String[] args) throws Exception{ 
    BufferedReader datafile = readDataFile("file.txt"); 

    Instances data = new Instances(datafile); 
    data.setClassIndex(data.numAttributes() - 1); 



    FilteredClassifier fc = new FilteredClassifier(); 

    /
    Classifier cModel = (Classifier)new IBk(); 

    cModel.buildClassifier(data); 

    StringToWordVector swv = new StringToWordVector(); 
    fc.setFilter(swv); 
    fc.setClassifier(cModel); 


    // Test the model 
    Evaluation eTest = new Evaluation(data); 
    eTest.evaluateModel(cModel, data); 

    // Print the result à la Weka explorer: 
    String strSummary = eTest.toSummaryString(); 
    System.out.println(strSummary); 

    // Get the confusion matrix 
    double[][] cmMatrix = eTest.confusionMatrix(); 
    for(int row_i=0; row_i<cmMatrix.length; row_i++){ 
     for(int col_i=0; col_i<cmMatrix.length; col_i++){ 
      System.out.print(cmMatrix[row_i][col_i]); 
      System.out.print("|"); 
     } 
     System.out.println(); 
    } 
} 
} 

Я также хочу показать мою file.txt:

@relation twitter 

@attribute tweetMsg string 
@attribute class{positive,negative,neutral} 

@data 

"bugün hava çok güzel",positive 
"hiç iyi hissetmiyorum",negative 
"hayat çok normal",neutral 
"Diriliş Ertuğrul izlerken her türlü kumpasın döndüğünü görmek ama günün birinde Osmanlı Beyliği' nin kurulacağını bilmenin huzuru ?",positive 
"Diriliş Ertuğrul dizisi ile tarihe merakim arttı ??",positive 
"Kanka moralim bozuk diyorum boşver kanka gel diriliş ertuğrul izleyelim diyor yemin ederim kanka gibi kanka .",positive 
"Diriliş Ertuğrul beni son zamanlarda futbol dışında TVde tutan tek yapım kurgusu, görseli süper",positive 
"#kösemsultan Osmanlının gerçek yüzünü çıkardıkları için mi hoşunuza gitmiyor Diriliş Ertuğrul saçmalığın alası hadi onuda şikayet edin!!!",negative 
"Benim için LeylaileMecnun neyse abim için Diriliş Ertuğrul da o.",neutral 
"#MutlulukNeDiyeSorsalar diriliş Ertuğrul izlemek derim",positive 
"beyler muhteşem yüz yıl kösemi izliyorum da diriliş ertuğrul bu diziye 10 takar. saray saray değil kadınlar hamamı sanki.",positive 
"Diriliş Ertuğrul diziside ne boktan bir senaryo arkadaş. Herif 4 bölümde bir hain ilan edilip sonra obaya geri geliyor sonra yine hain :):)",negative 
"Diriliş Ertuğrul izlemekten babama beyim dedim amk",neutral 
"Diriliş ertuğrul haric bütün Türk dizileri saçmalik broo",positive 

Однако эти чириканье на турецком языке. Итак, ты думаешь, что я пойду правильно? Или я должен сделать что-то более сложное? Как, в первую очередь, слова и т. Д.

Любая помощь по моим вопросам будет оценена по достоинству.

ответ

2

Прочитайте сообщение об ошибке:

Cannot handle string attributes! 

, очевидно, относится к этой линии:

@attribute tweetMsg string 

IBk Классификатор не поддерживает string атрибуты.

+0

Я видел, но я уже пробовал другие классификаторы, такие как Naive Bayes, J48, Logistic и т. Д. Ни один из них не работал. Я скорее спрашиваю, что это правильный способ сделать это? – Gunner1905

+0

Да, потому что вы не исправили проблему с атрибутом string. Вы должны его векторизовать перед обучением классификатора. –

Смежные вопросы