2015-12-22 92 views
-2

我有一些推文來進行情感分析。因此,我通過使用Twitter4J獲取推文,然後決定使用Weka庫來使用像KMeans,Naive Bayes,SVM等方法。使用Weka對Java中的推文進行分類

首先,我將tweets手動移動到文本文件中,並自己編寫了自己的類。這是我的訓練數據。在我的代碼中,我閱讀這個文件並試圖訓練和測試我的模型。但我得到了錯誤

"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

我看到了,但我已經嘗試過另一個分類器,比如樸素貝葉斯,J48,物流等。他們都沒有工作。我寧願問這是否是正確的方法? – Gunner1905

+0

是的,因爲你沒有解決字符串屬性的問題。在訓練分類器之前,您需要對其進行矢量化。 –