메뉴 건너뛰기

조회 수 5928 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

한글 문제는 항상 사람 발목을 잡는다. OTL.

Nutch 0.9를 이용해서

1) 자동적으로 Incremental Crawling을 하고,

2) 한글에 대해서 검색이 가능하고,

3) 웹 인터페이스가 가능하게 해 보자.

  

1. Nutch 0.9 소스를 다운받는다.

svn co http://svn.apache.org/repos/asf/lucene/nutch/tags/release-0.9/ ./nutch

export NUTCH_HOME ./nutch

  

2. Nutch 0.9 이하는 (0.8도 포함) 버그를 가지고 있어서 한글를 문자로 인식하지 않는다. 한글을 문자로 인식시키려면 NutchAnalysis.jj를 수정해야 한다.

  

2-1) NuchAnalysis.jj에 한글 영역을 추가 한다.

vi $NUTCH_HOME/src/java/org/apache/nutch/analysis/NuchAnalysis.jj

  

164라인부터 시작되는 CJK 부분을

변경전 :

|  <#CJK:                                        // non-alphabets

      [

       "\u3040"-"\u318f",

       "\u3300"-"\u337f",

       "\u3400"-"\u3d2d",

       "\u4e00"-"\u9fff",

       "\uf900"-"\ufaff"

      ]

    >

변경후:

|  <#CJK:                                        // non-alphabets

      [

       "\u3040"-"\u318f",

       "\u3300"-"\u337f",

       "\u3400"-"\u3d2d",

       "\u4e00"-"\u9fff",

       "\uac00"-"\ud7a3",

       "\uf900"-"\ufaff"

      ]

    >

로 바꾸어 준다. "\uac00"-"\ud7a3"는 UTF-8에서 한글이 차지하는 영역이다.

  

2-1) NuchAnalysis.jj를 빌드하여 .java파일을 만든다.

cd src/java/org/apache/nutch/analysis

javacc NutchAnalysis.jj

  

3. Nutch 전체를 빌드 한다.

cd $NUTCH_HOME

ant

  

4. 웹을 크롤링 한다. 우선, JAVA_HOME 과 CATALINA_HOME이 설정되어 있어야 한다. 크롤링은 다음을 참조한다.

http://lucene.apache.org/nutch/tutorial8.html#Whole-web+Crawling

  

4-옵션) 자동적으로 클롤링을 하기 위해 Nutch 홈페이지에 있는 스크립트를 사용한다.

http://wiki.apache.org/nutch/Crawl

이 문서에 있는 스크립트에 일부 버그가 있어서, 수정 할 부분이 있다.

* 라인1

수정 전 :

#!/bin/sh

수정 후 :

#!/bin/bash

* 라인 38

수정 전 :

echo runbot: $0 could not find environment variable NUTCH_HOME

수정 후 :

echo runbot: $0 could not find environment variable CATALINA_HOME

그리고 cron을 이용해서 실행하려면, 위에서 JAVA_HOME 을 설정 해 주고 스크립트 중간에 cd $NUTCH_HOME을 해 주는 것이 낫다.

위의 파일을 $NUTCH_HOME/bin/runbot 으로 저장한다.

  

5. WAR파일을 빌드 한다.

cd $NUTCH_HOME

ant war

  

6. Tomcat에서 URL전송을 UTF-8을 이용하도록 설정한다.

vi $CATALINA_HOME/conf/server.xml

수정 전 :

<Connector port="8080" maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8443" acceptCount="100"

               connectionTimeout="20000" disableUploadTimeout="true" />

  

수정 후 :

<Connector port="8080" maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8443" acceptCount="100"

               connectionTimeout="20000" disableUploadTimeout="true"

               URIEncoding="UTF-8" />

  

7. Tomcat Manager를 이용해서 $NUTCH_HOME/build/nutch-0.9.war 를 Deploy한다. 주의할 점은 $NUTCH_HOME/nutch-0.9.war 와 헷갈리지 않도록 한다.

Tomcat Manager에서 Deploy하는 방법은

http://peterpuwang.googlepages.com/NutchGuideForDummies.htm

에서 5. Web Searching based on the crawling result above: 이하를 따라한다.

  

$CATALINA_HOME/webapps/nutch-0.9/WEB-INF/classes/nutch-site.xml 파일의 설정은 반드시 필요하다.

<configuration>

  <property>

    <name>searcher.dir</name>

    <value>크롤링된 문서가 있는 폴더 ($NUTCH_HOME/crawl 의 절대경로)</value>

  </property>

</configuration>

  

이 문서의 핵심:

1) NutchAnalysis.jj 에 한글 범위를 추가하고 새로 빌드.

2) $CATALINA_HOME/conf/server.xml 에서 URL을 UTF-8으로 처리하도록 설정.

  

주 :

NutchAnalysis.jj를 보면,

( token=<WORD> | token=<ACRONYM> | token=<SIGRAM>)

| <SIGRAM: <CJK> >

이기 때문에, 한글은 각각의 글자가 하나의 토큰으로 처리가 된다.

  

"검색을 잘 하고 싶다" 로 쿼리를 넣으면, 분석후 나온 결과는 "검 색 을 잘 하 고 싶 다" 가 된다.

이런 경우 결과가 만족스럽지 못한 경우가 생기는데

<SIGRAM: (<CJK>)+ >

로 수정하면 단어 전체가 하나의 토큰이 된다.

이러한 경우에는 "검색을" 이란 쿼리는 "검색은" 을 포함하는 문서를 검색 하지 못한다.

내 생각에는 <SIGRAM: (<CJK>)+ > 으로 하거나 Korean이라는 별도의 텀을 만들어서, 형태소 분석을 수행해야 겠다.

고려대 형태소 분석기가 있지만 C버전을 가지고 있기 때문에 힘들고 Porter Stemmer처럼 무식한(?) 어미 처리기를 만들어 봐야 겠다.


List of Articles
번호 제목 날짜 조회 수
38 쿠팡 api 프로젝트 / 적용 테스트 (스프링 부트 / 자바 ) file 2021.03.29 567
37 쿠키와 세션을 이용한 자동 로그인 처리 file 2018.07.04 8973
36 자바 스프링프레임워크 개발환경 설정하기-2편 file 2016.08.18 6490
35 자바 스프링프레임워크 개발환경 설정하기-1편 file 2016.08.18 6840
34 자바 스프링, spring AOP 구현 (xml 방식) file 2016.08.18 6200
33 자바 스프링, spring AOP 구현 (xml 방식) file 2016.08.18 5892
32 스프링을 구성하는 코어 모듈 - core module file 2016.12.08 5119
31 스프링에서 구글맵 연동하기 2018.07.04 4599
30 스프링과 안드로이드 연동5 : (Javascript에서 Android 함수 호출하기) 2018.07.04 3390
29 스프링과 안드로이드 연동4 : (JSON으로 가져오기) file 2018.07.04 5530
28 스프링과 안드로이드 연동3 : ( 서버에서 XML로 반환해 가져오기 ) 2018.07.04 2896
27 스프링과 안드로이드 연동2 : 서버에서 안드로이드로 이미지 가져오기(다운) 2018.07.04 3319
26 스프링과 안드로이드 연동1(Html 소스 가져오기) 2018.07.04 2675
25 스프링, MySQL, MyBatis 연동 - 데이터 조회하기 file 2021.05.06 791
24 스프링, MySQL, MyBatis 연동 file 2021.05.06 128
23 스프링(spring) 메일 발송 :: mailSender 2016.08.18 14879
22 스프링 프로젝트 생성 후 샘플 코드 한글 깨짐 현상 file 2021.03.31 186
21 스프링 외부 경로 폴더 지정하기 2018.07.04 4618
20 스프링 XML 설정에서 자바 설정 Import하기 file 2016.08.18 5071
19 스프링 Bean 객체의 초기화 및 소멸시 호출 메서드 file 2016.08.18 4996
Board Pagination Prev 1 2 Next
/ 2

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved