정규식 online tester - regex101 & preg_match_all




자연어처리를 하다보면 종종 정규식을 사용하게 되는데

정규식 (pcre)를 코드에 반영하기 이전에 

온라인에서 내가 짠 정규식이 제대로 작동하는지 확인하고 싶을 경우가 있다. 




그럴때 사용할 수 있는 온라인 정규식 tester & debugger 사이트를 소개 한다. 


https://regex101.com/


사이트 바로가기 







왼쪽의 FLAVOR 메뉴에서 php의 pcre, javascrip, python, golang등의 

다양한 정규식 처리를 할 수 있는 프로그램 언어를 선택할 수 있다. 



빌라 이름에서 ()로 들어가 있는 문자열을 찾아 

()에 들어가 있는 세부 정보를 제거 하고 

대표 빌라 이름들만 추출하고 싶어 정규식을 작성하였다. 

한글도 되어 있는 빌라 이름이 없으면 그냥 숫자라도 남기기로 했다. 



REGULAR EXPLRESSION  에서 자신이 원하는 정규식을 작성하면 

아래 TEST STRING에서 정규식에 속하는 샘플들만 하이라이트 된다. 

그리고 오른쪽의 MATCH INFORMATION에서 

TEST STRING에서 정규식에서 추출된 이름들이 나열된다. 











현재 정규식으로도 내가 찾기 원하는 패턴을 찾을 수 있지만 

정규식에서는 추출하기를 원하는 패턴을  ()을 묶어 세부 패턴으로 지정할 수 있다. 

앞에 있는 빌라 이름만 추출하고 싶어 첫번째 세부 패턴 ()를 추가 하였다. 

문자열에 들어가 있는 문자 ( ) 와 세부 패턴은 escape 문자인 \로 구분이 된다. 

문자인 ( 과 )는 \로 escape   처리를 해 주었다. 






테스트 한 결과가 마음에 들면 

왼쪽의 TOOLS에서 code generator에서 

프로그래밍 언어별로 코드를 생성할 수도 있다. 







preg_match_all 함수는 링크에서 자세한 내용을 확인할 수 있다. 


preg_match_all( string $pattern, string $subject, 

[, array $matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]]



필수 옵션은 $pattern (정규식), $subject(문자열)이 있고 

그 외 옵션은 아래와 같다. 


$matches : 정규식을 찾은 결과를 저장하는 다차원 배열

$flags : 정규식으로 찾은 문자열을 저장하는 방식 

 (PREG_PATTERN_ORDER, PREG_SET_ORDER 등) 


PREG_PATTERN_ORDER으로 하면 $matches[0]에 찾은 전체 문자열이 들어가고

 $matches[1] 부터 ()으로 명시한 세부 패턴의 문자열이 들어간다. 


PREG_SET_ORDER 으로 하면 

$matches[*][0]에 찾은 전체 문자열이 들어가고

$matches[*][1] 부터 ()으로 명시한 세부 패턴의 문자열이 들어간다. 

*은 전체 세부 패턴의 개수만큼 있다. 


 $offset : 패턴이 찾기 시작하는 위치. 처음부터 찾기 시작하면 0. 



preg_match 


function get_alias($str)

{

        $re = '/(.+)\(.+\)/';


               preg_match($re, $str, $matches);


        // Print the entire match result

        var_dump($matches);

        return $matches[1];


}


string : 중앙힐타운(나)(450-11)


array(2) {

  [0]=>

  string(28) "중앙힐타운(나)(450-11)"

  [1]=>

  string(20) "중앙힐타운(나)"

}














dialogflow - curl 호출 php 스크립트




웹페이지에서 직접 dialogflow 를 사용할 일이 있어서 

php curl 로 dialogflow 서비스를 호출하는 스크립트를 작성했다



dialogflow 참고 사이트 




참고로 터미널에서는 아래와 같이 curl 호출을 할 수 있다. 


curl 'https://api.dialogflow.com/v1/query?v=20170712&query=test&lang=ko&sessionId=95aadeec-*** 78dd939&timezone=Asia/Seoul' -H 'Authorization:Bearer 9***'






여기서 본인의 인증 코드를 모르는 사람은 

dialogflow 서비스의 설정의 General 탭에서 확인 가능하다. 











링크한 문서의 access token을 보면 query 질의에는 client access token 을 사용하면 된다고 한다. 




참고로 access token 설정이 잘못 될 경우 

아래와 같은 에러 메세지가 나온다. 





{"status":{"code":401,"errorType":"unauthorized","errorDetails":"You are not authorized for this operation. Invalid access token"}}






아래는 전체 php 스크립트이다. 




<?

// Get cURL resource

$curl = curl_init();


// Set some options - we are passing in a useragent too here

$accesstoken = "9***";

$developertoken = "9****";

$headr = array();

$headr[] = 'Content-type: application/json';

$header[] = 'Authorization:Bearer '.$developertoken;

$query = "test";

curl_setopt_array($curl, array(

    CURLOPT_RETURNTRANSFER => 1,

    CURLOPT_URL => 'https://api.dialogflow.com/v1/query?v=20170712&query='.$query.'&lang=ko&sessionId=***-b320c78dd939&timezone=Asia/Seoul',

    #CURLOPT_USERAGENT => 'Codular Sample cURL Request',

    CURLOPT_HTTPHEADER => $header

));



// Send the request & save response to $resp

$resp = curl_exec($curl);


// Close request to clear up some resources

print_r($resp);


curl_close($curl);

?>




터미널에서 스크립트를 실행할 경우 

아래와 같이 정상적으로 dialogflow 실행  결과가 나온다. 




php client.php

{

  "id": "****",

  "timestamp": "2018-04-04T02:55:07.413Z",

  "lang": "ko",

  "result": {

    "source": "agent",

    "resolvedQuery": "test",

    "action": "s**",

    "actionIncomplete": false,

    "parameters": {},

    "contexts": [

      {

        "name": "test-followup",

        "parameters": {},

        "lifespan": 2

      }

    ],

    "metadata": {

      "intentId": "***",

      "webhookUsed": "true",

      "webhookForSlotFillingUsed": "false",

      "webhookResponseTime": 1297,

      "intentName": "test"

    },

    "fulfillment": {

      "speech": "Hello from webhook",

      "source": "agent",

      "displayText": "Hello from webhook",

      "messages": [

        {

          "type": 0,

          "speech": "Hello from webhook"

        }

      ]

    },

    "score": 1.0

  },

  "status": {

    "code": 200,

    "errorType": "success",

    "webhookTimedOut": false

  },

  "sessionId": "***dd939"

}




카카오톡 플러스친구 스마트채팅 API 개발하기 - 2. 환경 설정하기






카카오톡 플러스친구 스마팅채팅 API 개발하기 


1. 시작하기 

2. 환경 설정하기 





keyboard.php를 작성하였는데 아래와 같은 에러가 발생하였다. 


에러 수정하면서 나온 삽질들을 기록해보겠다. 



웹페이지에서 base url/keyboard를 하니 

페이지를 찾을 수 없다는 에러 메세지가 나온다. 

검색해보니 Multiviews 옵션 설정이 되어 있지 않아서 라고 한다. 


Multiviews 옵션을 주면 파일 확장자를 입력하지 않아도 

아파치의 mod_negotiation의 모듈에 의해 자동으로 가장 잘 맞는 파일을 선택할 수 있다. 


Multiviews 옵션을 줄 수 있는 방법은 여러가지가 있다. 


일단 .htaccess 파일에서 아래 라인을 추가해보았다. 


참고로 아파치2 설정들


 에러 로그 파일 위치: /var/log/apache2/error.log

config 파일 위치 : /etc/apache2/apache2.conf

재시작: /etc/init.d/apache2 restart 



Options +Multiviews





그랬더니 무시무시한 Internal Server Error가 ㅠㅠ 



Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.


급하기 아파치 로그 파일을 확인해니 
Options not allowed here 에러 메세지가 있다. 
검색해보니 보안 문제로 .htaccess에서 해당 옵션을 수정할 수 없다고 한다.




[Tue Sep 05 01:41:28.009590 2017] [core:alert] [pid 18112] /public_html/.htaccess: Options not allowed here

[Tue Sep 05 01:41:28.157225 2017] [core:alert] [pid 19510] [client **7] .htaccess Options not allowed here, referer: http:/***.co.kr/keyboard

[Tue Sep 05 01:41:43.792095 2017] [core:alert] [pid 27550] [client **] .htaccess: Options not allowed here

[Tue Sep 05 01:41:43.870598 2017] [core:alert] [pid 18334] [client **] .htaccess: Options not allowed here, referer: http://***.co.kr/keyboard




참고 블로그 1


https://kx.cloudingenium.com/linux/apache-web-server/solve-apache-error-htaccess-option-multiviews-allowed/



 아파치 기본 설정 파일(/etc/apache2/apache2.conf)에서 
해당 옵션을 추가하고 아파치를 재시작 하였다. 

재시작: /etc/init.d/apache2 restart 






<Directory /var/www/>
        Options Indexes MultiViews
        AllowOverride None
        Require all granted
</Directory>





이제 500 에러는 사라졌는데 
여전히 keyboard를 치면 keyboard.php가 로딩되지 않는다. 
다시 에러 로그를 확인해보니 negotiate 실패하였다는 메세지가 나온다. 





 vi /var/log/apache2/error.log

[Wed Sep 06 01:35:38.725690 2017] [negotiation:error] [pid 17689] [client 110.76.143.234:44834] AH00687: Negotiation: discovered file(s) matching request: /home/land/public_html/keyboard (None could be negotiate



다시 구글링해보니 mine.conf에서 php 옵션 설정을 해야 한다고 한다. 

mod_negotiation 모듈은 이미 mine.conf에서 

정해진 파일 타입만 찾는다고 한다. 


( mod_negotiation only looks for "interesting" (and known) file types. ) 


마지막으로 해당 옵션을 추가 하니 드디어 문제없이 작동한다 ㅠㅠ


 


vi /etc/apache2/mods-available/mime.conf




 AddType application/x-compress .Z
 AddType application/x-gzip .gz .tgz
AddType application/x-bzip2 .bz2
AddType application/x-httpd-php .php


드디어 정상적으로 API 테스트가 완료되고 스마트 채팅 개발이 시작되었다.





그리고 앞으로 이 github에 개발 내용을 공유할 예정이니 

관심있는 분은 방문이나 watch 걸어주셈!






  • 2018.01.05 17:54 ADDR 수정/삭제 답글

    비밀댓글입니다

    • adana 2018.04.03 13:01 신고 수정/삭제

      헛 간만에 포스팅 확인했더니 댓글이 ㅠㅠ 지금은 해결하셨기를 바랍니다;;

  • 2018.03.17 10:58 ADDR 수정/삭제 답글

    비밀댓글입니다

dialogflow로 chatbot 만들기 - (1) entity 생성




dialogflow로 chatbot만들기 


(1) entity 생성 





dialogflow(구 API.AI)로 챗봇을 만들어 보겠다. 


dialogflow는 챗봇 개발 플랫폼 

api.ai의 새로운 이름으로 

다양한 기능을 제공하고 있다. 

자세한 사항은 아래 링크에서 확인하자. 


챗봇 개발 플랫폼 비교 링크 



dialogflow  바로가기

 

일단 계정을 먼저 만들고 create agent 버튼을 클릭해서 

대화 에이전트를 생성하자. 


dialogflow 는 알람, 호텔 예약 등의 다양한 챗봇 샘플들을 가지고 있어서 

필요하면 에이전트에 포함할 수 있다. 





경제 관련 챗봇을 만들거라 샘플 데이터는 선택하지 않고 

언어는 한국어로 선택하여 에이전트를 생성하였다. 






agent가 생성되고 옆의 메뉴를 보면 intents와 entities를 생성할 수 있게 되어있다. 

여기서 intent는 대화의 의도를 의미하는 것으로 

인사, 날씨 물어보기, 영화 예약하기 등을 intent로 할 수 있다. 


entity는 범주화가 가능한 단어들의 단위로 

음식 이름, 영화 이름 등의 예시가 있다. 


그리고 이렇게 intent와 entity를 인식 후 

chat bot이 해야할 행동을 action이라고 한다. 


이 단어들은 앞으로 chatbot 개발을 하면서 계속 나올 것이다. 





경제 관련 chatbot을 만들 예정이므로 관련된 entity들을 생성해보겠다. 


어떤 entity를 생성하는 가에 대한 결정은 

 대화에서 어떤 단어를 알아야 

내가 제공하고자 하는 기능을 제공 할 수 있을지에 대한 고민에서 시작된다. 


예를 들어, 어떤 사용자가 아래와 같이 아파트 실거래가를 물었을 때 

실거래가를 알려주고 싶다면 아래 문장에서 어떤 정보를 인식할 필요가 있는가? 


상록 라이프 아파트 실거래가가 얼마야? 


일단 실거래가 라는 가격 정보가 필요할 것이고 

아파트 라는 부동산 타입 정보 

그리고 아파트 이름에 대한 정보도 필요할 것이다.


이것들을 각각 moneytype, realestatetype,  apartmentname이라는 entity로 생성해보겠다.  





create entity 버튼을 눌러서  moneytype 이라는 엔티티를 생성한다. 

부동산 관련 대화에서 매매가 나 전세금같은 부동산 관련 금전거래의 타입의 의미로 사용할 것이다. 


entity는 리스트 형태로 직접 입력하거나 

아니면 csv나 json 파일 형태로 올릴수도 있다. 





아파트나 빌라 등의 부동산 타입을 의미하는 단어들은 

realestatetype entity로 저장한다. 






지금까지 직접 단어들을 입력하였다면 

아파트 이름들은 개수가 많아 switch to raw mode 버튼을 클릭하여 

csv 파일을 복사해서 붙이려고 한다. 








참고로 csv 파일 포맷은 아래와 같다. 

각각의 엔트리는 하나의 라인으로 적고 

reference value(대표값)과 synonym(동의어)들을 , 로 연결한다. 

여기서 주의해야 할 것은 synonym에 대표값도 포함되어 있어야한다는 것이다. 


예를 들어 우면한라, 우면한라 이런식으로 대표값이 

두 번 반복이 되도록 csv 파일을 작성한다. 



하나의 단어들만 입력하니 아래와 같은 에러 화면이 나오니 주의하자. 






그리고 이름들에 특수기호가 포함되어 있으면 아래와 같은 에러가 발생한다. 










그 외 사항은 아래 csv format 문서를 참조한다. 







이렇게 만들려고 한 엔트리들을 다 생성하였다. 

다음에는 이 엔트리들로 intent를 생성하는 과정을 보여주겠다. 
















..


자연어처리 관련 오픈소스 정리




자연어처리 관련 오픈소스 정리 



1.  koNLPy (한국어, python)

 :  한국어 정보 처리를 위한 파이썬 패키지

말뭉치, 사전과 한국어 형태소들을 제공하고 있다. 


홈페이지 바로가기 


github 바로가기 





데이터(말뭉치) - 한국법률 말뭉치, 대한민국 국회 의안 말뭉치 

사전 - Hannanum 시스템 사전, Kkma 시스템 사전, Mecab 시스템 사전 


형태소 분석기도 다양한 클래스를 제공하고 있는데  

형태소 분석기 사용 비교도 참고할 만하다. 

비교 자료로는 로딩/실행 시간과 몇 개의 사용 예제가 제공되고 있다. 

(형태소 태깅 정확도 정보가 없는 것은 아쉽다(...)) 


http://konlpy-ko.readthedocs.io/ko/v0.4.3/morph/#comparison-between-pos-tagging-classes





2. NLTK  (자연어처리 패키지, 주로 영어 지원) 


자연어 처리에 관한 방대한 리소스, 코드 들을 구할 수 있다. 

영어 컨텐츠를 사용한다면 꼭 사용해봐야 할 패키지이다. 


github 바로가기





3. twitter tokenizer  (한국어 tokenizer) 


https://github.com/twitter/twitter-korean-text



4. gensim (word2vec, doc2vec) 


python 3 porting of gensim library : https://github.com/samantp/gensimPy3



5. word2vec-api (영어) 

: Simple web service providing a word embedding API



github 바로가기





https://github.com/keonkim/awesome-nlp


6. doc2vec (영어) 


https://github.com/jhlau/doc2vec



7. word2vec, doc2vec (한글)



한국어 word2vec, doc2vec 기훈련된 모델 및 데모 사이트 운영



github 바로가기





chatbot 만들기 - ( 0) 어떤 chatbot framework를 사용할 것인가?





지금 개발하는 부동산 정보 사이트에 마케팅 및 차별화 요소로 

부동산 챗봇을 만들겠다고 생각하고 기존의 챗봇 플랫폼들을 찾아보았다. 


대기업에서 지원하는 유명한 챗봇 개발 플랫폼만 5개가 있고 

그 외 다른 다양한 기능들을 많은 플랫폼들이 있었다. 


이중에서 과연 어떤 챗봇 개발 프레임워크를 사용할 것인가? 


선택전에 원하는 사양을 순서대로 적어보았다. 



- 무료인가? 

- 기계 학습을 지원하는가? 

- 한국어를 지원하는가? 

- 대화 flow 기능(시나리오)을 지원하는가? 

- 언어는 python이나 php였음 좋겠다 

- 다양한 플랫폼으로 integration됐으면 좋겠다. 

(페이스북이나 카카오톡 프랜즈에서 사용 가능하면 좋겠다) 



그리고 주요 5개 플랫폼을 비교한 포스팅에서 아래의 비교 표를 참조하였다. 





5개 챗봇 비교 출처 바로가기 (2017.06)



wit.ai와 api.ai가 무료이고 한국어도 지원하는 조건에 맞는 것 같아서 

각각 홈페이지를 방문해 보았다. 


이 포스팅이 2017년 6월에 작성한 글이였는데 

wit.ai는 기존에 제공하던 대화 flow UI를 더이상 제공하지 않았고 

api.ai는 dialogflow라는 이름으로 변경되었다. 


몇 개월만에 주요 기능들이 없어지고 이름도 바뀌고 

챗봇 플랫폼 시장도 변화가 빠르게 일어나는 것 같다. 

( 즉 챗봇 개발을 할 경우에는 

항상 최근 포스팅을 참조하자! )



일단 각각 홈페이지를 방문해서 

가볍게 tutorial을 사용해 보았는데 

다양한 integration을 제공하는 dialogflow가 마음에 들어 

일단 dialogflow로 개발을 진행해 보려고 한다. 


그리고 그 개발과정을 이 블로그에서 연재해 볼까 한다. 


그리고 아래는 25개의 플랫폼 비교 포스팅이고 

위 표보다 좀 더 자세한 내용이 있다. 

그리고 구글 문서에서 계속 업데이트 되고 있는 듯 하니 

최근 비교 자료로 참조할 수 있을 것 같아 링크를 걸어둔다. 




25개 챗봇 플랫폼 비교 바로가기 ( google doc에서 계속 갱신중) 






한국어 뉴스 데이터로 딥러닝 시작하기- 6. doc2vec으로 문사 유사도 측정하기






한국어 뉴스 데이터로 딥러닝 시작하기 



6. doc2vec으로 문사 유사도 측정하기 



과거 관련 포스팅 리스트 


1. 한국어 위키 덤프 다운로드 받기 바로가기  

2. 위키 덤프 데이터 파싱하기 바로가기

3. 위키 데이터 한국어 형태소 태깅하기 바로가기

4. doc2vec 모델 훈련하기

5. 한국어 word2vec 데모 만들기



최근에 관심이 있는 프로젝트에서 

부동산 관련 뉴스들만 자동으로 필터링 해야 하는데  

doc2vec에서 있는 n_similarity 함수 기능이 생각나서 간만에 

doc2vec API 문서 로 가보았습니다. 






 


???? 

Deprecated 되고 다른 모듈로 기능이 옮겨졌네요 ㅠㅠ

 넘 간만에 doc2vec을 사용했더니 ㄷㄷ


새로운 함수 설명으로 이동해봅니다. 




https://github.com/RaRe-Technologies/gensim/blob/master/gensim/test/test_doc2vec.py



관련 질의 에서 가져온 자세한 함수 설명 은 아래와 같습니다. 


def n_similarity(self, ds1, ds2):
        v1 
= [self[doc] for doc in ds1]
        v2 
= [self[doc] for doc in ds2]
        
return dot(matutils.unitvec(array(v1).mean(axis=0)), matutils.unitvec(array(v2).mean(axis=0)))



The 1st number, using model.n_similarity(), may be interesting for other reasons. It operates on model directly, whose comparison methods are all inherited from class Word2Vec. So, it actually uses only word-vectors. It averages together the vectors in each word-list, unit-normalizes them, then takes their cosine-similarity. This average-of-words document-vector is also often useful, but isn't what's calculated by PV-Doc2Vec.

 

n_similarity 계산법 


단어 리스트에 있는 모든 단어 벡터의 mean을 계산

 -> unit-normalzation -> cosine-similary 계산하기 



블로그에 있던 예시: 


Set A: (two words)

Vector A1 (-1,0,1)

Vector A2 (0,1,1)


Set B: (one word)

Vector B1 (-0.5,0.5,1)


mean of A1 and A2: A3 = (-0.5,0.5,1)


= > Cosine Distance of A3 and B1: dot(A3,B1) = 1




요약하면 n_similarity 함수는 word2vec 클래스에서 파생되어 

단어 셋에 있는 단어들의 유사도는 비교할 수는 있으나 

문서 벡터의 유사도를 비교하는 것은 아니네요. 

그래도 간접적으로 문서의 유사도를

단어 단위로 판단하는  지표는 될 것 같습니다. 


일단 지금은 이 함수 한번 써보고 

model.docvecs.similarity_unseen_docs 함수도 써봐서 

결과를 비교해봐야겠습니다. 





참고로 해당 기능은 word2vec/ doc2vec 데모 사이트에 추가 되었습니다. 

(http://stockprediction.co.kr/word2vec/)


두 문장을 입력하면 mecab으로 형태소 분석을 한 후 n_similarity 함수를 사용합니다. 



아래는 관련 예시들입니다. 



가장 단어가 유사한 예시 





역사(장소 언급) vs 부동산






역사(장소 언급) vs 주식 




그래도 그럭저럭 결과가 나오는 것 같네요. 


관련 코드들 역시 github에 commit해 두었으니 

참고하세요 



doc2vec-api github 바로가기 







구글 syntaxnet 시작하기


syntaxnet github 바로가기


syntaxnet 설치 가이드 바로가기 



syntaxnet을 시작하기 이전에 설치해야 되는 프로그램이 넘 많다;

그래도 하나씩 해보자. 


1. python 2.7 - 이미 깔려있음


2. bazel : 설치방법 링크 

바젤은 구글에서 사용하는 빌드 도구입니다. 


코드양이 아주 방대하거나 여러가지 언어를 사용하는 컴파일하거나, 

다양한 플랫폼에 설치해야 하는 프로젝트일 경우 유용한 빌드 툴이라고 합니다. 


좋은 빌드 툴이고 뭐고 

선택의 여지가 없으니 일단 깔아봅시다. 


다행히 문제 없이 잘 설치 됩니다. 



# 원래 bazel 설치시 sudo apt-get install openjdk-8-jdk 로 자바를 먼저 설치해야 한다는데

# Ubuntu 14.04일 경우 PPA를 사용 

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update && sudo apt-get install oracle-java8-installer


# 나머지는 동일 


echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -



sudo apt-get update && sudo apt-get install bazel





3. 그 외 필요 패키지 설치

(numpy는 이미 깔려있음) 


수가 많긴 한데 별 문제없이 한 번에 다 설치 되었다. 


> apt-get install swig


> pip freeze | grep protobuf

protobuf==3.0.0b2


> pip install -U protobuf==3.3.0


> pip install mock


> pip install asciitree


> apt-get install -y graphviz libgraphviz-dev 


>  pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" --install-option="--library-path=/usr/lib/graphviz/"




4. 드디어 syntaxnet 설치하기 

(configure 스크립트 실행할 때 설정 관련해서 이것저것 묻는데 

텐서플로 문서를 참조할 것 )


git clone --recursive https://github.com/tensorflow/models.git

  cd models/syntaxnet/tensorflow

  ./configure

  cd ..

  bazel test ...

  # On Mac, run the following:

  bazel test --linkopt=-headerpad_max_install_names \

    dragnn/... syntaxnet/... util/utf8/...






nltk 패키지로 불용어(stopwords) 제거하기



불용어(stopwords)는 관사(a, an, the), 전치사(of, on, for), 대명사(it, he, her)와 같이 

자연어 처리를 하면서 개별 단어 단위로 처리되지 않는 일반적인 단어입니다. 


nltk는 이런 불용어(stopwords)를 간단히 제거할 수 있는 기능을 제공하고 있습니다. 

이런 기능을 사용하기 위해서는 일단 nltk package를 다운받아야 합니다. 


예전에 패키지를 다운받아놓고 위치를 까먹어서 nltk.download()의 c 옵션으로 corpus 위치를 확인합니다. 




>>> import nltk

>>> nltk.download()




---------------------------------------------------------------------------

    d) Download   l) List    u) Update   c) Config   h) Help   q) Quit

---------------------------------------------------------------------------

Downloader> c


Data Server:

  - URL: <https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml>

  - 3 Package Collections Available

  - 108 Individual Packages Available


Local Machine:

  - Data directory: /root/nltk_data


---------------------------------------------------------------------------

    s) Show Config   u) Set Server URL   d) Set Data Dir   m) Main Menu

---------------------------------------------------------------------------

Config>



확인된 위치에 가서 stopwords 리스트를 확인합니다. 




~/nltk_data/corpora/stopwords# ll

total 72

drwxr-xr-x  2 root root 4096  2월 28 22:29 ./

drwxr-xr-x 73 root root 4096  2월 28 23:02 ../

-rw-r--r--  1 root root  424  2월 28 22:29 danish

-rw-r--r--  1 root root  453  2월 28 22:29 dutch

-rw-r--r--  1 root root  743  2월 28 22:29 english

-rw-r--r--  1 root root 1579  2월 28 22:29 finnish

-rw-r--r--  1 root root  805  2월 28 22:29 french

-rw-r--r--  1 root root 1357  2월 28 22:29 german

-rw-r--r--  1 root root 1227  2월 28 22:29 hungarian

-rw-r--r--  1 root root 1654  2월 28 22:29 italian

-rw-r--r--  1 root root 3880  2월 28 22:29 kazakh

-rw-r--r--  1 root root  851  2월 28 22:29 norwegian

-rw-r--r--  1 root root 1267  2월 28 22:29 portuguese

-rw-r--r--  1 root root  521  2월 28 22:29 README

-rw-r--r--  1 root root 1235  2월 28 22:29 russian

-rw-r--r--  1 root root 2178  2월 28 22:29 spanish

-rw-r--r--  1 root root  559  2월 28 22:29 swedish

-rw-r--r--  1 root root  260  2월 28 22:29 turkish




???????????????


한국어 stopwords 리스트가 없습니다. 

한국어 문서 처리를 하려고 했는데 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ큐ㅠㅠㅠㅠㅠㅠ







i

me

my

myself

we

our

ours

ourselves

you

your

yours

yourself

yourselves

he

him

his

himself

she

her

hers

herself

it

its

itself

they

them

their

theirs







아쉬운 대로 영어 stopwords를 참고해서 만들어서 github에 업데이트 해놨으니

필요하신 분들은 참고하세요. 


github 바로가기








  • 00 2017.07.08 20:55 ADDR 수정/삭제 답글

    ㅇㅇ!

뉴스 크롤링



뉴스 크롤링을 해야해서 관련 툴들을 살펴보고 있다. 



github : https://github.com/mrchypark/N2H4



참고

-  http://boilerpipe-web.appspot.com/

-  http://ksthink.com/archives/2257