Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package farm_ads; import java.util.Hashtable; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import weka.classifiers.Classifier; import weka.classifiers.Evaluation; import weka.core.Instances; /** * * @author Cau be mua he */ public class Form extends javax.swing.JFrame { private static final long serialVersionUID = 1L; JFileChooser uFile = new JFileChooser(); MyClassifier cls = new MyClassifier(); Instances train = null; Instances test = null; Hashtable att = new Hashtable(); Hashtable num_att = new Hashtable(); String iv = new String(); Classifier model = null; Evaluation eval = null; /** * Creates new form Form */ public Form() { this.test = null; this.train = null; readAttributes(); initComponents(); } private void readAttributes() { FarmAds a = new FarmAds(); a.readAttFromFile("data\\attributes.txt"); this.att = a.attributes; this.iv = a.ins_vecto; this.num_att = a.num_att; } private void status(int i) { if (i == 0) { this.jStatus.setText("Status: processing"); } else if (i == 1) { this.jStatus.setText("Status: OK"); } else if (i == 2) { this.jStatus.setText("Status: Error"); } } private void detailInstances(Instances i) { String s = new String(); s += "==== Thng tin d liu ==== \n"; s += "\n S lng mu: " + i.numInstances(); s += "\n S thuc tnh: 54877"; this.tResult.setText(s); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); oTS = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); oTestSet = new javax.swing.JButton(); jEval = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); tResult = new javax.swing.JTextArea(); jLabel3 = new javax.swing.JLabel(); bCI = new javax.swing.JTextField(); bOK = new javax.swing.JButton(); bLoadModel = new javax.swing.JButton(); bCMI = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jSMO = new javax.swing.JButton(); jNB = new javax.swing.JButton(); jStatus = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("QUNG C?O NNG TRI"); setAutoRequestFocus(false); setResizable(false); getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel1.setText("Training set:"); getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(18, 15, -1, -1)); oTS.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N oTS.setText("Open File"); oTS.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { oTSActionPerformed(evt); } }); getContentPane().add(oTS, new org.netbeans.lib.awtextra.AbsoluteConstraints(111, 11, -1, -1)); jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel2.setText("Test set:"); getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(18, 56, -1, -1)); oTestSet.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N oTestSet.setText("Open File"); oTestSet.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { oTestSetActionPerformed(evt); } }); getContentPane().add(oTestSet, new org.netbeans.lib.awtextra.AbsoluteConstraints(111, 52, -1, -1)); jEval.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jEval.setText("Evaluation"); jEval.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jEvalActionPerformed(evt); } }); getContentPane().add(jEval, new org.netbeans.lib.awtextra.AbsoluteConstraints(520, 50, 115, -1)); tResult.setColumns(20); tResult.setFont(new java.awt.Font("Monospaced", 0, 14)); // NOI18N tResult.setRows(5); tResult.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Result", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 14))); // NOI18N jScrollPane1.setViewportView(tResult); getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(18, 175, 697, 370)); jLabel3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel3.setText("Classify a Instance:"); getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(18, 143, -1, -1)); bCI.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N getContentPane().add(bCI, new org.netbeans.lib.awtextra.AbsoluteConstraints(178, 140, 470, -1)); bOK.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N bOK.setText("Ok"); bOK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bOKActionPerformed(evt); } }); getContentPane().add(bOK, new org.netbeans.lib.awtextra.AbsoluteConstraints(666, 139, -1, -1)); bLoadModel.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N bLoadModel.setText("Load Model"); bLoadModel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bLoadModelActionPerformed(evt); } }); getContentPane().add(bLoadModel, new org.netbeans.lib.awtextra.AbsoluteConstraints(520, 20, 115, -1)); bCMI.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N bCMI.setText("Open File"); bCMI.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bCMIActionPerformed(evt); } }); getContentPane().add(bCMI, new org.netbeans.lib.awtextra.AbsoluteConstraints(178, 103, -1, -1)); jLabel4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel4.setText("Classify Multi Instances:"); getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(18, 107, -1, -1)); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Build Classifer", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 14))); // NOI18N jPanel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jSMO.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jSMO.setText("SMO"); jSMO.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jSMOActionPerformed(evt); } }); jPanel1.add(jSMO); jNB.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jNB.setText("Naive Bayes"); jNB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jNBActionPerformed(evt); } }); jPanel1.add(jNB); getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 10, 200, 80)); jStatus.setFont(new java.awt.Font("Tahoma", 2, 14)); // NOI18N jStatus.setText("Status:"); getContentPane().add(jStatus, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 550, 200, 30)); pack(); setLocationRelativeTo(null); }// </editor-fold>//GEN-END:initComponents // ?c file training set private void oTSActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oTSActionPerformed status(0); int oFile = uFile.showOpenDialog(this); if (oFile == JFileChooser.APPROVE_OPTION) { try { String url = uFile.getSelectedFile().getPath(); String name = uFile.getSelectedFile().getName(); int len = name.length(); if (len >= 4 && name.substring(len - 4, len).equals(".txt")) { //train = cls.readIntances(url); train = cls.readIntances(url, att, num_att, iv); JOptionPane.showMessageDialog(this, "??c file thnh cng!!"); detailInstances(train); status(1); } else { JOptionPane.showMessageDialog(this, "Kiu file khng hp l!!" + "\n ?nh dng file: *.txt !!"); status(2); } } catch (Exception ex) { status(2); Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } } }//GEN-LAST:event_oTSActionPerformed // ?c file test set private void oTestSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oTestSetActionPerformed // TODO add your handling code here: status(0); int oFile = uFile.showOpenDialog(this); if (oFile == JFileChooser.APPROVE_OPTION) { try { if (model != null && train != null) { String url = uFile.getSelectedFile().getPath(); String name = uFile.getSelectedFile().getName(); int len = name.length(); if (len >= 4 && name.substring(len - 4, len).equals(".txt")) { //test = cls.readIntances(url); test = cls.readIntances(url, att, num_att, iv); //eval = cls.evaluationModel(train, test, model); //tResult.setText(cls.printEvaluation(eval)); JOptionPane.showMessageDialog(this, "??c file thnh cng!!"); detailInstances(test); status(1); } else { JOptionPane.showMessageDialog(this, "Kiu file khng hp l!!" + "\n ?nh dng file: *.txt !!"); status(2); } } else { JOptionPane.showMessageDialog(this, "Bn cn ?c file train v xy dng m hnh trc!!"); status(2); } } catch (Exception ex) { status(2); Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } } }//GEN-LAST:event_oTestSetActionPerformed // xy dng m hnh s dng thut ton SMO private void jSMOActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSMOActionPerformed status(0); try { // TODO add your handling code here: if (train != null) { JOptionPane.showMessageDialog(this, "Bt u hun luyn m hnh!!"); model = cls.classifierSMO(train); tResult.setText(model.toString()); cls.saveMoDel("data\\SMO", model); JOptionPane.showMessageDialog(this, "Hun luyn m hnh thnh cng!!"); status(1); } else { JOptionPane.showMessageDialog(this, "Bn cn ?c file train trc!!"); status(2); } } catch (Exception ex) { Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); status(2); } }//GEN-LAST:event_jSMOActionPerformed // nh gi m hnh private void jEvalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jEvalActionPerformed status(0); try { // TODO add your handling code here: if (train != null && test != null) { JOptionPane.showMessageDialog(this, "Bt u nh gi m hnh!!"); eval = cls.evaluationModel(train, test, model); tResult.setText(cls.printEvaluation(eval)); JOptionPane.showMessageDialog(this, "Hon thnh!!"); status(1); } else { JOptionPane.showMessageDialog(this, "Ban can nhap file train va test!!"); status(2); } } catch (Exception ex) { Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jEvalActionPerformed // ?c m hnh t file private void bLoadModelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bLoadModelActionPerformed // TODO add your handling code here: status(0); int oFile = uFile.showOpenDialog(this); if (oFile == JFileChooser.APPROVE_OPTION) { try { String url = uFile.getSelectedFile().getPath(); String name = uFile.getSelectedFile().getName(); int len = name.length(); if (len >= 6 && name.substring(len - 6, len).equals(".model")) { model = cls.loadModel(url); JOptionPane.showMessageDialog(this, "??c file thnh cng!!"); tResult.setText(model.toString()); status(1); } else { JOptionPane.showMessageDialog(this, "Kiu file khng hp l!!" + "\n ?nh dng file: *.model !!"); status(2); } } catch (Exception ex) { Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } } }//GEN-LAST:event_bLoadModelActionPerformed // phn lp nhi?u mu bng qua nhp file private void bCMIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bCMIActionPerformed // TODO add your handling code here: status(0); int oFile = uFile.showOpenDialog(this); if (oFile == JFileChooser.APPROVE_OPTION) { try { status(0); if (model != null) { String url = uFile.getSelectedFile().getPath(); String name = uFile.getSelectedFile().getName(); int len = name.length(); if (len >= 4 && name.substring(len - 4, len).equals(".txt")) { //test = cls.readIntances(url); test = cls.readIntances(url, att, num_att, iv); tResult.setText(cls.ClassifyMultiInstances(model, test)); JOptionPane.showMessageDialog(this, "??c file thnh cng!!" + "\n Nhn OK xem kt qu phn lp!!"); status(1); } else { JOptionPane.showMessageDialog(this, "Kiu file khng hp l!!" + "\n ?nh dng file: *.txt !!"); status(2); } } else { JOptionPane.showMessageDialog(this, "Bn cha xy dng m hnh!!"); } } catch (Exception ex) { Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } } }//GEN-LAST:event_bCMIActionPerformed //Xy dng m hnh s dng thut ton Naive Bayes private void jNBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jNBActionPerformed // TODO add your handling code here: status(0); try { // TODO add your handling code here: if (train != null) { JOptionPane.showMessageDialog(this, "Bt u hun luyn m hnh!!"); model = cls.classifierNB(train); tResult.setText(model.toString()); cls.saveMoDel("data\\NB", model); JOptionPane.showMessageDialog(this, "Hun luyn m hnh thnh cng!!"); status(1); } else { JOptionPane.showMessageDialog(this, "Bn cn ?c file train trc!!"); status(2); } } catch (Exception ex) { Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jNBActionPerformed // phn lp cho mt mu nhp t bn phm private void bOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bOKActionPerformed try { // TODO add your handling code here: status(0); if (model != null) { String s = cls.ClassifyInstance(model, bCI.getText().trim()); tResult.setText(s); status(1); } else { JOptionPane.showMessageDialog(this, "Bn cha xy dng m hnh!!"); status(2); } } catch (Exception ex) { Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_bOKActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Form.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Form.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Form.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Form.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(() -> { new Form().setVisible(true); }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField bCI; private javax.swing.JButton bCMI; private javax.swing.JButton bLoadModel; private javax.swing.JButton bOK; private javax.swing.JButton jEval; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JButton jNB; private javax.swing.JPanel jPanel1; private javax.swing.JButton jSMO; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel jStatus; private javax.swing.JButton oTS; private javax.swing.JButton oTestSet; private javax.swing.JTextArea tResult; // End of variables declaration//GEN-END:variables }