More actions
imported>enochbible No edit summary |
imported>enochbible No edit summary |
||
| Line 1: | Line 1: | ||
== | = 요약 = | ||
* 가장 느리고 무식한 Linear Search로도 문제해결 했다를 보여주는 의지의 한국인 코드 | |||
* 프로그램을 재실행하면 또 오래 기다려야 해서 파일 입출력을 적극 활용 | |||
* 고로 이 프로그램을 복붙해서 그냥 실행하면 돌아가지 않습니다 | |||
* 이 프로그램은 Bayes Classifier 값을 구하는것 까지이고, 시간 관계상 값의 참/거짓 빈도는 엑셀을 이용해서 계산했습니다. | |||
== 확률값 분석 == | |||
* 다른 분들과 달리, 저는 한 글자인 문자와 특수문자를 첫 글자로 포함하는 단어들은 Train Data 및 Test Data 분석에 포함시키지 않았습니다. | |||
* 때문에, 경제 면에서는 200개의 기사 중 148개의 분류를 성공하는 저조한 성적을 보였습니다. | |||
* 반면, 정치 면에서는 200개의 기사 중 188개의 분류를 성공하여, 94%의 정확도를 보였습니다. | |||
== test File Analysis == | == Source Code == | ||
=== Train File Analysis === | |||
import java.io.*; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.StringTokenizer; | |||
public class FileAnalasys { | |||
String filename; | |||
List<String> articles; | |||
public List<String> data; | |||
public List<Integer> frequency; | |||
FileAnalasys(String f){ | |||
filename = f; | |||
articles = new ArrayList<String>(); | |||
data = new ArrayList<String>(); | |||
frequency = new ArrayList<Integer>(); | |||
} | |||
public void moveFileToData(){ | |||
try{ | |||
FileReader fr = new FileReader(filename); | |||
BufferedReader br = new BufferedReader(fr); | |||
String line; | |||
String str; | |||
line = br.readLine(); | |||
while(line != null){ | |||
articles.add(line); | |||
StringTokenizer st = new StringTokenizer(line, " "); | |||
while(st.hasMoreTokens()){ | |||
str = st.nextToken(); | |||
if(str.length() > 1 && str.charAt(0) != '.' && str.charAt(0) != ','&& str.charAt(0) != '!'&& str.charAt(0) != '"' && str.charAt(0) != ':' && str.charAt(0) != '-' && str.charAt(0) != ';'){ | |||
boolean addFlag = true; | |||
for(int i=0; i<data.size(); i++){ | |||
if(str.equals(data.get(i))){ | |||
frequency.set(i, frequency.get(i)+1); | |||
addFlag = false; | |||
break; | |||
} | |||
} | |||
if(addFlag){ | |||
data.add(str); | |||
frequency.add(1); | |||
} | |||
} | |||
} | |||
line = br.readLine(); | |||
} | |||
this.printDataToFile(); | |||
fr.close(); | |||
} catch(IOException e){ | |||
e.printStackTrace(); | |||
} | |||
} | |||
private void printDataToFile(){ | |||
try { | |||
String fname = "D:/analysis.txt"; | |||
FileWriter fw = new FileWriter(fname); | |||
String str = null; | |||
for(int i=0; i < data.size(); i++){ | |||
str = data.get(i) + "\t" + frequency.get(i) + "\n"; | |||
fw.write(str); | |||
} | |||
fw.close(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
public void loadAnalysisFile(){ | |||
try{ | |||
FileReader fr = new FileReader(filename); | |||
BufferedReader br = new BufferedReader(fr); | |||
String line; | |||
line = br.readLine(); | |||
while(line != null){ | |||
StringTokenizer st = new StringTokenizer(line, "\t"); | |||
data.add(st.nextToken()); | |||
frequency.add(Integer.parseInt(st.nextToken())); | |||
line = br.readLine(); | |||
} | |||
} catch(IOException e){ | |||
e.printStackTrace(); | |||
} | |||
} | |||
public void printArticle(){ | |||
for(int i=0; i<articles.size(); i++){ | |||
System.out.println(articles.get(i)); | |||
System.out.print("\n\n"); | |||
} | |||
} | |||
public void printData(){ | |||
for(int i=0; i<data.size(); i++){ | |||
System.out.print(data.get(i)); | |||
System.out.println(" " + frequency.get(i)); | |||
} | |||
System.out.println("Data size : "+data.size()); | |||
System.out.println("Frequency size : "+frequency.size()); | |||
} | |||
public int getArticleLength(){ return articles.size(); } | |||
} | |||
=== test File Analysis === | |||
import java.io.BufferedReader; | |||
import java.io.FileReader; | |||
import java.io.FileWriter; | |||
import java.io.IOException; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.StringTokenizer; | |||
public class testFileCal { | |||
String filename; | |||
List<Double> bayes; | |||
testFileCal(String f){ | |||
filename = f; | |||
bayes = new ArrayList<Double>(); | |||
} | |||
public void testArticleRead(List<String> data, List<Integer> frequency, List<String> data2, List<Integer> frequency2){ | |||
try{ | |||
FileReader fr = new FileReader(filename); | |||
BufferedReader br = new BufferedReader(fr); | |||
String line; | |||
String str; | |||
line = br.readLine(); | |||
while(line != null){ | |||
StringTokenizer st = new StringTokenizer(line, " "); | |||
ArrayList<String> articleWords = new ArrayList<String>(); | |||
while(st.hasMoreTokens()){ | |||
str = st.nextToken(); | |||
if(str.length() > 1 && str.charAt(0) != '.' && str.charAt(0) != ','&& str.charAt(0) != '!'&& str.charAt(0) != '"' && str.charAt(0) != ':' && str.charAt(0) != '-' && str.charAt(0) != ';'){ | |||
boolean addFlag = true; | |||
for(int j=0; j<articleWords.size(); j++){ | |||
if(str.equals(articleWords.get(j))){ | |||
addFlag = false; | |||
break; | |||
} | |||
} | |||
if(addFlag) articleWords.add(str); | |||
} | |||
} | |||
for(int i=0; i<articleWords.size(); i++) System.out.println(articleWords.get(i)); | |||
double bayesNumber = 0; | |||
for(int j=0; j<articleWords.size(); j++){ | |||
int eNum = 0; | |||
int pNum = 0; | |||
for(int k=0; k<data.size(); k++){ | |||
if(articleWords.get(j).equals(data.get(k))) eNum = frequency.get(k); | |||
} | |||
for(int k=0; k<data2.size(); k++){ | |||
if(articleWords.get(j).equals(data2.get(k))) pNum = frequency2.get(k); | |||
} | |||
if (eNum == 0 || pNum == 0){ eNum++; pNum++; } | |||
bayesNumber += Math.log((double)eNum / (double)pNum); | |||
System.out.println(bayesNumber); | |||
} | |||
bayes.add(bayesNumber); | |||
line = br.readLine(); | |||
} | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
public void printBayes(){ | |||
System.out.println("bayes size : "+bayes.size()); | |||
try { | |||
String fname = "D:/bayesResult.txt"; | |||
FileWriter fw = new FileWriter(fname); | |||
String str = null; | |||
for(int i=0; i < bayes.size(); i++){ | |||
str = bayes.get(i) + "\n"; | |||
System.out.println(str); | |||
fw.write(str); | |||
} | |||
fw.close(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
public static void main(String [] args){ | |||
FileAnalasys ec = new FileAnalasys("D:/economy_analysis.txt"); | |||
FileAnalasys po = new FileAnalasys("D:/politics_analysis.txt"); | |||
ec.loadAnalysisFile(); | |||
po.loadAnalysisFile(); | |||
//testFileCal testE = new testFileCal("D:/economy.txt"); | |||
testFileCal testP = new testFileCal("D:/politics.txt"); | |||
//testE.testArticleRead(ec.data, ec.frequency, po.data, po.frequency); | |||
testP.testArticleRead(po.data, po.frequency, ec.data, ec.frequency); | |||
testP.printBayes(); | |||
} | |||
} | |||
Revision as of 13:39, 28 June 2011
요약
- 가장 느리고 무식한 Linear Search로도 문제해결 했다를 보여주는 의지의 한국인 코드
- 프로그램을 재실행하면 또 오래 기다려야 해서 파일 입출력을 적극 활용
- 고로 이 프로그램을 복붙해서 그냥 실행하면 돌아가지 않습니다
- 이 프로그램은 Bayes Classifier 값을 구하는것 까지이고, 시간 관계상 값의 참/거짓 빈도는 엑셀을 이용해서 계산했습니다.
확률값 분석
- 다른 분들과 달리, 저는 한 글자인 문자와 특수문자를 첫 글자로 포함하는 단어들은 Train Data 및 Test Data 분석에 포함시키지 않았습니다.
- 때문에, 경제 면에서는 200개의 기사 중 148개의 분류를 성공하는 저조한 성적을 보였습니다.
- 반면, 정치 면에서는 200개의 기사 중 188개의 분류를 성공하여, 94%의 정확도를 보였습니다.
Source Code
Train File Analysis
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class FileAnalasys {
String filename;
List<String> articles;
public List<String> data;
public List<Integer> frequency;
FileAnalasys(String f){
filename = f;
articles = new ArrayList<String>();
data = new ArrayList<String>();
frequency = new ArrayList<Integer>();
}
public void moveFileToData(){
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String line;
String str;
line = br.readLine();
while(line != null){
articles.add(line);
StringTokenizer st = new StringTokenizer(line, " ");
while(st.hasMoreTokens()){
str = st.nextToken();
if(str.length() > 1 && str.charAt(0) != '.' && str.charAt(0) != ','&& str.charAt(0) != '!'&& str.charAt(0) != '"' && str.charAt(0) != ':' && str.charAt(0) != '-' && str.charAt(0) != ';'){
boolean addFlag = true;
for(int i=0; i<data.size(); i++){
if(str.equals(data.get(i))){
frequency.set(i, frequency.get(i)+1);
addFlag = false;
break;
}
}
if(addFlag){
data.add(str);
frequency.add(1);
}
}
}
line = br.readLine();
}
this.printDataToFile();
fr.close();
} catch(IOException e){
e.printStackTrace();
}
}
private void printDataToFile(){
try {
String fname = "D:/analysis.txt";
FileWriter fw = new FileWriter(fname);
String str = null;
for(int i=0; i < data.size(); i++){
str = data.get(i) + "\t" + frequency.get(i) + "\n";
fw.write(str);
}
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void loadAnalysisFile(){
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String line;
line = br.readLine();
while(line != null){
StringTokenizer st = new StringTokenizer(line, "\t");
data.add(st.nextToken());
frequency.add(Integer.parseInt(st.nextToken()));
line = br.readLine();
}
} catch(IOException e){
e.printStackTrace();
}
}
public void printArticle(){
for(int i=0; i<articles.size(); i++){
System.out.println(articles.get(i));
System.out.print("\n\n");
}
}
public void printData(){
for(int i=0; i<data.size(); i++){
System.out.print(data.get(i));
System.out.println(" " + frequency.get(i));
}
System.out.println("Data size : "+data.size());
System.out.println("Frequency size : "+frequency.size());
}
public int getArticleLength(){ return articles.size(); }
}
test File Analysis
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class testFileCal {
String filename;
List<Double> bayes;
testFileCal(String f){
filename = f;
bayes = new ArrayList<Double>();
}
public void testArticleRead(List<String> data, List<Integer> frequency, List<String> data2, List<Integer> frequency2){
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String line;
String str;
line = br.readLine();
while(line != null){
StringTokenizer st = new StringTokenizer(line, " ");
ArrayList<String> articleWords = new ArrayList<String>();
while(st.hasMoreTokens()){
str = st.nextToken();
if(str.length() > 1 && str.charAt(0) != '.' && str.charAt(0) != ','&& str.charAt(0) != '!'&& str.charAt(0) != '"' && str.charAt(0) != ':' && str.charAt(0) != '-' && str.charAt(0) != ';'){
boolean addFlag = true;
for(int j=0; j<articleWords.size(); j++){
if(str.equals(articleWords.get(j))){
addFlag = false;
break;
}
}
if(addFlag) articleWords.add(str);
}
}
for(int i=0; i<articleWords.size(); i++) System.out.println(articleWords.get(i));
double bayesNumber = 0;
for(int j=0; j<articleWords.size(); j++){
int eNum = 0;
int pNum = 0;
for(int k=0; k<data.size(); k++){
if(articleWords.get(j).equals(data.get(k))) eNum = frequency.get(k);
}
for(int k=0; k<data2.size(); k++){
if(articleWords.get(j).equals(data2.get(k))) pNum = frequency2.get(k);
}
if (eNum == 0 || pNum == 0){ eNum++; pNum++; }
bayesNumber += Math.log((double)eNum / (double)pNum);
System.out.println(bayesNumber);
}
bayes.add(bayesNumber);
line = br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void printBayes(){
System.out.println("bayes size : "+bayes.size());
try {
String fname = "D:/bayesResult.txt";
FileWriter fw = new FileWriter(fname);
String str = null;
for(int i=0; i < bayes.size(); i++){
str = bayes.get(i) + "\n";
System.out.println(str);
fw.write(str);
}
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String [] args){
FileAnalasys ec = new FileAnalasys("D:/economy_analysis.txt");
FileAnalasys po = new FileAnalasys("D:/politics_analysis.txt");
ec.loadAnalysisFile();
po.loadAnalysisFile();
//testFileCal testE = new testFileCal("D:/economy.txt");
testFileCal testP = new testFileCal("D:/politics.txt");
//testE.testArticleRead(ec.data, ec.frequency, po.data, po.frequency);
testP.testArticleRead(po.data, po.frequency, ec.data, ec.frequency);
testP.printBayes();
}
}