@theeluwin 님의 세 줄 요약기를 보고 꽂혀서, 허락을 받고 세 줄 요약기의 R 패키지 버전을 만들어보았다.
그대로 옮겨서, 소스를 짜는데 사실 R의 S3, S4, R5 class는 다른 OOP 언어만큼의 우아함이 정말 눈꼽만치도 없다.
뭐, 결국에 이건 풀어서 짜면 되는 거다. Python에서 R에 대응되는 패키지는 다음과 같다.
networkx ->
igraph
KoNLPy -> KoNLPcollections.Counter -> sets::gset
...
뭐, 전체적으로는 비슷했다. 다만, KoNLP는 한나눔 분석기 밖에 지원을 안 하지만 KoNLPy는 한나눔 분석기 말고도 꽤 여러가지 분석기를 지원한다.
그리고 현재 한나눔 분석기는 속도는 빠르지만 꼬꼬마보다 분석 성능이 부족하다는 얘기가 돈다. (몇 개로 실험해보았는데, 정말 그런 것 같았다.)
KoNLP 내부에도 다소 문제가 있는지, 명사나누기 메소드가 예시와 다르게 동작하기도 했다. 이거에 대해선 KoNLP github에 PR을 넣어놓았다.
사실 동작하는 코드를 짜는데는 과장 안 하고 6시간도 안 걸렸다. 그것도 패키지 설치 문제 같은 거 해결하는 시간까지 포함해서 그렇다.
문제는 여기서 끝냈으면 좋았을 텐데, 욕심이 생겼다. CRAN repository에 등록을 해보고 싶어진 것이다.
그리고 몇 가지 문제에 봉착했다.
- manual과 Vignettes를 써야 했다. 이건 뭐, 귀찮았지만 시간을 들이면 됐다.
- 다른 Java나 C++ 등의 바이너리 코드없이, 나이브하게 R에서 돌아가는 패키지를 짜고 싶었다. 그런데 CRAN 제출 코드에는 아스키 문자만 포함되어야 한다. 그리고 나는 끌어다쓰는 거긴 하지만, 이 패키지는 한국어 처리를 목적으로 한다.
- KoNLP를 Import하는데 계속해서 Sejong 말뭉치를 패키지 내부에서 읽지 못했다. 참고로, CRAN 제출을 위한 패키지에는 library()나 require()를 사용해서는 안된다. 외부환경이나 변수에 영향을 줄 수 있기 때문이다.
- foreach 패키지 이용해서 조금이라도 병행처리로 속도 이득을 보려고 했는데 끝까지 package의 Env.variable Locking을 푸는 방법을 못 찾아서 걍 평범한 Loop로 바꿨다. 누군가 저에게 패키지 제작할 때 foreach iterator를 namespace locking을 풀고 package 환경 변수에 등록하는 법을 알려주세요...
아스키 문자 문제는 stringi::stri_escape_unicode()를 이용해서 아스키화된 stopword를 각각의 Noun을 아스키화시켜 이와 매칭하는 식으로 해결했다. 세 번째 문제를 생각보다 오래 끌었는데, Description에서 KoNLP의 외부 선언을 Imports에서 Depends로 옮겨주면 되는 일이었다. 해결되었을 때 어이가 없어서 헛웃음만...
사실 네 번째 문제는 제출하고 나서야 30분이 지나서 CRAN Reviewer에게
Please use the globalVariables() function to declare "sentence" as a global variable; this will suppress the note.
When you've done this, please resubmit.
라는 메일을 받고 깨달았던 문제다. 문제는 저 function만 써서는 저 note가 도저히 해결이 안 되더라.
어쨌든 제출 완료. 나중에라도 필요한 R package를 만들고 이를 공유할 수 있는 경험이 생긴 것 같아 기분은 좋다.
'CS' 카테고리의 다른 글
Windows 10, GTX 1070 환경에서의 Keras 설치 (0) | 2016.07.18 |
---|