(4.3)基於機器學習(分類)的酒店評論傾向性分析


酒店評論情感分析系統(四)——

基於機器學習(分類)的酒店評論傾向性分析

  本項目通過調用LingPipe中的DynamicLMClassifier,對已標注的“中文情感挖掘酒店評論語料”庫的學習,構造一個基本極性分析的分類器。然后用此分類器對GUI界面輸入的評論文本進行基本極性分析(Positive (favorable) vs. Negative (unfavorable)),返回的結果是對評論文本的總體評價。

環境:

1. 操作系統:windows7,X86,32位

2. Java JDK1.6

3. Eclipse3.4

4. LingPipe4.1

5. NetBeans6.9

項目運行圖示:

 

下面介紹一下項目是如何實現的。

前提條件:

1)  在Eclipse中新建一個名為SentimentAnalysis工程,配置LingPipe開源包

2)  在SentimentAnalysis工程下創建一個目錄POLARITY_DIR\ txt_sentoken,里面放置語料庫【”中文情感挖掘酒店評論語料”】,其中包含10000個已標注的文本。

構造分類器

在項目下新建一個類MyClassifier,用來訓練分類器。

 1 package my.SentimentAnalysis;
 2 
 3 import com.aliasi.util.Files;
 4 import com.aliasi.classify.Classification;
 5 import com.aliasi.classify.Classified;
 6 import com.aliasi.classify.DynamicLMClassifier;
 7 import com.aliasi.lm.NGramProcessLM;
 8 
 9 import java.io.File;
10 import java.io.IOException;
11 
12 public class MyClassifier {
13     //定義變量和初始化
14     File mPolarityDir;
15     String[] mCategories;
16     DynamicLMClassifier<NGramProcessLM> tClassifier;
17 
18     MyClassifier() {
19         int nGram = 8;
20         mPolarityDir = new File("POLARITY_DIR/txt_sentoken");    //獲取語料集
21         mCategories = mPolarityDir.list();  //獲取類別 
22         tClassifier = DynamicLMClassifier.createNGramProcess(mCategories,nGram); //構造分類器
23         try {
24             train();
25         } catch (ClassNotFoundException e) {
26             // TODO Auto-generated catch block
27             e.printStackTrace();
28         } catch (IOException e) {
29             // TODO Auto-generated catch block
30             e.printStackTrace();
31         }
32     }
33 
34     //分類器訓練
35     void train() throws ClassNotFoundException,IOException {
36         for (int i = 0; i < mCategories.length; ++i) {
37             String category = mCategories[i];
38             Classification classification = new Classification(category);
39             File file = new File(mPolarityDir,mCategories[i]);
40             File[] trainFiles = file.listFiles();
41             for (int j = 0; j < trainFiles.length; ++j) {
42                 File trainFile = trainFiles[j];
43                 String review = Files.readFromFile(trainFile,"ISO-8859-1");
44                 Classified<CharSequence> classified = new Classified<CharSequence>(review,classification);
45                 tClassifier.handle(classified);    
46             }
47         }        
48     }
49 
50     //返回分類器
51    public DynamicLMClassifier<NGramProcessLM> getClassifier(){
52         return tClassifier;
53    }
54 }

補充:

此分類器的正確率為82.88%,在10000個評論文本中,通過對9778個文本進行訓練,對222個文本進行測試。

 

構造GUI界面

本項目的GUI界面是在NetBeans平台下,利用JFrame窗體中的awt與swing組件,通過自由拖放和組件相關事件的處理而生成,此處細節不予說明,如有需要,可以自行參考NetBeans的學習教程。

定義和初始化分類器變量:

1     DynamicLMClassifier<NGramProcessLM> sClassifier;
2     MyClassifier mClassifier = new MyClassifier();
3     /** Creates new form SentimentAnalysisUI */
4     public SentimentAnalysisUI() {
5         initComponents();
6         sClassifier = mClassifier.getClassifier();  //分類器
7     }

界面中commit按鈕所觸發的事件:

1     String temp,review, result = null;
2     temp = String.valueOf(jTextArea1.getText()); //界面輸入的評論文本
3     review = new String(temp.getBytes("GB2312"),"ISO-8859-1"); //文本編碼轉換
4     Classification classification = sClassifier.classify(review);   //分類
5     result = String.valueOf(classification.bestCategory());   //分類結果
6     jTextArea2.setText(String.valueOf(result));  //顯示分類結果    

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM