seunjeon(https://bitbucket.org/eunjeon/seunjeon/overview) 프로젝트 참고
사용자사전(고유명사) 추가의 필요성
아래의 소스와 같이 ‘네네치킨을 먹습니다.’를 형태소 분석하면, 네네치킨에 대한 정의가 없기 때문에 원하지 않는 결과로 해석하게 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import org.bitbucket.eunjeon.seunjeon.Analyzer; import org.bitbucket.eunjeon.seunjeon.Eojeol; import org.bitbucket.eunjeon.seunjeon.LNode; import java.util.Arrays; public class Main { public static void main(String[] args) { //Analyzer.setUserDictFile("user-dict.csv"); for (LNode node : Analyzer.parseJava("네네치킨을 먹습니다.")) { System.out.println(node); } } } |
결과
1 2 3 4 5 6 7 8 9 |
LNode(Morpheme(네,1790,3549,4151,WrappedArray(NP, *, F, 네, *, *, *, *),COMMON,WrappedArray(N)),0,1,-1756) LNode(Morpheme(네,2469,3597,2239,WrappedArray(XSN, *, F, 네, *, *, *, *),COMMON,WrappedArray(XS)),1,2,-1496) LNode(Morpheme(치킨,1784,3537,2056,WrappedArray(NNG, *, T, 치킨, *, *, *, *),COMMON,WrappedArray(N)),2,4,514) LNode(Morpheme(을,476,878,1003,WrappedArray(JKO, *, T, 을, *, *, *, *),COMMON,WrappedArray(J)),4,5,-627) LNode(Morpheme(먹,2421,3575,2653,WrappedArray(VV, *, T, 먹, *, *, *, *),COMMON,WrappedArray(V)),6,7,-1106) LNode(Morpheme(습니다,4,6,59,WrappedArray(EF, *, F, 습니다, *, *, *, *),COMMON,WrappedArray(E)),7,10,-2986) LNode(Morpheme(.,1794,3555,3559,WrappedArray(SF, *, *, *, *, *, *, *),COMMON,WrappedArray(S)),10,11,-4946) |
사용자사전 추가하기
소스 폴더에 ‘user-dict.csv’라는 파일을 만들고 다음과 같이 저장한다.
1 2 |
네네치킨,-100 |
뒤의 숫자 값은 cost 값인데, 숫자가 낮을수록 채택될 확률이 높아진다. 우선순위를 높이고 싶다면 낮은 값을 사용하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import org.bitbucket.eunjeon.seunjeon.Analyzer; import org.bitbucket.eunjeon.seunjeon.Eojeol; import org.bitbucket.eunjeon.seunjeon.LNode; import java.util.Arrays; public class Main { public static void main(String[] args) { Analyzer.setUserDictFile("user-dict.csv"); for (LNode node : Analyzer.parseJava("네네치킨을 먹습니다.")) { System.out.println(node); } } } |
결과
1 2 3 4 5 6 |
LNode(Morpheme(네네치킨,1784,3535,-100,WrappedArray(NNG, *, T, 네네치킨, *, *, *, *),COMMON,WrappedArray(N)),0,4,-1135) LNode(Morpheme(을,476,878,1003,WrappedArray(JKO, *, T, 을, *, *, *, *),COMMON,WrappedArray(J)),4,5,-5152) LNode(Morpheme(먹,2421,3575,2653,WrappedArray(VV, *, T, 먹, *, *, *, *),COMMON,WrappedArray(V)),6,7,-5631) LNode(Morpheme(습니다,4,6,59,WrappedArray(EF, *, F, 습니다, *, *, *, *),COMMON,WrappedArray(E)),7,10,-7511) LNode(Morpheme(.,1794,3555,3559,WrappedArray(SF, *, *, *, *, *, *, *),COMMON,WrappedArray(S)),10,11,-9471) |
사용자 사전에 추가하고나면 네네치킨을 NNG(일반명사)로 구분하기 시작한다. NNP(고유명사)로 구분하는 것이 맞으나… seunjeon 프로젝트에서는 아직 mecab 수준으로 사용자 사전을 지원하지는 않는 것 같다.