본문 바로가기

Analyzer

[Lucene] 한글명사 추출 Analyzer 입니다. 이번에 공개소프트웨어 개발자 대회에 출품하였다가 1회전 낙방한 한글명사 추출 Analyzer입니다. 형태소 분석 알고리즘은 들어있지 않고 String Scan 형식으로 사전과 Match되는 명사를 추출하고 동의어사전, 복합명사사전, 불용어사전등을 사용하여 루씬의 Analyzer와 Filter의 사용으로 여러 기능을 구현하고 있습니다. 형태소분석까지는 무리더라도 Scan을 좀 빠른 속도와 효율적인 알고리즘, 자료구조로 바꿔보고 싶은 욕심은 있습니다. 형태소분석 기능이 들어가면 더할나위 없이 좋겠지만 제가 형태소분석에 대한 지식이 없어서 구현은 하지 못 하였습니다. 소스는 github를 사용하여 관리하고 있습니다. 한글명사 추출의 기능적인 면보다도 어쩌면 Analyzer와 Filter의 사용에 대한 공부에 .. 더보기
[lucene] Analyzer와 Filter (2.4.0) 예전에 작성해 놓은 Analyzer와 Filter 포스트는 1.4.X 버젼대의 소스입니다. 예전에는 Analyzer의 형식이 public TokenStream tokenStream(String fieldName, Reader content) { return new GSKoreanSynonymFilter( new GSKoreanStopWordFilter( new GSKoreanSeperatorWordFilter( new GSKoreanSeperatorNameWordFilter( new GSKoreanTokenizer(content){} //GSKoreanTokenizer ) // GSKoreanSeperatorNameWordFilter ) //GSKoreanSeperatorWordFilter ), engi.. 더보기
[lucene] 한글 analyzer 컨셉을 잡아봤습니다. 루씬에서 사용 할 색인어 추출기.. 컨셉을 잡아봤습니다. 명사만 뚝뚝 추출 할 것이냐, 문장 그대로를 검색 시킬 것이냐.. 예를 들면 "쇼핑몰 포인트를 어디서 받을 수 있을까요" 라는 검색어가 들어올 경우 키워드만 추출하는 (쇼핑몰/ 포인트)가 아닌 "어디서 받을 수 있을까요" 라는 문장만으로도 검색이 가능하게 하는 그런것이 트렌드인듯 합니다. 네이버도 그렇고.. 구글도 그렇고... 일단.. 이렇게 가려고 합니다. Tokenizer를 상속받은 KoreanTokenizer 클래스를 만들어서 어절분리(띄어쓰기..), 특수문자제거, 한글-영어/숫자 분리(삼성mp3 -> 삼성, mp3), 소문자 정규화를 시키고 명사사전을 사용하여 명사를 분리하는 Filter 클래스를 만들고.. 필요없는 어미를 제거하는 Filt.. 더보기
[lucene] 루씬으로 사용 할 한글 Analyzer를 제작 중입니다. 루씬을 사용하기 위해 상품명 색인어 추출을 위한 Analyzer를 제작중입니다. 맨땅에서 할 실력이 안되어서 루씬인액션 책에 있는 StemFilter를 참고하여 텍스트 사전 기반의 StemFilter를 하나 만들고 CharTokenizer를 참고하여 영문/숫자와 한글을 분리해내는 Tokenizer를 하나 만들어서 시작 해볼 생각입니다. 형태소 분석이라기 보다는 말 그대로 색인어 추출에 가깝죠..;; 국어도 못 하고 형태소 분석하기 위해서 국어 공부와 알고리즘 등등을 할 엄두가 나지 않아 일단 부딫혀 봤습니다. 빡세네요..^^;; 그래도 저한테는 많은 도움이 될 것 같습니다.. 정리되는대로 소스도 올려보고 해서 많은 도움 받았으면 좋겠네요..웅 일단 정품 아베크롬비 프리티 베드포드 핫팬츠/반바지[착불], .. 더보기
[lucene] 필드별 Analyzer 지정 PerFieldAnalayzerWrapper analyzer = new PerFieldAnalyzerWrapper(new SimpleAnalyzer()); analyzer.addAnalyzer("field_name", new KeywordAnalyzer()); Query query = QueryParser.parse("filed_name:S12 AND SPACE", "descrption", analyzer); Hits hits = searcher.search(query); ... 더보기
[lucene] 분석기(Analyzer) 의 구조. Analyzer는 텍스트를 일련의 토큰 (TokenStream)으로 변환한다. TokenStream 클래스는 Token 클래스를 차례로 반환한다. Token은 문자열, 시작위치, 끝 위치, 토큰 종류, 위치 증가값등을 갖고 텀은 단어와 위치 증가값만을 사용하여 변환되며, 텀이 바로 색인에 저장되는 단위이다. TokenStream에는 Tokenier와 TokenFilter가 있고 Tokenizer는 글자 단위로 토큰을 만들고, TokenFilter는 토큰 단위로 처리를 한다. Tokenizer가 TokenStream을 반환하면, TokenFilter는 TokenStream을 입력 받아 TokenStream이 토큰을 뽑아내면 그 토큰에 새로운 토큰을 더하거나 삭제 할 수 있다. (분석기 확장 용이) 이를 염.. 더보기