Created
October 14, 2019 13:20
-
-
Save sugiartocokrowibowo/633e96df5f231b73ee2dcbe60343ea49 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package naivebayesclassification; | |
import java.io.BufferedReader; | |
import java.io.File; | |
import java.io.FileReader; | |
import java.util.ArrayList; | |
import javafx.application.Application; | |
import javafx.event.ActionEvent; | |
import javafx.event.EventHandler; | |
import javafx.geometry.Insets; | |
import javafx.scene.Scene; | |
import javafx.scene.control.Button; | |
import javafx.scene.control.Label; | |
import javafx.scene.control.Tab; | |
import javafx.scene.control.TabPane; | |
import javafx.scene.control.TextArea; | |
import javafx.scene.control.TextField; | |
import javafx.scene.layout.ColumnConstraints; | |
import javafx.scene.layout.GridPane; | |
import javafx.scene.layout.Priority; | |
import javafx.scene.layout.RowConstraints; | |
import javafx.scene.layout.StackPane; | |
import javafx.stage.DirectoryChooser; | |
import javafx.stage.FileChooser; | |
import javafx.stage.FileChooser.ExtensionFilter; | |
import javafx.stage.Stage; | |
public class NaiveBayesClassification extends Application { | |
private TextArea taInfoProses, taDataTraining, taTarget, taToken, taModel, taDatatesting, taHasiltesting, taTestCase; | |
private final FileChooser fileChooser = new FileChooser(); | |
private File fileDataTraining = null; | |
private File fileDataTesting = null; | |
private String sDataTraining = new String(); | |
private String sDataTesting = new String(); | |
private final String DATA_TRAINING = "data_training"; | |
private final String DATA_TESTING = "data_testing"; | |
private ArrayList<String> target = null; | |
private ArrayList<Data> listDataTraining = null; | |
private ArrayList<Data> listDataTesting = null; | |
@Override | |
public void start(Stage primaryStage) { | |
StackPane root = new StackPane(); | |
GridPane gridPane = new GridPane(); | |
gridPane.setPadding(new Insets(10, 10, 10, 10)); | |
gridPane.setHgap(5); | |
gridPane.setVgap(10); | |
//col constraints | |
ColumnConstraints col1 = new ColumnConstraints(); | |
col1.setHgrow(Priority.NEVER); | |
ColumnConstraints col2 = new ColumnConstraints(); | |
col2.setHgrow(Priority.ALWAYS); | |
ColumnConstraints col3 = new ColumnConstraints(); | |
col3.setHgrow(Priority.NEVER); | |
gridPane.getColumnConstraints().addAll(col1, col2, col3); | |
//row constraints | |
RowConstraints row1 = new RowConstraints(); | |
row1.setVgrow(Priority.NEVER); | |
RowConstraints row2 = new RowConstraints(); | |
row2.setVgrow(Priority.ALWAYS); | |
gridPane.getRowConstraints().addAll(row1, row1, row1, row1, row1, row2); | |
Label labelWorkspace = new Label("Workspace"); | |
gridPane.add(labelWorkspace, 0, 0); | |
TextField tfWorkspace = new TextField(); | |
gridPane.add(tfWorkspace, 1, 0); | |
Button buttonOpenWorkspace = new Button("Open"); | |
gridPane.add(buttonOpenWorkspace, 2, 0); | |
buttonOpenWorkspace.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(final ActionEvent e) { | |
DirectoryChooser chooser = new DirectoryChooser(); | |
chooser.setTitle("Workspace Naive Bayes"); | |
File selectedDirectory = chooser.showDialog(primaryStage); | |
if (selectedDirectory != null) { | |
tfWorkspace.setText(selectedDirectory.getPath().toString()); | |
//openFile(file); | |
} | |
} | |
}); | |
Label labelDataTraining = new Label("DataTraining"); | |
gridPane.add(labelDataTraining, 0, 1); | |
TextField tfDataTraining = new TextField(); | |
gridPane.add(tfDataTraining, 1, 1); | |
Button buttonOpenDataTraining = new Button("Browse Data Training"); | |
gridPane.add(buttonOpenDataTraining, 2, 1); | |
buttonOpenDataTraining.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(final ActionEvent e) { | |
fileChooser.setTitle("Open Data Training"); | |
fileChooser.getExtensionFilters().addAll( | |
new ExtensionFilter("Text Files", "*.txt"), | |
new ExtensionFilter("All Files", "*.*")); | |
File file = fileChooser.showOpenDialog(primaryStage); | |
if (file != null) { | |
tfDataTraining.setText(file.getPath().toString()); | |
//set file data training; | |
fileDataTraining = file; | |
} | |
} | |
}); | |
Label labelDataTesting = new Label("DataTesting"); | |
gridPane.add(labelDataTesting, 0, 2); | |
TextField tfDataTesting = new TextField(); | |
gridPane.add(tfDataTesting, 1, 2); | |
Button buttonOpenDataTesting = new Button("Browse Data Testing"); | |
gridPane.add(buttonOpenDataTesting, 2, 2); | |
buttonOpenDataTesting.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(final ActionEvent e) { | |
fileChooser.setTitle("Open Data Testing"); | |
fileChooser.getExtensionFilters().addAll( | |
new ExtensionFilter("Text Files", "*.txt"), | |
new ExtensionFilter("All Files", "*.*")); | |
File file = fileChooser.showOpenDialog(primaryStage); | |
if (file != null) { | |
tfDataTesting.setText(file.getPath().toString()); | |
//set file data testing; | |
fileDataTesting = file; | |
} | |
} | |
}); | |
Button buttonTrainingNaiveBayes = new Button("Training Naive Bayes Classification"); | |
gridPane.add(buttonTrainingNaiveBayes, 1, 3); | |
buttonTrainingNaiveBayes.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(final ActionEvent e) { | |
prosesTrainingNaiveBayes(); | |
} | |
}); | |
Button buttonTestingNaiveBayes = new Button("Testing Naive Bayes Classification"); | |
gridPane.add(buttonTestingNaiveBayes, 1, 4); | |
buttonTestingNaiveBayes.setOnAction(new EventHandler<ActionEvent>() { | |
@Override | |
public void handle(final ActionEvent e) { | |
/// | |
} | |
}); | |
//Binding | |
buttonOpenWorkspace.prefWidthProperty().bind(buttonOpenDataTraining.widthProperty()); | |
buttonOpenDataTesting.prefWidthProperty().bind(buttonOpenDataTraining.widthProperty()); | |
buttonTrainingNaiveBayes.prefWidthProperty().bind(tfDataTesting.widthProperty()); | |
buttonTestingNaiveBayes.prefWidthProperty().bind(tfDataTesting.widthProperty()); | |
TabPane tabPane = new TabPane(); | |
gridPane.add(tabPane, 0, 5, 3, 2); | |
//initialize text area taInfoProses,taTarget,taToken,taModel,taHasiltesting,taTestCase | |
taInfoProses = new TextArea(); | |
taDataTraining = new TextArea(); | |
taTarget = new TextArea(); | |
taToken = new TextArea(); | |
taModel = new TextArea(); | |
taDatatesting = new TextArea(); | |
taHasiltesting = new TextArea(); | |
taTestCase = new TextArea(); | |
taInfoProses.setWrapText(true); | |
taDataTraining.setWrapText(true); | |
taTarget.setWrapText(true); | |
taToken.setWrapText(true); | |
taModel.setWrapText(true); | |
taDatatesting.setWrapText(true); | |
taHasiltesting.setWrapText(true); | |
taTestCase.setWrapText(true); | |
Tab tab1 = new Tab(); | |
tab1.setText("Info Proses"); | |
tab1.setContent(taInfoProses); | |
Tab tab2 = new Tab(); | |
tab2.setText("Data Training"); | |
tab2.setContent(taDataTraining); | |
Tab tab3 = new Tab(); | |
tab3.setText("Target"); | |
tab3.setContent(taTarget); | |
Tab tab4 = new Tab(); | |
tab4.setText("Token"); | |
tab4.setContent(taToken); | |
Tab tab5 = new Tab(); | |
tab5.setText("Model"); | |
tab5.setContent(taModel); | |
Tab tab6 = new Tab(); | |
tab6.setText("Data Testing"); | |
tab6.setContent(taDatatesting); | |
Tab tab7 = new Tab(); | |
tab7.setText("Hasil Testing"); | |
tab7.setContent(taHasiltesting); | |
Tab tab8 = new Tab(); | |
tab8.setText("Test Manual"); | |
tab8.setContent(taTestCase); | |
tabPane.getSelectionModel().select(0); | |
tabPane.getTabs().addAll(tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8); | |
root.getChildren().add(gridPane); | |
Scene scene = new Scene(root, 1024, 768); | |
primaryStage.setTitle("Naive Bayes Classification"); | |
primaryStage.setScene(scene); | |
primaryStage.show(); | |
} | |
//methods | |
private ArrayList<Data> readData(File file, String jenisData) { | |
ArrayList<Data> listData = null; | |
try { | |
listData = new ArrayList<Data>(); | |
StringBuffer contents = new StringBuffer(); | |
BufferedReader reader = new BufferedReader(new FileReader(file)); | |
String sLine = null; | |
String separator = " "; | |
// repeat until all lines is read | |
while ((sLine = reader.readLine()) != null) { | |
String[] arrLine = sLine.split(separator); | |
String sTarget = arrLine[0]; | |
String sURL = arrLine[1]; | |
Data data = new Data(sTarget, sURL); | |
listData.add(data); | |
contents.append(sTarget + "<---" + sURL + "\n"); | |
} | |
if (listData.size() > 0) { | |
if (jenisData.equals(this.DATA_TRAINING)) { | |
sDataTraining = contents.toString(); | |
taDataTraining.setText(sDataTraining); | |
} else if (jenisData.equals(this.DATA_TESTING)) { | |
sDataTesting = contents.toString(); | |
taDatatesting.setText(sDataTesting); | |
} | |
} | |
reader.close(); | |
} catch (Exception ex) { | |
ex.printStackTrace(); | |
} | |
return listData; | |
} | |
private ArrayList<String> readTarget(ArrayList<Data> listData) { | |
ArrayList<String> listTarget = null; | |
if (listData != null) { | |
listTarget = new ArrayList<String>(); | |
for (int i = 0; i < listData.size(); i++) { | |
String sTarget = listData.get(i).getTarget().toLowerCase(); | |
boolean ada = false; | |
for (int j = 0; j < listTarget.size(); j++) { | |
if (listTarget.get(j).equals(sTarget)) { | |
ada = true; | |
break; | |
} | |
} | |
if (!ada) { | |
listTarget.add(sTarget); | |
} | |
} | |
String sTarget = ""; | |
for(int i=0;i<listTarget.size();i++){ | |
sTarget = (sTarget+listTarget.get(i)+"\n"); | |
} | |
taTarget.setText(sTarget); | |
} | |
return listTarget; | |
} | |
private void prosesTrainingNaiveBayes() { | |
if (fileDataTraining != null) { | |
this.listDataTraining = readData(fileDataTraining, this.DATA_TRAINING); | |
if (this.listDataTraining != null) { | |
//initialize target | |
target = readTarget(this.listDataTraining); | |
System.out.println(target.toString()); | |
} | |
} | |
} | |
public static void main(String[] args) { | |
launch(args); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment