mecab사용자사전 추가 후 뒤에 숫자가 붙을경우 파싱 에러문제

451 views
Skip to first unread message

Sarah Yeom

unread,
Mar 20, 2018, 10:31:33 PM3/20/18
to 은전한닢 프로젝트
안녕하세요
Mecab의 User-dic에 사용자 사전을 추가해서 cost를 추가한 8000개 정도의 사전에대해 -300정도로
주고 파싱문제가 해결되는듯 싶었으나


(예시) 
원문1 - '기아차 올뉴 K3 "1호차 주인공 선정 역시'
원문1처럼 사전에 등록된 단어의 맨끝이 숫자이고 그 뒤단어가 숫자로 시작하지 않을시에는 원하는대로 파싱이 됩니다.
('기아차', 'NNP'), ('올', 'MM'), ('뉴', 'NNG'), ('K3', 'NNP'), ('"', 'SY'), ('1', 'SN'), ('호', 'NNBC'), ('차', 'NNG'), ('주인공', 'NNG'), ('선정', 'NNG'), ('역시', 'MAJ')

그러나

원문2 - '기아차 올뉴 K3 1호차 주인공 선정 역시'
라는 글을 파싱할때는 사전에 코스트가 -300으로 등록되어 있음에도 아래와같은 결과로 인식되어 나옵니다.

('기아차', 'NNP'), 
('올', 'MM'), 
('뉴', 'NNG'), 
('K', 'SL'), -- 알파벳으로 인식
('3', 'SN'), -- 숫자로 인식
('1', 'SN'), 
('호', 'NNBC'), 
('차', 'NNG'), 
('주인공', 'NNG'), 
('선정', 'NNG'), 
('역시', 'MAJ')

혹시 이런 문제는 어떻게 해결할 수 있나요 ? 그룹에 올라온 글은 모두 훑어봤는데
모두 cost를 조정하라는 대답만 있어서 cost 를 -300 에서 -1500으로 낮춰보아도 저렇게 사전의 마지막 단어의 숫자뒤에 숫자가 나올경우는 사전에
우선순위대로 파싱해오지 못하는데 ㅠㅠ해결방법이 있을까요 ?

유영호

unread,
Apr 15, 2018, 3:25:15 AM4/15/18
to eun...@googlegroups.com
리포팅 감사합니다. 생각치 못한 부분인것같습니다.
혹시 사전에 "K3"을 등록하신건가요? 일단.. "1호"도 함께 사용자 사전에 등록해보시겠어요?"
근본적으로 해결하려면 조금 살펴봐야할 것 같습니다.. ㅠ

saladyy

unread,
Apr 17, 2018, 9:03:47 PM4/17/18
to 은전한닢 프로젝트
답변 감사합니다!!
네 사전에 k3,K3 대소문자 두개모두 추가하고 코스트를 0,0,-300 으로 낮춰서 설정했는데
k3뒤에 숫자가아닌 따옴표와 같은 특수문자나 문자가 들어올경우는 파싱이 잘되나
숫자가 있으면 똑같았습니다 ..
(뒤에 숫자가 있을경우 k , 3, 1, 호,차  이렇게 각각따로 파싱해오더군요)

1호를 등록해서 테스트해봤는데도 마찬가지네요 ㅠㅠ...
숫자에대한 코스트가 너무낮게 설정이 되어있는건가요 ..?
k3 1호차 이런기사뿐만아니라 [문자][숫자] [숫자][문자] 이런식의 패턴일경우 사용자 사전에 추가된 단어의
코스트가 아무리 낮아도 사전대로 파싱이 안되니.... 해결방법이 없을까요 ??

(이문제로 한참 머리써보다가 도저히 안되서 지금은 정규식을써서 [문자]{1}[숫자]{1} [숫자][문자] 잡아낸뒤 따로 파싱된 [문자]{1}[숫자]{1}을 다시 합쳐서 원위치로 replace 하는 작업으로 처리했는데 ㅠㅠ 신문기사의 패턴이 워낙 다양하다보니 잘못 파싱되서 붙여버리는 경우가 생기네요 )

유영호

unread,
Apr 17, 2018, 9:28:09 PM4/17/18
to eun...@googlegroups.com
네 지금으로서는 후처리가 가장 명확한 방법일것같네요.. 고생하셨습니다..ㅠ

지금 조금 살펴보니. 
matrix.def 가 연접비용 정보가 있는 놈인데.  9584357라인에  3557 1797 -5967 라고 되어 있네요. 숫자끼리 붙는 비용이 -5967입니다. 너무 잘 붙도록 되어있네요. 
(아마 저랑 버전이 다르다면 다르게 나올수도 있습니다.)
단어코스트를 아무리 낮춰도 저 숫자를 이길 수가 없었네요.

찾아보는 방법은 unk.def 파일에 NUMERIC,{X},{Y},{Z},SN,*,*,*,*,*,*,* 부분을 찾아보시고 matrix..def에서 {Y} {X} {?} 를 찾아보시면 {?}에 해당하는 부분이 숫자끼리의 연접비용입니다.
그 숫자를 조금 높혀주면 해당 이슈는 해결이 되겠으나 사이드 이펙트가 있을지는 전체적으로 체크가 필요합니다.
참고하세요.

saladyy

unread,
Apr 29, 2018, 7:27:10 PM4/29/18
to 은전한닢 프로젝트
답변감사합니다 !! 역시 숫자끼리의 연접비용에 문제가 있었군요
덕분에 해결방안이 생겼습니다. 시간내주셔서 감사합니다 ^^!!
Reply all
Reply to author
Forward
0 new messages