반응형 All205 [루씬 인 액션] 5. 검색(2) - Score & Query 이번에는 연관도 점수와 다양한 종류의 질의에 대해서 살펴보겠습니다 연관도 점수 점수는 문서와 질의가 얼마나 비슷한지를 숫자로 표현한 값입니다 점수가 높을수록 연관도가 높고, 더 확실한 결과라고 볼 수 있습니다 점수 계산 유사도 점수 계산 공식(similarity scoring formula) : 각 문서가 질의와 얼마나 가까운지를 측정 (유사도 점수는 질의(q), 텀(t), 문서(d)를 기준으로 계산) 루씬은 지금까지 알려진 최상의 유사도 계산 공식을 사용하고 있지만, 루씬의 검색 기능을 사용할 때 점수 계산 공식의 세부적인 내용까지 알아야만 하는 건 아니다 (부담을 느낀다면 건너뛰자) 유사도 점수 계산 공식으로 산출한 값은 원본 점수입니다 0.0보다 크거나 같은 실수로 표현합니다 일반적으로 특정 문서의.. 2020. 12. 1. [이펙티브자바 3판] ITEM43. 람다보다는 메서드 참조를 사용하라 이번장의 핵심은... 메서드 참조는 람다의 간단명료한 대안이 될 수 있다 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고, 그렇지 않을 때만 람다를 사용하라 메서드 참조 함수 객체를 람다보다 더 간결하게 만드는 방법입니다 메서드 참조를 사용하는 편이 보통은 더 짧고 간결하므로, 람다로 구현했을 때 너무 길거나 복잡하다면 메서드 참조가 좋은 대안입니다 기능을 잘 드러내는 이름을 짓거나 친절한 설명을 문서로 남길 수도 있습니다 IDE들은 람다를 메서드 참조로 대체하라고 권하고 있습니다 보통은 이득이지만 항상은 아닙니다 때로는 람다가 더 간결할 수 있습니다 // 메서드 참조 service.execute(GoshThisClassNameIsHumongous::action); // lamda service.e.. 2020. 12. 1. [이펙티브자바 3판] ITEM42. 익명 클래스보다는 람다를 사용하라 이번장의 핵심은... 익명 클래스는 (함수형 인터페이스가 아닌) 타입의 인스턴스를 만들 때만 사용하라 함수 객체(function object) 추상 메서드 하나만 담은 인터페이스(Functional Interface)의 인스턴스 예제) 문자열을 길이순으로 정렬 List words = Arrays.asList(args); // 코드 42-1 익명 클래스의 인스턴스를 함수 객체로 사용 - 낡은 기법이다! (254쪽) Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); → 익명 클래스 방식은 코드가 너무 길기 .. 2020. 12. 1. [Java] Shallow copy(얕은 복사) vs Deep copy(깊은 복사) 안녕하세요~ 잭코딩입니다! 이번 내용에서는 Shallow copy(얕은 복사)와 Deep copy(깊은복사)를 살펴봅시다 코드를 짜다보면 객체를 복사해야할 경우가 생깁니다 이 때 실수로 복사를 잘못하면 큰 이슈가 생길 수 있습니다 Shallow copy(얕은 복사) vs Deep copy(깊은 복사) Shallow copy(얕은 복사)는 '주소값'을 복사합니다 (즉, 참조하고 있는 실제값은 같습니다) Deep copy(깊은 복사)는 '실제값'을 새로운 메모리 공간에 복사합니다 (즉, 실제값이 다릅니다) 한번 코드와 그림을 통해 알아볼까요? 우선 이름과 돈을 가진 JackCoding 클래스를 만듭니다 public class JackCoding { String name; long money; public J.. 2020. 11. 30. [이펙티브자바 3판] ITEM41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 이번장의 핵심은... 마커 인터페이스와 마커 애너테이션은 각자의 쓰임이 있다 새로 추가하는 메서드 없이 단지 타입 정의가 목적이라면 마커 인터페이스이 올바른 선택이다 클래스나 인터페이스 외의 프로그램 요소에 마킹해야 하거나, 애너테이션을 적극 활용하는 프레임워크의 일부로 그 마커를 편입시키고자 한다면 마커 애너테이션이 올바른 선택이다 마커 인터페이스 아무 메서드도 담고 있지 않고, 구현한 클래스를 표시해주는 인터페이스 ex) Serializable 인터페이스 Serializable은 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통해 쓸 수 있다고, 즉, 직렬화(serializtion)할 수 있다고 알려줌 public interface Serializable{ } 마커 애너테이션이.. 2020. 11. 29. [Leetcode(릿코드)] 3. Longest Substring Without Repeating Characters (Medium) leetcode.com/problems/longest-substring-without-repeating-characters/ Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 가장 긴 문자열의 길이를 구하는 문제이다 (중복없이) 예를 들어 s = "abcabcbb"가 input으로 들어오면, 중복되는 문자열 없이 abc, bca, cab, b ... 만들 수 있다 따라서 답.. 2020. 11. 29. [루씬 인 액션] 4. 검색(1) - IndexSearcher 검색은 5가지 주제를 통해 알아보겠습니다 1. 루씬 색인의 문서 검색 2. 다양한 루씬 내장 질의 활용 3. 검색 결과 활용 4. 연관도 점수 계산 방법 5. 사람이 입력한 질의 변환 앞에선 검색 준비 단계인 색인을 구축하는 과정을 설명했습니다 이제 색인 과정에들인 노력을 활용할 수 있는 방법을 살펴봅시다 루씬의 핵심 검색 API IndexSearcher : 색인을 검색하는 기능을 담당하는 클래스 Query : 실제 Query 하위 클래스에서 특정 질의 기능을 구현 QueryParser : 텍스트 형태의 질의를 분석해 루씬 Query 객체로 변환 TopDocs : IndexSearcher.search 검색한 결과 중 연관도 점수가 가장 높은 결과 문서를 담음 (내림차순) ScoreDoc : TopDocs.. 2020. 11. 29. 이전 1 ··· 13 14 15 16 17 18 19 ··· 30 다음 반응형