Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 딥러닝개념
- RNN Attention
- 체험디자인
- 딥러닝용어
- self-attention
- StringJoiner
- R TF-IDF
- 언어모델
- 자언어처리모델
- R 키워드 가중치
- 통계기반자연어처리
- 어탠션
- deeplearning용어
- 마르코프 체인
- 자연어처리
- R에서의 워드클라우드
- WordCloud R
- R dataframe
- StringBuffer vs StringBuilder
- r word2vec
- word2vec
- 상호작용디자인
- HashMap
- 마르코프
- deeplearning개념
- R에서의 wordcloud
- selfattention
- R 워드클라우드
- 도날드노만
- wordVector
Archives
- Today
- Total
클로이의 데이터 여행기
[JAVA] 키워드 카운트(keyword count) 본문
이번 포스팅에는 '키워드를 카운트 하는 코드'를 다뤄보려합니다.
코드 목적은 '대량의 문장을 읽어와서, 어떤 단어들이 자주 쓰였는지 카운트 하는 것' 입니다.
코드는 메소드 3개로 구성되어 있으며 내용은 메소드별 설명은 아래와 같습니다.
① getData()
- 메소드 기능 : 문장을 공백 단위로 끊어 rawList에 담음.
- 상세내용 : 대체/제거하고 싶은 특수문자 처리한 뒤, 문장을 공백으로 spilt하여 rawList로 담음.
② getCoreComp()
- 메소드 기능 : 핵심역량 키워드의 카운트
- 상세내용 : rawList에 중복으로 담겨있는 키워드를 뽑아와서 coreCntMap<키워드,카운트>로 담음.
이 때, coreCntMap에 이미 담겨있으면 카운트(value)에 1을 더함.
③ writeFile()
- 메소드 기능 : 파일을 작성하는 메소드
- 상세내용 : <키워드,카운트>가 담긴 맵을 파일로 작성하되, 카운트가 100이 초과되는 경우만 작성.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | package highFrequency; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; public class GetHighFrequency { static String[] coreComp; static ArrayList<String> rawList = new ArrayList<String>(); static HashMap<String, Integer> coreCntMap = new HashMap<String, Integer>(); static String NEWLINE = System.getProperty("line.separator"); // 문장을 공백 단위로 끊어 rawList에 담는 메소드 public static void getData() { File file = new File("C:/data/input/501524.txt"); String line = ""; String tempCore = ""; try { BufferedReader inFiles = new BufferedReader( new InputStreamReader(new FileInputStream(file.getAbsolutePath()), "UTF8")); while ((line = inFiles.readLine()) != null) { // 전처리 ① : 필드명 제거 tempCore = line.replace("core_competence:", ""); // 전처리 ② : 핵심역량에서 특수문자를 제거('replace'활용)한 뒤, // 라인단위("|*|")로 split하여 키워드를 coreComp에 담음 coreComp = tempCore.replace("|*|", " "). replace(".", ""). replace("!", ""). replace(",", " "). replace("(", " "). replace(")", " "). replace("[", " "). replace("]", " "). replace("/", " "). replace("합니다", " ").split(" "); for (int k = 0; k < coreComp.length; k++) { if (coreComp[k].length() != 0) rawList.add(coreComp[k]); } } inFiles.close(); } catch (Exception e) { e.printStackTrace(); } } // 핵심역량 키워드의 카운트를 하는 메소드 public static void getCoreComp() { int cnt = 1; for (int k = 0; k < rawList.size(); k++) { if (coreCntMap.containsKey(rawList.get(k))) { cnt = coreCntMap.get(rawList.get(k)) + 1; } else { cnt = 1; } coreCntMap.put(rawList.get(k), cnt); } } // 파일 작성하는 메소드 public static void writeFile() { String filename = "C:/data/output/coreComp_cnt_result.txt"; try { File output = new File(filename); BufferedWriter writer = new BufferedWriter(new FileWriter(output)); if (output.isFile() && output.canWrite()) { for (String key : coreCntMap.keySet()) { if (coreCntMap.get(key) > 20) { StringBuilder sb = new StringBuilder(); sb.append(key); sb.append(","); sb.append(coreCntMap.get(key)); sb.append(NEWLINE); //System.out.println("sb : " + sb); String resultString = sb.toString(); writer.write(resultString); } } } writer.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { System.out.println("==============데이터 가져오기 시작=============="); getData(); System.out.println("===============키워드 카운트 시작==============="); getCoreComp(); System.out.println("================파일 작성 시작================"); writeFile(); System.out.println("====================끝===================="); } } | cs |
이상입니다.
보시는 것처럼 단어는 띄어쓰기를 기준으로 구분하여 조사, 어미가 깔끔히 제거되지는 못했습니다.
이점 참고 부탁드리며, 추후에 형태소분석기(아마도 twitter)를 이용하여 전처리 한뒤 키워드를 카운팅하 내용도 다루어 보겠습니다.
감사합니다.
'JAVA' 카테고리의 다른 글
[JAVA] 1:다(多) 데이터를 1:1 데이터로 바꾸기(전환) (0) | 2019.04.26 |
---|---|
[JAVA] 문자열 처리에 자주쓰는 클래스 (0) | 2019.03.11 |
[JAVA] 문자열 연결 처리 속도 높이기 (1) | 2019.02.07 |
[JAVA] 문자열 선언방법 비교 (String vs StringBuffer,StringBuilder,StringJoiner) (0) | 2019.01.29 |
[JAVA] isFile(),isDirectory(),exists() 비교 (0) | 2019.01.28 |
Comments