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
- R TF-IDF
- 체험디자인
- 마르코프
- RNN Attention
- 딥러닝개념
- 통계기반자연어처리
- StringBuffer vs StringBuilder
- WordCloud R
- 도날드노만
- 자연어처리
- R 키워드 가중치
- HashMap
- selfattention
- wordVector
- R dataframe
- R 워드클라우드
- R에서의 워드클라우드
- 어탠션
- StringJoiner
- self-attention
- 자언어처리모델
- 딥러닝용어
- 언어모델
- 마르코프 체인
- r word2vec
- 상호작용디자인
- deeplearning용어
- deeplearning개념
- word2vec
- R에서의 wordcloud
Archives
- Today
- Total
클로이의 데이터 여행기
[JAVA] AR(연관성분석) 알고리즘 본문
오늘 포스팅 내용은 'AR(연관분석) 알고리즘'입니다.
공개된 소스를 사용하려고 했으나 결국 동료 연구원님의 도움을 받아 소스를 작성하게 되었습니다.
이 소스를 활용해서 구직자들의 경력기업리스트를 활용하여 연관기업명을 추출하였습니다.
동종 업종으로의 이직이 많을 것이라는 가정에서 시작하였습니다.
아래의 소스는 포스팅용으로 간단히 수정한 내용입니다.
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 | package test; import java.util.ArrayList; import java.util.HashMap; public class TestArAlgoti { public static void main(String[] args) { // 구매 아이템리스트 ArrayList<String> lineArrList = new ArrayList<String>(); // 하나의 아이템이 전체에서 나온 개수 축적하는 Map HashMap<String, Integer> uniqCntMap = new HashMap<String, Integer>(); // 기준 아이템과 같이 나온 대상 아이템의 개수 축적하는 Map HashMap<String, HashMap<String, Integer>> pareCntMap = new HashMap<String, HashMap<String, Integer>>(); // 임시로 넣은 데이터 lineArrList.add("기저귀,맥주,껌,사과"); lineArrList.add("기저귀,사과,참치캔,김치,맥주"); lineArrList.add("맥주,오징어"); lineArrList.add("과자,맥주,땅콩,사과,버섯"); lineArrList.add("약과,사과,감,정종,북어포,도라지,시금치,고사리"); lineArrList.add("맥주"); lineArrList.add("맥주,땅콩"); String stdItem = ""; String targetItem = ""; int cnt = 0; int uniCnt = 0; for (int i = 0; i < lineArrList.size(); i++) { // line 하나를 가져와 , 구분자로 split 해서 items 배열에 넣는다. String[] items = lineArrList.get(i).split(","); // item 개수만큼 for문을 돌린다. for (int n = 0; n < items.length; n++) { // items가 순서대로 stdItem이 되고 stdItem = items[n]; // 아이템별 등장 횟수 카운팅하여 uniqCntMap에 (키워드,카운트)형태로 담는다. if (uniqCntMap.containsKey(stdItem)) uniCnt = uniqCntMap.get(stdItem) + 1; else uniCnt = 1; uniqCntMap.put(stdItem, uniCnt); // pareCntMap에 기준아이템이 있으면 HashMap<String, Integer> targetCntMap = new HashMap<String, Integer>(); if (pareCntMap.containsKey(stdItem)) { // 있으면 있는 Map을 가져오고 targetCntMap = pareCntMap.get(stdItem); } else { // 없으면 새로 Map생성한다. targetCntMap = new HashMap<String, Integer>(); } for (int m = 0; m < items.length; m++) { // items가 순서대로 대상 아이템이 된다. targetItem = items[m]; // 기준 아이템과 대상 아이템이 같으면 // 해당 targetItem 에 대한 count 작업은 건너 뛴다. if (stdItem.equals(targetItem)) continue; // 가져온 targetCntMap에 targetItem이 있으면 if (targetCntMap.containsKey(targetItem)) cnt = targetCntMap.get(targetItem) + 1; else cnt = 1; // targetCntMap에 cnt를 업데이트 해준다. targetCntMap.put(targetItem, cnt); } // 큰 맵(pareCntMap)에 다시 넣어둔다. pareCntMap.put(stdItem, targetCntMap); } } for (String item : uniqCntMap.keySet()) System.out.println(item + " => " + uniqCntMap.get(item)); System.out.println("====================================="); System.out.println("[아이템 쌍 별 개수]"); for (String std : pareCntMap.keySet()) { HashMap<String, Integer> tarCntMap = pareCntMap.get(std); for (String tar : tarCntMap.keySet()) { int count = tarCntMap.get(tar); System.out.println("[" + std + "->" + tar + "] = " + count); } } } } | cs |
이상입니다.
감사합니다.
'JAVA' 카테고리의 다른 글
[JAVA] 동일한 값(데이터) 기준으로 결합(합치기) (0) | 2019.01.17 |
---|---|
[JAVA] equals와 == 비교 (0) | 2019.01.09 |
[JAVA] 중첩 HashMap(해쉬맵) 사용 및 출력방법 (2) | 2018.11.13 |
[JAVA] 여러 파일(file)을 읽는 메서드(method) (0) | 2018.11.12 |
[JAVA] eclipse 소소한 단축키 (2) | 2018.11.08 |
Comments