[JAVA] 여러 문서에서 나타나는 substring 저장하기 공부 이야기

* 여러 문서에서 나타나는 모든 string(substring 포함)에 대해, 출연횟수(해당 string이 나타나는 문서 수)를 셈
* 단, 여기서 string은 특수문자(알파벳과 숫자를 제외한 모든 문자)를 단위로 끊어짐
* 그 후, 해당 string과 출연횟수를 저장한 token_counter.txt를 만드고, k번 이상 나타나는 string과 출연횟수를 저장한 token_counter_over'k'.txt를 만듦

* 만든 이유 : suffix tree로 만들려고 했는데, 멈춰서 그냥 HashMap으로 되나 했더니 금방 끝나더라

* 결론 : 삽질이 없이는 발전이 없다



package formalJS;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class formalJS {
public static void main(String[] args) throws IOException,
InterruptedException {

File folder = new File(
"C:/Users/sjyoon/Documents/workspace/word_counter/code/chrome_cache");
File[] listOfFiles = folder.listFiles();
Set<String> file_word = new HashSet<String>();
HashMap<String, Integer> set_word = new HashMap<String, Integer>();
//delimiter
String delimiter = "\\W|_";
String line=null;
for(File file : listOfFiles){
if(file.isFile()){
System.out.println(file.getName() + " is checking.");
FileReader file_reader = new FileReader(file);
BufferedReader reader = new BufferedReader(file_reader);
while ((line = reader.readLine()) != null) {
line = line.toLowerCase();
String[] line_word = line.split(delimiter);
for (String word : line_word) {
if (word.length() == 0) {
;
}
else{
for(int begin_ind = 0 ; begin_ind < word.length() ; begin_ind++ )
     {
        for(int end_ind = 1 ; end_ind <= word.length() - begin_ind ; end_ind++ )
        {
        file_word.add(word.substring(begin_ind, begin_ind+end_ind));
        }
     }
}
}
line=null;
}
for(String word : file_word.toArray(new String[file_word.size()])){
if(set_word.containsKey(word)==true){
int counter = set_word.get(word).intValue();
set_word.put(word, counter+1);
}
else{
set_word.put(word, new Integer(1));
}
}
file_word.clear();
}
}
int k=85;
BufferedWriter writer = new BufferedWriter(
new FileWriter(new File("token_counter.txt")));
BufferedWriter writer_over = new BufferedWriter(
new FileWriter(new File("token_counter_over"+Integer.toString(k)+".txt")));

for(String word : set_word.keySet()){
writer.write(word);
writer.write(",");
writer.write(set_word.get(word).toString());
writer.write("\n");
if(set_word.get(word).intValue() >= k){
writer_over.write(word);
writer_over.write(",");
writer_over.write(set_word.get(word).toString());
writer_over.write("\n");
}
}
writer.close();
writer_over.close();
set_word.clear();
System.out.println("end line.");

}
}