기분석 데이터에 대해 질문

559 views
Skip to first unread message

Bhang kiduck

unread,
Mar 30, 2017, 4:49:28 AM3/30/17
to 은전한닢 프로젝트
안녕하세요.
어제 답변주신 내용 토대로 위기를 넘긴 이용자입니다. 답변에 감사드립니다.

또 하나의 문제점에 직면해서 질문을 드리게 되었습니다

__________________________________________________________________________________________________________________

사전 추가시 타입 부분에 Preanalysis라고 적으면 기분석이 된다고 알고있습니다 (inflect도 기분석이라고 알고있습니다. 틀렸다면 지적해주세요)
그런데 이곳에 적어놓으신 답변을 보니 Preanalysis 타입은 mecab-ko-lucene-analyzer에서 인덱스 생성에 정답을 제공하기위해 사용된다고 하셨는데요..

질문 1) 저는 mecab-ko + mecab-ko-dic + python을 사용해서 작업하고 있고 mecab-ko-lucene-analyzer는 사용하지 않는데 이 경우 기분석(Preanalysis )이 되지 않는 것인가요?


질문 2) 만일 mecab-ko + mecab-ko-dic + python을 사용해도 형태소 분석시 기분석이 된다면 형태소 분석 과정에서 기분석이 언제 이루어지는지 궁금합니다.
예를 들어 (형태소 분석 과정 : 먼저 Preanalysis를 분석 ->  Inflect를 분석 -> Compound를 분석 -> 이후 블라블라) 이런식으로 좀 알고 싶습니다


질문 3) 아래 데이터를 id 추가하려고 시도했더니 에러가 났습니다
0.07로,,,,SN+JKB,*,F,0.07로,Preanalysis,SN,JKB,0.07/SN/*+로/JKB/*

[에러 메시지]  cannot find right-id  'JKB,*,F,*,*,*,*'
이런 식의 에러였습니다. 하지만 right-id.def 파일을 보니 
'211 JKB,*,F,로,*,*,*,*'  라는 항목이 등록되어 있습니다.
혹시나 하고 사전형식 데이터의 '마지막 품사' 항목에서 JKB부분을 NNG로 변경해보니 id 생성이 되더군요. 
왜 JKB라고 적으면 안 되고 NNG라고 적으면 될까? 조사해봤는데

NNG는 right-id.def에 이런 항목이 있더군요
3535 NNG,*,*,*,*,*,*,*
3536 NNG,*,F,*,*,*,*,*
3537 NNG,*,T,*,*,*,*,*

반면 JKB는 모든 낱말을 아우르는 항목이 없고 일부 낱말들에 의해서만 정의되어 있습니다.
결론은, right-id에 모든 낱말을 아우르는 형태로 등록된 POS가 아니라면 사전형식 데이터의 '마지막 품사' 항목에서 에러가 나는 것인가요?
그러면 이 경우는 등록이 불가능한 것인지..

__________________________________

여기까지 읽어주셔서 감사드립니다

유영호

unread,
Apr 2, 2017, 2:54:38 AM4/2/17
to 은전한닢 프로젝트
질문 1) 저는 mecab-ko + mecab-ko-dic + python을 사용해서 작업하고 있고 mecab-ko-lucene-analyzer는 사용하지 않는데 이 경우 기분석(Preanalysis )이 되지 않는 것인가요?
mecab-ko + mecab-ko-dic + python  조합이라면 기분석 부분을 python코드에서 직접 분리를 해주셔야 합니다. mecab-ko + mecab-ko-dic 에서는 기분석으로 입력하신 단어가 통으로 나올것이고 feature부분을 보시고 분리하셔야 합니다.


질문 2) 만일 mecab-ko + mecab-ko-dic + python을 사용해도 형태소 분석시 기분석이 된다면 형태소 분석 과정에서 기분석이 언제 이루어지는지 궁금합니다.
1번에서 답변 드린걸로 답이 되겠지요? Preanalysis, Inflect, Compound 모두 같습니다. python 코드에서 분리해주셔야 합니다.


질문 3) 아래 데이터를 id 추가하려고 시도했더니 에러가 났습니다
0.07로,,,,SN+JKB,*,F,0.07로,Preanalysis,SN,JKB,0.07/SN/*+로/JKB/*
rifght-id.def 까지 살펴보신 상황이라면 tools/add-userdic.sh 의 도움을 받을 필요 없이 직접 수동으로 입력하는 방법이 있습니다.
0.07로,1784,211,-100,NNG+JKB,*,F,0.07로,Preanalysis,SN,JKB,0.07/SN/*+로/JKB/*
위와같이 csv파일에 추가하시고 make 로 컴파일 하시면 추가됩니다.
$ mecab -d .
0.07로 갑시다.
0.07로 NNG+JKB,*,F,0.07로,Preanalysis,SN,JKB,0.07/SN/*+로/JKB/*
갑시다 VV+EF,*,F,갑시다,Inflect,VV,EF,가/VV/*+ᄇ시다/EF/*
. SF,*,*,*,*,*,*,*
EOS

단, 원하셨던 0.07을 SN으로 입력할수는 없습니다. SN는 사전으로 관리되는 품사가 아니고 0~9 의 문자는 SN으로 분석되어지는 mecab 엔진 자체 기능이라고 보셔야 합니다.
정확히 의도하는 바를 모르겠으나, 0.07을 숫자로 인식하고 싶으신거라면 형태소분석 후 후처리로 SN + SY(.) + SN 형태로 분석된 것을 하나의 SN으로 치환하는 함수를 따로 만들어서 사용하시는 것이 가장 깔끔해보입니다.
 

Bhang kiduck

unread,
Apr 2, 2017, 9:56:21 PM4/2/17
to 은전한닢 프로젝트
네 변함없이 좋은 답변 감사드립니다.

말씀해주신 대로 ID와 비용을 수동으로 입력해 보려고 합니다. 그런데 id는 right-id.def와 left-id.def에서 검색하지만 단어비용은 어느 파일에서 참조해야 하는지 모르겠습니다. 말씀해주신 예에서는 단어비용이 '-100'인데 어디에서 이 값을 참조하셨는지 알고싶습니다.
단어비용은 어느 파일을 참조해서 알 수 있을까요?

이상입니다.

유영호

unread,
Apr 2, 2017, 10:14:24 PM4/2/17
to 은전한닢 프로젝트
-100은 임의로 적은것입니다. 음수의 비용은 상대적으로 낮은 비용이라 아마도 해당 string이 출현하면 거의 분석된다고 보시면 됩니다.
조금 융통성있게 비용을 정의하고 싶다면.. 이미 정의 되어 있는 사전의 단어들을 보시고 유사한 단어의 비용을 참고하시어 정의하는 방법이 있을것같습니다. (깔끔한 방법은 없네요 ㅠㅠ)

아무래도 사용자 사전으로 정의하는 것들은 왠만하면 분석되어지길 바라는 단어들인것같아서 낮은 비용으로 예를 들었습니다.

Bhang kiduck

unread,
Apr 2, 2017, 10:46:54 PM4/2/17
to 은전한닢 프로젝트
네. 어차피 원하는 값만 얻으면 되는거니까.. 유영호님 말씀하신 대로 낮은 값 (-100)으로 일괄 통일해서 지정할게요
문제를 해결해주셔서 정말 고맙습니다.
Reply all
Reply to author
Forward
0 new messages