Legacy/Library
KOMORAN ver 2.0.4 beta (자바 한국어 형태소 분석기)
KOMORAN 2.0은 1.0과 마찬가지로 자소 단위, 확률 기반의 형태소 분석기 입니다. 속도, 성능, 사전 관리 측면에서 기존 형태소 분석기와 차별되는 특징은 아래와 같습니다. 또한 기존 형태소 분석기와 달리 여러 어절을 하나의 품사로 분석 가능함으로써 형태소 분석기의 적용 도메인에 따라 공백이 포함된 고유명사(영화 제목, 음식점명, 노래 제목 등)를 더 정확하게 분석 할 수 있습니다.
- 속도
● 자소 단위 TRIE 사전 구성으로 사전 재탐색 횟수를 최소화하여 사전 탐색 속도 향상
● 내부 연산시 자료형을 정수로 치환하여 처리함으로써 연산 속도 향상
● Hash 기반의 Viterbi 알고리즘을 이용하여 분석 후보 탐색 속도 향상
- 성능
● 한국어에서 나타나는 불규칙을 학습 코퍼스 내에서 자동으로 추출하여 불규칙 어절에 대한 분석 정확률 향상
● TRIE 및 압축된 사전 정보를 사용하여 메모리 사용률 최소화 (50MB 이하에서도 동작)
- 사전 관리
● 사용자 사전을 추가하여 신조어, 고유명사 등의 분석 가능
● 기분석 사전을 적용하여 정확률 및 분석 속도 향상 가능
- 고유명사 분석(사용자 사전 적용)
● 기존 어절 단위 형태소 분석기와는 달리 복수 어절 단위 형태소 분석이 가능함으로써 사용자 도메인에 맞는 유연한 결과 제공
◆ 사용자 사전 등록 내용
바람과 함께 사라지다/NNP
운명처럼 널 사랑해/NNP
◆ 입력 문장
바람과 함께 사라지다랑 운명처렁 널 사랑해 중에 뭐가 더 재밌어?
◆ 분석 결과
바람과 함께 사라지다/NNP+랑/JKB
운명처럼 널 사랑해/NNP
중/NNB+에/JKB
뭐/NP+가/JKS
더/MAG
재밌/VA+어/EF+?/SF
//압축해제된 data file(models.zip)의 경로를 지정하여 객체 생성
Komoran komoran = new Komoran("D:\\4_Shineware\\05_KOMORAN_2.0\\models");
List<List<Pair<String,String>>> result = komoran.analyze("안녕하세요? 좋은 아침입니다.");
for (List<Pair<String, String>> eojeolResult : result) {
for (Pair<String, String> wordMorph : eojeolResult) {
System.out.println(wordMorph);
}
System.out.println();
}
위 소스를 실행한 결과는 아래와 같습니다.
Pair [first=안녕, second=NNG]
Pair [first=하, second=XSV]
Pair [first=시, second=EP]
Pair [first=어요, second=EF]
Pair [first=?, second=SF]
Pair [first=좋, second=VA]
Pair [first=은, second=ETM]
Pair [first=아침, second=NNG]
Pair [first=이, second=VCP]
Pair [first=ㅂ니다, second=EF]
Pair [first=., second=SF]
기분석 사전은 아래와 같이 setFWDic(“기분석 사전 파일명”)을 이용하여 적용 가능합니다.
Komoran komoran = new Komoran("D:\\4_Shineware\\05_KOMORAN_2.0\\models");
//기분석 사전 적용
komoran.setFWDic("fwd.user");
Komoran komoran = new Komoran("D:\\4_Shineware\\05_KOMORAN_2.0\\models");
//기분석 사전 적용
komoran.setUserDic("dic.user");
현재 베타버전이므로 안정성에 문제가 있을 수 있습니다. 사용하시다가 문제점이 생기면 연락부탁드립니다.
=========================[2014-07-26 추가]=========================
분석 중 에러가 발생하는 치명적인 오류를 발견하여, 소스 수정 후 komoran-2.0.1-beta.jar 버전으로 변경하였습니다. 기존의 komoran-2.0-beta.jar를 사용하시는 분은 신규 버전으로 업데이트 하셔서 사용하시기 바랍니다.
(소중한 피드백 주신 강재용님께 진심으로 감사드립니다!)
=========================[2014-07-27 추가]=========================
공백이 여러개 포함된 경우에 에러를 발생시키는 오류를 발견하여, 소스 수정 후 komoran-2.0.2-beta.jar 버전으로 변경하였습니다.
(소중한 피드백 주신 origoni 님께 감사드립니다!)
=========================[2014-07-29 추가]=========================
사용자 사전 포맷이 잘못되어 있던 오류를 발견하여, 소스 수정 후 komoran-2.0.3-beta.jar 버전으로 변경하였습니다. (나옹님 감사드립니다)
=========================[2014-08-05 추가]=========================
기타 버그 및 안정화 작업을 진행하여, 소스 수정 후 komoran-2.0.4-beta-e.jar 버전으로 변경하였습니다.
'Legacy > Library' 카테고리의 다른 글
KOMORAN ver 2.1.1 (자바 한국어 형태소 분석기) (10) | 2014.08.18 |
---|---|
KOMORAN ver 2.1 (자바 한국어 형태소 분석기) (18) | 2014.08.11 |
KOMORAN ver 2.0.4 beta (자바 한국어 형태소 분석기) (51) | 2014.08.05 |
KOMORAN 2.0 beta (7) | 2014.07.21 |
KOMORAN ver 1.12 (자바 한글 형태소 분석기) (29) | 2013.06.19 |
KOMORAN ver 1.1 (자바 한글 형태소 분석기) (10) | 2013.06.08 |
Tag
'Legacy/Library'의 다른글
- 이전글KOMORAN 2.0 beta
- 현재글KOMORAN ver 2.0.4 beta (자바 한국어 형태소 분석기)
- 다음글KOMORAN ver 2.1 (자바 한국어 형태소 분석기)
관련글
- 이전 댓글 더보기
-
김창환 2014.07.24 20:54
네 이번에 2.0 버전으로 새로 출시할 계획입니다.
답글
그런데 이번에 출시할 버전에 KOMORAN 2.0 을 사용해도 될까요?~
물론 상업적 목적은 아닙니다 ^^.. -
origoni 2014.07.26 23:24
방금 테스트를 시작하다가 에러가 발생하였습니다.
답글
komoran.analyze("1_2__3"); <- underbar가 공백입니다 ^^;
위와같이 공백이 두칸이면 아래와 같은 에러가 발생합니다.
java.lang.NullPointerException
at kr.co.shineware.nlp.komoran.core.lattice.Lattice.backTracking(Lattice.java:158)
at kr.co.shineware.nlp.komoran.core.lattice.Lattice.getMax(Lattice.java:134)
at kr.co.shineware.nlp.komoran.core.analyzer.Komoran.analyze(Komoran.java:109)
at org.jobcoding.presentation.support.parser.impl.TagParserImplTest.testList(TagParserImplTest.java:38)
....
전처리를해 사용 중 입니다.
replaceAll("(\\p{Space}){1,}", " ");
확인 부탁드립니다 ^^
지금 사용해보니 속도가 엄청 빨라진것 같네요!!
감사합니다!!! -
origoni 2014.07.27 17:16
안녕하세요 ^^
답글
이번엔 사용자 사전을 못 찾는 이슈가 있어서 댓글 드립니다.
101 : Komoran analyzer = new Komoran(ResourceUtils.getURL(SystemBean.MORPHOLOGY_ANALYZER_DIC_PATH).getPath().toString());
102 : analyzer.setUserDic("dic.user");
이와같이 사용자 사전을 사용하려하니 아래와 같이 에러가 발생했습니다.
java.io.FileNotFoundException: dic.user (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:131)
at java.io.FileInputStream.<init>(FileInputStream.java:87)
at java.io.FileReader.<init>(FileReader.java:58)
at kr.co.shineware.nlp.komoran.core.analyzer.Komoran.setUserDic(Komoran.java:299)
at org.jobcoding.presentation.support.parser.impl.TagParserImpl.mkr(TagParserImpl.java:102)
...
참고로 OSX환경이며
실제 path는 /Java/tomcat/apache-tomcat-7.0.54/webapps/ROOT/WEB-INF/classes/datas/models/dic.user 로
파일 존재 여부는 확인 하였습니다.
확인 부탁드립니다!!!
감사합니다 ^^ -
skyer9 2014.07.28 20:12
제가 맞춤법 교정기 앱을 제작중인데요 위 라이브러리를 쓰고싶어서요 원래는 부산대학교애서 제공하는 맞춤법 교정 서바스를 아용하려 하였눈데 사용자사전 등록이 크네요 ㅡㅡ
답글 -
나옹님 2014.07.29 10:31
사용자 사전 로딩할때 이런 에러가 뜨네요~물론 프로그램은 계속 진행 되지만... 형식에 맞추어서 했는데 그러네요~ 어떤 부분이 문제인지 확인 부탁드립니다. 사용자 사전으로 썼던 데이터는 50만개의 한글 위키피디아 단어 리스트들입니다.
답글
User dic loading : D:\workspace\library\komoran-2.0\models\dic.user
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1911)
at kr.co.shineware.nlp.komoran.core.analyzer.Komoran.setUserDic(Komoran.java:310)
________________________________________________________
+ 추가로 사용자 사전 등록할때
넷 nnp
마블 nnp
넷마블 nnp
이렇게 세게의 고유명사가 등록되어있으면 문장에서 넷마블 라는 단어가 나옴에도(띄어쓰기 없이) 넷마블이 아닌 넷 이랑 마블 따로 두개의 별다른 단어가 뽑히는거 같네요. 예전 버전 고유명사 포함된 Komoran 1.12 을 사용하니 넷마블, 서든어택 등이 잘 뽑혀나오긴 하네요~ -
origoni 2014.07.30 08:27
안녕하세요.
답글
사용자 사전에 정의된 영문자의경우 대소문자를 구분하고 있는것 같은데요.
혹시 대소문자 상관없이 적용되도록 할 수 있을까요?
추가적으로 사용자 사전 사용시 User dic loading : ~~ 이렇게 나오는것이 갑자기 보이는것 같은데요 ^^;
이부분 출력 안되게 하려면 어떻게 해야 할까요?
확인 부탁드립니다~! -
-
-
인간미 2014.10.15 20:01
자동 띄어쓰기 API는 없는거죠? 이곳저곳에서 분석기 찾고있는데 루씬 에도 없는거같고...
답글
그리고 라이브러리에 API DOC 포함안되어있는건가요? -
-
-
인간미 2014.10.16 01:32
네 그런데 혹시 제가 따로 인덱싱을위해 문장이나 글에서 명사를 추출하려면 NNP로 표시된 형태소를 일일이 확인해야되는건가요? 아니면 메서드가 제공되나요? 메뉴얼에는 없어서요ㅎㅎ
답글
그리고 최신버전 글에나온것 가지고 실험해보고있는데..
java.lang.NoClassDefFoundError: kr/co/shineware/ds/trie/TrieDictionary
왜 이럴까요..
아아 그리고 상당히 인상적인게 사용자 사전인데요,
여기에는 영화제목이나 책제목등 신조어 NNP를 넣으면 좋겠는데
만약 세상에 존재하는 모든 영화나 책 노래 제목을 모두 넣으면 속도에 문제는 없을까요? 파일사이즈가 엄청커질텐데.. -
인간미 2014.10.16 01:46
그동안 구버전쓰다 최신버전 쓰는데 소름돋는 성능이네욥..
답글
엣지 오브 투모로우 쳤는데 NNP로 분류해버리네...
그런데 모델인자로 Komoran 인스턴스 만들때 2초이상걸리네요.. -
빅테이블 2015.12.30 16:53
사용자 사전의 인코딩이 UTF-8 일 경우 사용자 사전이 반영되지 않는 버그가 있습니다.
답글
setUserDic() 의 디컴파일된 코드를 보니 UTF-8 파일 맨 앞의 식별문자를 처리해주지 않아서 그런듯 하네요.
Java8 스타일로 파일 입출력을 하시면 UTF-8만 예외처리 하거나 하지 않아도 될 듯합니다. -
분석분석 2016.01.12 18:08
안녕하세요 다운 받아서 사용중인데 처음 로딩 속도가 너무 오래 걸립니다.
답글
저 같은 경우는 komoran = new Komoran("C://Programming//models-light//");
이런 식으로 경로를 지정해 주었는데 제가 혹시 틀리게 지정해 주었나요??
답변좀 부탁드리겠습니다! -
개발자 2016.08.02 18:14
안녕하세요 테스트 중에 사용자 사전을 사용하려고 하는데 적용이 안되어 문의 여쭙니다.
답글
Komoran komoran = new Komoran("D:/models-light/");
List<List<Pair<String, String>>> result = komoran.analyze("텍스트");
komoran.setUserDic("D:/models-light/user_data/dic.user");
현재 위와같이 해놓았습니다.
에러도 없이 잘 돌아가긴하는데 사용자사전이 적용이 안되네요.
어떻게 해야할까요..?
====================================
댓글보면 깨달았습니다!
사용자 사전 인코딩을 UTF-8로 변경하니 잘됩니다 감사합니다^^