KoNLP 0.76.5 업데이트

금번 업데이트에서 크게 변경된 부분은 사용자 사전 데이터 추가의 용이성이다.

예를 들어 아래와 같다.

useSystemDic()
# Backup was just finished!
# 13 words were added to dic_user.txt.
mergeUserDic(data.frame("삼성전자", "ncn"))
# 1 words were added to dic_user.txt.
extractNoun("삼성전자에서는 아이폰에 대항할 무기를 준비하고 있다.")
# [1] "삼성전자" "아이폰에" "대항"     "무기"     "준비"
mergeUserDic(data.frame("아이폰", "ncn"))
# 1 words were added to dic_user.txt.
extractNoun("삼성전자에서는 아이폰에 대항할 무기를 준비하고 있다.")
# [1] "삼성전자" "아이폰"   "대항"     "무기"     "준비" 

 

분석 데이터에  따라서 사용자 사전을 편집하기 편하게 하기 위한 함수들에 대한 개선이다.  위에서 처럼 “삼성전자”, “아이폰”이 사전에 없어서 분석이 안되는 부분을 사전을 직접 추가할 수 있게끔 함으로써 유연한 분석을 할 수 있게 하였다.

이밖에 다른 변경 부분도 있는데, 아마도 사용자 분들은 인지하기 힘들듯 하니 소개는 하지 않겠다.

 

그리고 한가지 이슈가 있는데, 현재 맥 바이너리 버전이 R cran 시스템에서 계속 에러 쏟아내는 바람에 빌드가 계속 안되고 있다. 맥 라이언 OS에서 직접 테스트 해봤는데 전혀 문제가 없었다. 하지만 cran 테스트를 넘겨야 repository에 올려 사용자가 자유롭게 사용가능하기 때문에 맥 사용자는 이 문제가 해결될 때 까지 새 버전을 사용하기가 쉽지 않을 것 같다. 물론 이 이슈는 R core팀에 문의를 해두었다.

 

그럼에도 불구하고 정말 위 기능을 포함한 새로운 기능들을 사용하고 싶다면 아래 명령어로 github에서 빌드되는 바이너리를 설치하면 된다.  ㅋ

install.packages("devtools")
library(devtools)
install_github("KoNLP", "haven-jeon",ref="KoNLP_0.76.5")


사족이지만 패키지 빌드 통계를 보니 솔라리스를 비롯한 맥 등의 유닉스 기반의 OS에서 패키지 빌드 에러가 많이 나고 있다는 것을 알 수 있다. 역시나 R은 리눅스와 친숙한 시스템인거 같다는 생각을 다시 해본다. 

0 0 votes
Article Rating
Subscribe
Notify of
guest

33 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Taehun Kim

library(devtoosl) => library(devtools) 오타있어요~ㅎ

gogamza

정말 그렇네요..

고쳐서 업데이트 했습니다.

코멘트 감사드립니다. ^^

2012/9/20 Disqus

골빈해커

안녕하세요. 먼저 KoNLP 같이 좋은 라이브러리 만들어주셔서 정말 감사합니다. (__)(^^)
사용하던 중 버그를 하나 발견했는데요. 몇 십자이상 띄워쓰기 없이 글을 쓴 경우와, 입력된 텍스트가 글자 없이 공백만 있는 경우, 공백이 여러개인 경우에 각기 Array Index Out Of Bounds 에러가 뜨거나, 종료하지 않는 현상이 있습니다. 제가 수정할까도 생각했는데, 자바는 익숙하지 않아서 일단 먼저 피드백드립니다.

다시 한 번 감사드립니다^_^;

gogamza

몇 십자이상 띄워쓰기 없이 글을 쓴 경우
이 경우는 알려진 버그고 현재 버전에서 고쳐진 버그입니다. 
혹시 사용하신 버그는 언제 버전을 사용하신건가요?

공백이 여러개인 경우 
이 부분은 확인해서 고치겠습니다. 
감사합니다. 

골빈해커

바로 어제 오전에 업데이트 했었는데, 어제 올리신 버전을 사용하니 문제가 없네요. 제가 잘못한 것이었을 수도 있으니, 혹시 나중에 또 문제를 발견하면 다시 피드백드리겠습니다.

gogamza

네… 감사합니다. 

Anue

windows xp 환경에 3GB RAM을 사용 하고 있습니다.
RGui로 KoNLP를 불러오려 했지만 한번에 잘 되지 않아,
몇 시간 보고 일단 된 결과를 댓글로 적습니다.
(몇 시간 더 해보고 안되면 질문을 드리려 했습니다만, 일단 실행이 되서요..)
1. 제어판 -> java – java 탭 -> 보기 -> runtime 에서 -Xmx512m 입력 후 적용..2. R실행3. rjava 패키지 우선 실행.4. .jinit (parameters=”-Dfile.encoding=UTF-8″)5. KoNLP 패키지 실행
 
제 경우는 KoNLP 바로 실행 시 parameters에 Xmx512m이 들어 있을 경우
잘 실행이 되지 않았습니다.
혹여 저 같이 바로 패키지가 불러지지 않는 분이 계시다면
한번 시도해 볼만 합니다.
(NLP 0.76.5 , R i386 2.15.1 에서 시도 하였습니다.)

좋은 패키지 만들어 주셔서 감사합니다.
잘 사용해보도록 하겠습니다.

gogamza

혹시 library(KoNLP) 실행후 나오는 에러 로그를 여기에 올려주실 수 있나요?

로직상 차선책으로512mb로 로딩이 가능하게끔 만들어 두었는데, 그런 머신이 없어서 테스트를 못하고 있던 상황이었습니다.

로그를 주시면 개발에 참고할 수 있을거 같습니다.

감사합니다.

2012년 9월 24일 오후 7:00, Disqus 님의 말:

용군

위와 같으 케이스인데 에레 메시지가
> require(KoNLP)패키지 KoNLP를 로드중입니다패키지 rJava를 로드중입니다패키지 bitops를 로드중입니다패키지 Sejong를 로드중입니다Successfully Loaded Sejong Package.Java initialized.
Error : .onLoad failed in loadNamespace() for ‘KoNLP’, details:call: .jinit(parameters = c(“-Dfile.encoding=UTF-8”, “-Xmx512m”))error: Cannot create Java virtual machine (-1)
요렇습니다. 제경우는 그렇습니다~

gogamza

아래 코드테스트 부탁드립니다.

install.packages(“devtools”)
library(devtools)
install_github(“KoNLP”, “haven-jeon”,ref=”jvm_memory”)
library(KoNLP)
useSejongDic()
extractNoun(“R는 많은 기여자들에 의한 공동프로젝트입니다.”)

출력되는 로그를 C&P해서 붙여주시면 도움이 될듯 합니다.

용군

아래와 같은 로그 출력됩니다.
> require(KoNLP)패키지 KoNLP를 로드중입니다패키지 rJava를 로드중입니다패키지 bitops를 로드중입니다패키지 testthat를 로드중입니다패키지 Sejong를 로드중입니다Successfully Loaded Sejong Package.Java initialized.
Error : .onLoad failed in loadNamespace() for ‘KoNLP’, details:call: .jinit(parameters = c(“-Dfile.encoding=UTF-8”))error: Cannot create Java virtual machine (-1)추가정보:경고 메시지가 손실되었습니다1: 패키지 ‘testthat’ 는 R 버전 2.15.1 에서 작성되었습니다  2: 패키지 ‘Sejong’ 는 R 버전 2.15.1 에서 작성되었습니다

Anue

아래 용군님께서 주신 로그와 제가 본 로그 내용은 동일하였습니다.
하단 dev 코드 부분을 알려 주셨는데 이것도 패키지를 설치 부분을 제외하고 library 실행 시 나온 오류도 동일합니다.

> library(KoNLP)패키지 rJava를 로드중입니다패키지 bitops를 로드중입니다패키지 Sejong를 로드중입니다Successfully Loaded Sejong Package.Java initialized.
Error : .onLoad failed in loadNamespace() for ‘KoNLP’, details:call: .jinit(parameters = c(“-Dfile.encoding=UTF-8”, “-Xmx512m”))error: Cannot create Java virtual machine (-1)에러:’‘KoNLP’’ 에 대한 패키지/네임스페이스 로드가 실패했습니다

gogamza

네.. 알겠습니다. 

제 예상으로는 시스템에 깔린 자바 설정의 문제로 보입니다.

아래 명령어가 에러없이 실행되는지 확인 부탁드립니다. 

library(rJava)
.jinit()

gogamza

이 글을 참고하세요.

http://freesearch.pe.kr/archives/3081 

Mooyeob Lee

안녕하세요. 오늘 처음 KoNLP를 접했는데요…
유투부의 KoNLP 소개하는 영상도 봤는데
한글 텍스트마이닝하는데 이처럼 파워풀한 패키지도 없는 것 같아요.
그런데 시스템과 충돌문제로 너무 고생했습니다.ㅠ

첨에 라이브러리를 불러올 때
Cannot create Java virtual machine (-1)
문제가 있었는데 힘들게 해결 했는데요..
또 다른 문제가 생겼는데요.
아래와 같습니다…
해결 해주세요…ㅠㅠ
이건 어떻게 할지 모르겠네요..
> extractNoun(“R은 많은 기여자들에 의한 공동프로젝트입니다.”)
org.json.JSONException: Unterminated string at 96 [character 0 line 7]
at org.json.JSONTokener.syntaxError(JSONTokener.java:423)
at org.json.JSONTokener.nextString(JSONTokener.java:249)
at org.json.JSONTokener.nextValue(JSONTokener.java:349)
at org.json.JSONObject.(JSONObject.java:209)
at org.json.JSONTokener.nextValue(JSONTokener.java:352)
at org.json.JSONArray.(JSONArray.java:125)
at org.json.JSONTokener.nextValue(JSONTokener.java:356)
at org.json.JSONObject.(JSONObject.java:209)
at org.json.JSONObject.(JSONObject.java:310)
at kr.ac.kaist.swrc.jhannanum.share.JSONReader.read(JSONReader.java:84)
at kr.ac.kaist.swrc.jhannanum.share.JSONZipReader.read(JSONZipReader.java:56)
at kr.ac.kaist.swrc.jhannanum.share.JSONZipReader.(JSONZipReader.java:43)
at kr.ac.kaist.swrc.jhannanum.plugin.MajorPlugin.MorphAnalyzer.ChartMorphAnalyzer.KoNLPChartMorphAnalyzer.initialize(KoNLPChartMorphAnalyzer.java:152)
at kr.ac.kaist.swrc.jhannanum.hannanum.Workflow.activateWorkflow(Workflow.java:433)
at HannanumInterface.extractNoun(HannanumInterface.java:124)
다음에 오류`Encoding session()
에러:함수 “session”를 찾을 수 없습니다
> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Korean_Korea.949  LC_CTYPE=Korean_Korea.949    LC_MONETARY=Korean_Korea.949
[4] LC_NUMERIC=C                 LC_TIME=Korean_Korea.949    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] KoNLP_0.76.5   Sejong_0.01    testthat_0.7   bitops_1.0-4.2 rJava_0.9-3    devtools_0.8  

loaded via a namespace (and not attached):
 [1] digest_0.5.2    evaluate_0.4.2  httr_0.2        memoise_0.1     parallel_2.15.2 plyr_1.7.1     
 [7] RCurl_1.95-3    stringr_0.6.1   tools_2.15.2    whisker_0.1

gogamza

일단 라이브러리를 최신으로 업데이트 해보시고 시도해 보시는 걸 추천드립니다.

오류는 내부의 JSON파일을 읽지 못해서 나오는 오류이구요. 아마도 java vm 초기화를 하면서 읽어들이는 파일의 인코딩이 UTF-8이라는 것을 옵션을 제가 주었는데,  설정이 먹지 않은듯 합니다.

일단 라이브러리를 최신으로 업데이트 해보시고 시도해

getOption(“java.parameters”)

위 명령어가 어떤 결과를 뽑는지 주시면 좋을거 같은데요.

여러 설정이 꼬인거 같은데, 혹시 여유가 되신다면 다른 깨끗한 머신에서 설정을 하시고 수행하시는걸 추천드립니다.
정신건강상 제일 좋은 방법입니다. ^^;

Mooyeob Lee

말씀하신 것 처럼…
아래 옵션 한개만 나오네요…

> getOption(“java.parameters”)
[1] “-Xmx512m”

제가 아래 명령어를 입력해도 변화가 없구요.
0이라는 출력만 나옵니다..ㅠ

> .jinit (java.parameters=”-Dfile.encoding=UTF-8″)[1] 0

설정이 꼬인것 같긴한데… 오늘 거의 자바만 20번 이상 깔았다 지운거 같아서.. 더는 힘들 것 같아요…

gogamza

 글로벌 자바 옵션에서 문제가 있는거 같은데요. 옥시 제어판쪽에 자바 옵션이랑 꼬인게 아닐까 하는 생각도 드네요.

Mooyeob Lee

감사합니다… 시스템환경변수에 제가 선언해놓은게 몇개 있었는데… 지우니까 되네요!! 감사합니다…!!!!

박만희

안녕하세요.KoNLP 오늘 처음 접해서 적용하다보니 다음과 같은 오류 메시지 처리 방법을 문의드립니다.
snoun<-extractNoun("삼성전자에서는 아이폰에 대항할 무기를 준비하고 있다.")다음에 오류`Encoding<-`(`*tmp*`, value = "UTF-8") : 문자 벡터의 인수가 기대되고 있습니다
행복한 하루 되세요~~

gogamza

 http://freesearch.pe.kr/archives/3081

이 글을 참고하셔서 메일 주시면 확인해 보겠습니다.

감사합니다.

Mooyeob Lee

계속 질문드려서 죄송합니다
KoNLP를 Java heap memory 에러가 너무 많이 나는데요..혹시 메모리 관리하시는 노하우라도 있으신가요??ㅠ
JRE 1.6버젼인데 혹시 버젼업시키면 해결이 될까요??

gogamza

 heap memory 관련된 것은 내부 객체를 동적으로 많이 만들기 때문입니다. 혹시 사전 데이터 운용은 어떻게 하고 있으며, 현재 기본 메모리가 어느정도 되는지 궁금하네요.

제가 이런 에러가 났을 경우가 사전 객체를 계속 추가 했을때 였습니다. 만일 기본적으로 쓰신다면 이런 에러가 나지 않을텐데, 계속 난다면 .jinit 옵션을 조절할 필요가 있을겁니다.

Felix Song

KoNLP패키지를 만들어 주셔서 감사합니다. 🙂
텍스트마이닝 작업 관련해서 KoNLP패키지를 이용하는 중에 질문이 생겨서 말씀드립니다.

1. 작업 중에 useSystemDic()을 사용하면 dic_user.txt에 13개 단어만 추가되어서 이상하게 생각하던 차에, 묶여 있는 Sejong패키지의 압축파일과 useDic()을 확인해 보니 useDic()에서 시스템 사전 파일을 Sejongdicshandic.zipdatakEdic_user.txt에서 받아오고 있더라구요.
제가 판단하기에는 handic.zipdatakEdic_system.txt을 읽어와야할 것 같아서 dic_system.txt를 다른 경로에 붙여넣은 후에 read.table로 읽어들이려 하니 행 오류가 발생해서 사용할 수가 없습니다. 그렇다면 dic_system.txt는 아예 사용할 수 없는 것인지요?

2. extractNoun()을 사용해서 명사만 모두 추출하려 하는 상황에서 문제가 있습니다. 일부 단어에서 조사(격에 관계없이)가 같이 붙어서 나오는데, 이 부분을 사전 문제라고 봐야 할지, 아니면 제가 투입한 텍스트 파일의 문제인지 궁금합니다. [예를 들어서 텍스트에 ‘차도’라는 단어가 있으면, extractNoun()을 이용할 때 ‘차도가’ ‘차도를’ ‘차도에’와 같은 어절에서 조사 분리 없이 각 단어가 별도의 명사로 추출되고 있습니다.]

읽어 주셔서 감사합니다!

gogamza

https://github.com/haven-jeon/KoNLP/issues/25

위와 같이 이슈 등록은 했습니다만 좀더 확인을 해보도록 하겠습니다.

감사합니다.

Felix Song

빠른 답변 감사합니다.
1. 최신버전 기준 KoNLP에서 useSystemDic()이 작동되는 것을 보면,
> useSystemDic
function (backup = T)
{
useDic(“System”, backup)
}

이렇게 되어서 KoNLP:::useDic으로 확인해 보면,
> KoNLP:::useDic
function (dicname, backup = T)
{
if (dicname == “Sejong”) {
relpath <- file.path("data", "kE", "dic_user2.txt")
}
else if (dicname == "System") {
relpath <- file.path("data", "kE", "dic_user.txt")
}
else {
stop("wrong dictionary name!")
}
newdic <- readZipDic(get("SejongDicsZip", envir = KoNLP:::.KoNLPEnv),
relpath)
if (backup == T) {
backupUsrDic(ask = F)
}
mergeUserDic(newdic, append = F)
}

이렇게 나옵니다. 이렇게 보면 dic_user.txt를 압축파일에서 시스템 사전으로 등록하는 것처럼 보입니다만, 저는 프로그래밍에 대해서는 무지해서, 이 뒤에 숨겨진 코드가 있는지도 모르겠다는 생각이 듭니다.

2. ‘차도’는 하나의 예시였습니다만.. dic_user.txt에 ‘1차량’이라는 단어를 추가하고 나서 분석할 때 ‘1차량’과 ‘1차량이’ ‘1차량은’이 구분된 단어(명사)로 추출되고 있습니다. MorphAnalyzer을 통해서 확인해 보면 각 형태소에 대해서 태그하는 방법이 여러가지인데, 이 중에서 어떤 알고리즘으로 명사를 추출하는지 궁금합니다.

바쁘신 중에도 답변해 주셔서 감사합니다.

gogamza

1. 코드하고는 상관없이 내부적으로 dic_system.txt는 기본으로 사용되는 사전입니다. 만일 세종 사전을 사용하게 된다면 위 시스템 사전 하고 함께 동작하게 됩니다.

2. 문장 구조를 파악하기 위한 HMM 알고리즘이 동작하고 문장구조 기반 optimal tag sequence를 뽑아내어 그중에 명사인것만 추출합니다.
통계 알고리즘으로 동작하는 것이기 때문에 context에 따라 다르게 동작할 수 있으며 이때문에 100% 정확도를 가진 tagger가 존재하지 않습니다.

Felix Song

답변해 주셔서 감사합니다. 제가 아직 미숙해서 본의 아니게 귀찮게 해 드렸네요..
마지막으로 한 가지만 더 여쭙겠습니다.
50MB짜리 텍스트를 분석하다가 찾은 내용입니다만, 띄어쓰기가 되어 있지 않은(말 그대로, 200자 정도 되는 줄에 공백이 하나도 없는 경우를 말합니다) 문장에서 에러가 발생하는 것은 원래 의도된 것인지요?
예컨대 Map(extractNoun, object)로 전체 텍스트에 대한 명사 추출 작업을 실행할 때, 띄어쓰기가 되지 않은 라인에서

>`Encoding(x)`<-"UTF-8"

문자형 벡터가 와야 합니다
라는 에러가 나오더라구요.

gogamza

내부 로직상 띄어쓰기가 전혀 되어 있지 않으면 결과가 리턴되지 않고 이럴 경우에 에러를 출력하게 했습니다.

Felix Song

내부 로직에 의한 메시지였군요.
답변해 주셔서 정말 감사합니다! 제 질문이 하나같이 초보적인 질문이었는데 일일이 다 답변을 달아주셔서 감동받았습니다. ㅠㅠ

gogamza

요즘 심적인 여유가 별로 없어서 살짝 답변이 쉽지 않긴 했지만 도움이 되었다니 다행입니다. ^^

agyness

안녕하세요 지난 번 주신 도움으로 패키지를 잘 사용하고 있는데요 extractNoun에서 궁금한 점이 생겨 질문 드립니다
/n와 같은 개행문자가 단어와 함께 붙어나오는 경우가 생기는데 (ex: 후n하차)
gsub를 이용해 /n을 지워보고
엑셀 자체에서 개행문자를 제거해봤는데도 똑같은 일이 발생합니다
사전에 /n과 같이 붙어나오는 단어들을 추가해봐도 마찬가지로 같은 문제가 발생합니다
혹시 이 문제를 해결할 수 있는 방법이 있을까요??
감사합니다

gogamza

예시를 보여주시면 한번 테스트 해보겠습니다.