Permalink
Browse files

first commit

  • Loading branch information...
0 parents commit fcf79d99858f33b702d1f19eed14e43f3d940340 haven-jeon committed Nov 24, 2011
Showing with 293,072 additions and 0 deletions.
  1. +19 −0 DESCRIPTION
  2. 0 MD5
  3. +8 −0 NAMESPACE
  4. 0 NEW
  5. +188 −0 R/KoAnalyzerRun.R
  6. +23 −0 R/onLoad.R
  7. +35 −0 inst/dics/conf/plugin/MajorPlugin/MorphAnalyzer/ChartMorphAnalyzer.json
  8. +31 −0 inst/dics/conf/plugin/MajorPlugin/PosTagger/HmmPosTagger.json
  9. +12 −0 inst/dics/conf/plugin/SupplementPlugin/MorphemeProcessor/SimpleMAResult09.json
  10. +12 −0 inst/dics/conf/plugin/SupplementPlugin/MorphemeProcessor/SimpleMAResult22.json
  11. +12 −0 inst/dics/conf/plugin/SupplementPlugin/MorphemeProcessor/UnknownMorphProcessor.json
  12. +12 −0 inst/dics/conf/plugin/SupplementPlugin/PlainTextProcessor/InformalSentenceFilter.json
  13. +12 −0 inst/dics/conf/plugin/SupplementPlugin/PlainTextProcessor/SentenceSegmentor.json
  14. +12 −0 inst/dics/conf/plugin/SupplementPlugin/PosProcessor/NounExtractor.json
  15. +12 −0 inst/dics/conf/plugin/SupplementPlugin/PosProcessor/SimplePOSResult09.json
  16. +12 −0 inst/dics/conf/plugin/SupplementPlugin/PosProcessor/SimplePOSResult22.json
  17. +63 −0 inst/dics/data/kE/connections.txt
  18. +10 −0 inst/dics/data/kE/connections_not.txt
  19. +339 −0 inst/dics/data/kE/dic_analyzed.txt
  20. +283,949 −0 inst/dics/data/kE/dic_system.txt
  21. +13 −0 inst/dics/data/kE/dic_user.txt
  22. +143 −0 inst/dics/data/kE/tag_set.txt
  23. +504 −0 inst/dics/data/stat/PTT.pos
  24. +1,036 −0 inst/dics/data/stat/PTT.wp
  25. +6,508 −0 inst/dics/data/stat/PWT.pos
  26. BIN inst/java/KoreanAnalyzer-0.9.jar
  27. BIN inst/java/jhannanum.jar
  28. BIN inst/java/ko.jar
  29. BIN inst/java/koreananalyzer-20100525.jar
  30. BIN inst/java/lucene-core-2.9.4.jar
  31. BIN inst/java/lucene-spellchecker-2.9.4.jar
  32. +6 −0 man/.onLoad.Rd
  33. +5 −0 man/DicConfPath.Rd
  34. +5 −0 man/KoNLP.Rd
  35. +10 −0 man/MorphAnalyzer.Rd
  36. +10 −0 man/SimplePos09.Rd
  37. +10 −0 man/SimplePos22.Rd
  38. +8 −0 man/convertHangulStringToJamos.Rd
  39. +8 −0 man/convertHangulStringToKeyStrokes.Rd
  40. +10 −0 man/doKoMorph.Rd
  41. +10 −0 man/extractNoun.Rd
  42. +8 −0 man/is.hangul.Rd
  43. +8 −0 man/makeTagList.Rd
  44. +5 −0 man/pkgKoNLP.Rd
  45. +4 −0 tests/test-all.R
@@ -0,0 +1,19 @@
+Package: KoNLP
+Maintainer: Heewon Jeon <madjakarta@gmail.com>
+License: GPL-3
+Title: Korean NLP Package
+Author: Heewon Jeon
+Description: Korean Language Processing, An interface to Hannanum
+ korean
+ analyzer.(http://semanticweb.kaist.ac.kr/home/index.php/HanNanum),
+ An interface to Korean Lucene
+ analyzer.(http://sourceforge.net/projects/lucenekorean/), some
+ functions
+SystemRequirements: Java (>= 1.6)
+Version: 0.0-7.4
+Repository: CRAN
+Date/Publication: 2011-10-12 07:49:45
+Packaged: 2011-10-12 20:53:27 UTC; tobias
+Date: 2011-10-12
+Depends: R (>= 2.13.1), rJava (>= 0.9-0)
+Collate: 'KoAnalyzerRun.R' 'onLoad.R'
0 MD5
No changes.
@@ -0,0 +1,8 @@
+export(doKoMorph)
+export(extractNoun)
+export(MorphAnalyzer)
+export(SimplePos22)
+export(SimplePos09)
+export(is.hangul)
+export(convertHangulStringToKeyStrokes)
+import("rJava")
0 NEW
No changes.
@@ -0,0 +1,188 @@
+#' doKoMorph
+#'
+#' morphlogical analyze the sentence.
+#' it uses lucene korean analyzer.
+#' see details in \url{http://sourceforge.net/projects/lucenekorean/}
+#'
+#' @param sentence input
+#' @return stem of sentence
+#'
+#' @export
+doKoMorph <- function(sentence){
+ if(!is.character(sentence) | nchar(sentence) == 0) {
+ warning("input must be character!")
+ return(sentence)
+ }else{
+ out <- .jcall(.jnew("Ko"), "[S", "KoAnalyze", sentence)
+ Encoding(out) <- "UTF-8"
+ return(out)
+ }
+}
+
+#' extractNoun
+#'
+#' extract Nouns from Korean sentence.
+#' it uses Hannanum analyzer.
+#' see detail in \url{http://semanticweb.kaist.ac.kr/home/index.php/HanNanum}
+#'
+#' @param sentence input
+#' @return Noun of sentence
+#'
+#' @export
+extractNoun <- function(sentence){
+ if(!is.character(sentence) | nchar(sentence) == 0) {
+ warning("input must be character!")
+ return(sentence)
+ }else{
+ out <- .jcall("HannanumInterface", "[S", "extractNoun",DicConfPath,sentence)
+ Encoding(out) <- "UTF-8"
+ return(out)
+ }
+}
+
+#' MorphAnalyzer
+#'
+#' Do the morphological analysis, not doing pos tagging.
+#' it uses Hannanum analyzer.
+#' see details in \url{http://semanticweb.kaist.ac.kr/home/index.php/HanNanum}
+#'
+#' @param sentence input
+#' @return result of analysis
+#'
+#' @export
+MorphAnalyzer <- function(sentence){
+ if(!is.character(sentence) | nchar(sentence) == 0) {
+ warning("input must be character!")
+ return(sentence)
+ }else{
+ out <- .jcall("HannanumInterface", "S", "MorphAnalyzer",DicConfPath,sentence)
+ Encoding(out) <- "UTF-8"
+ return(makeTagList(out))
+ }
+}
+#' SimplePos22
+#'
+#' Do pos tagging using 22 tags.
+#' it uses Hannanum analyzer.
+#' see details in \url{http://semanticweb.kaist.ac.kr/home/index.php/HanNanum}
+#'
+#' @param sentence input
+#' @return result of tags
+#'
+#' @export
+SimplePos22 <- function(sentence){
+ if(!is.character(sentence) | nchar(sentence) == 0) {
+ warning("input must be character!")
+ return(sentence)
+ }else{
+ out <- .jcall("HannanumInterface", "S", "SimplePos22",DicConfPath,sentence)
+ Encoding(out) <- "UTF-8"
+ return(makeTagList(out))
+ }
+}
+
+#' SimplePos09
+#'
+#' Do pos tagging using 9 tags.
+#' it uses Hannanum analyzer.
+#' see details in \url{http://semanticweb.kaist.ac.kr/home/index.php/HanNanum}
+#'
+#' @param sentence input
+#' @return Noun of sentence
+#'
+#' @export
+SimplePos09 <- function(sentence){
+ if(!is.character(sentence) | nchar(sentence) == 0) {
+ warning("input must be character!")
+ return(sentence)
+ }else{
+ out <- .jcall("HannanumInterface", "S", "SimplePos09",DicConfPath,sentence)
+ Encoding(out) <- "UTF-8"
+ return(makeTagList(out))
+ }
+}
+
+
+#' is.hangul
+#'
+#' checking sentence is hangul or not
+#'
+#' @param sentence input charactor
+#' @return TRUE or FALSE of sentence vector(s)
+#'
+#' @export
+is.hangul <- function(sentence){
+ intVec <- sapply(sentence, utf8ToInt)
+ all(intVec >= 0xAC00 & intVec <= 0xD7A3)
+}
+
+#' convertHangulStringToJamos
+#'
+#' convert Hangul sentence to Jamos(now on testing~)
+#'
+#' @param hangul hangul string
+#' @return Jamo sequences
+convertHangulStringToJamos <- function(hangul){
+ if(!is.character(hangul) | nchar(hangul) == 0){
+ warning("must input char!")
+ return(hangul)
+ }else{
+ jamos <- .jcall("org/apache/lucene/search/spell/korean/KoHangul", "S","convertHangulStringToJamos",hangul)
+ Encoding(jamos) <- "UTF-8"
+ return(unlist(strsplit(jamos,intToUtf8(0xFF5C))))
+ }
+}
+
+#' convertHangulStringToKeyStrokes
+#'
+#' convert Hangul String to Keystrokes, each Hangul syllable can be dilimitered by \emph{OxFF5C}.
+#'
+#' @param hangul hangul sentence
+#' @return Keystroke sequence
+#'
+#' @export
+convertHangulStringToKeyStrokes <- function(hangul){
+ if(!is.character(hangul) | nchar(hangul) == 0){
+ warning("must input char!")
+ return(hangul)
+ }else{
+ keystrokes <- .jcall("org/apache/lucene/search/spell/korean/KoHangul", "S","convertHangulStringToKeyStrokes",hangul)
+ Encoding(keystrokes) <- "UTF-8"
+ return(keystrokes)
+ }
+}
+
+#' makeTagList
+#'
+#' internal function to make tag list
+#'
+#' @param tagstr pos tagging format from Hannanum analyzer
+#' @return taglist list object
+makeTagList <- function(tagstr){
+ if(!is.character(tagstr) | nchar(tagstr) == 0) {
+ warning("input must be character!")
+ return(list())
+ }
+ splittedtags <- strsplit(tagstr, split="\n",fixed=T)[[1]]
+ tagset <- splittedtags[which(substr(splittedtags,1,1) != "")]
+ taglist <- list()
+ morphs <- c()
+ h <- NULL
+ for(i in 1:length(tagset)){
+ if(substr(tagset[i],1,1) != "\t"){
+ if(!is.null(h)){
+ taglist[[length(taglist) + 1]] <- unlist(sapply(morphs,function(x) substr(x,2,nchar(x)), USE.NAMES=F))
+ names(taglist)[length(taglist)] <- h
+ }
+ h <- tagset[i]
+ morphs <- c()
+ }else{
+ morphs <- append(morphs, tagset[i])
+ }
+ }
+ taglist[[length(taglist) + 1]] <- unlist(sapply(morphs,function(x) substr(x,2,nchar(x)), USE.NAMES=F))
+ names(taglist)[length(taglist)] <- h
+ return(taglist)
+}
+
+
@@ -0,0 +1,23 @@
+#' pkgKoNLP
+#'
+#' global variable for internaly used
+pkgKoNLP <- ""
+
+#' DicConPath
+#'
+#' dic and conf path for Hannanum analyzer
+DicConfPath <- ""
+
+#' .onLoad
+#'
+#' package loader
+#'
+#' @rdname onLoad
+#' @import "rJava"
+.onLoad <- function(libname, pkgname) {
+ .jinit(parameters="-Dfile.encoding=UTF-8")
+ .jpackage(pkgname, lib.loc = libname)
+ pkgKoNLP <<- pkgname
+ DicConfPath <<- paste(system.file(package=pkgKoNLP),"/dics", sep="")
+}
+
@@ -0,0 +1,35 @@
+{
+ "name": "ChartMorphAnalyzer",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ },
+ {
+ "name": "최동현",
+ "email": "cdh4696@gmail.com"
+ },
+ {
+ "name": "이운재",
+ "email": "wjlee@world.kaist.ac.kr"
+ },
+ {
+ "name": "김선배",
+ "email": "yuntan@world.kaist.ac.kr"
+ },
+ {
+ "name": "김길연",
+ "email": "gykim@world.kaist.ac.kr"
+ }
+ ],
+ "description": "형태소 분석을 위한 내부 저장 공간으로 Lattice 형태의 차트를 사용한다. 분석기는 283,948개의 단어를 포함하는 시스템 형태소 사전과 사용자가 직접 편집 가능한 사용자 사전을 이용한다. 사전은 형태소 분석기를 위해 고안된 사전 구조인 TDBM(Trie based DBM)의 형태로 이용된다. 음운 변화처리는 어미의 탈락, 어간의 탈락과 같은 자동적 변화와 불규칙 용언에 의한 불규칙 변화, 모음조화 및 축약과 같은 선택적 변화로 나누어 처리한다. 미등록어에 대한 처리를 위해서 형태소 분석 결과가 없는 경우에는 모든 분할 위치에 'unk' 품사를 할당하고 다시 형태소 분석을 실시한다. 내부적으로 사용하는 한글 인코딩 방식은 초성, 중성, 종성 단위의 3바이트 인코딩 방식으로 삼보 KSSM 조합형 코드와 유사한 형태이다. 유니코드와 내부 한글 인코딩의 상호 변환은 코드 변환 모듈을 통해 이루어진다. 형태소 사전, 태그셋, 결합 규칙은 쉽게 편집 가능한 독립적인 파일로 존재하여 프로그램 수정 없이 유연한 변경이 가능하다.\n[Reference] 이운재, 김선배, 김길연, 최기선, '모듈화된 형태소 분석기의 구현', 한국정보과학회 언어공학연구회 학술발표 논문집, pp. 123-136, 1999.",
+ "type": "MorphAnalyzer",
+ "dic_system": "data/kE/dic_system.txt",
+ "dic_user": "data/kE/dic_user.txt",
+ "dic_analyzed": "data/kE/dic_analyzed.txt",
+ "connections": "data/kE/connections.txt",
+ "connections_not": "data/kE/connections_not.txt",
+ "tagset": "data/kE/tag_set.txt"
+}
+
@@ -0,0 +1,31 @@
+{
+ "name": "HmmPosTagger",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ },
+ {
+ "name": "최동현",
+ "email": "cdh4696@gmail.com"
+ },
+ {
+ "name": "신중호",
+ "email": "null"
+ },
+ {
+ "name": "한영석",
+ "email": "null"
+ },
+ {
+ "name": "박영찬",
+ "email": "null"
+ }
+ ],
+ "description": "Hidden Markov Model을 기반으로 형태소 분석 결과 중에서 가장 유력한 분석 결과 하나만을 추출한다. 굴절어인 한국어의 특성을 고려하여 형태소 단위의 전이 뿐만 아니라 어절 구조를 반영한 Hidden Markov Model을 이용한다. 학습 데이터는 언어자원은행(http://bora.or.kr)에 등록된 'Corpus2 정련된 형태소분석 코퍼스'를 기반으로 한다.\n[Reference] 신중호, 한영석, 박영찬, 최기선, '어절구조를 반영한 은닉 마르코프 모델을 이용한 한국어 품사태깅', 한글 및 한국어 정보처리 학술대회, pp. 389-394, 1994.",
+ "type": "PosTagger",
+ "pwt.pos": "data/stat/PWT.pos",
+ "ptt.pos": "data/stat/PTT.pos",
+ "ptt.wp": "data/stat/PTT.wp"
+}
@@ -0,0 +1,12 @@
+{
+ "name": "SimpleMAResult09",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ }
+ ],
+ "description": "카이스트 태그셋은 69개의 형태소 태그를 정의하고 있다. 이 플러그인은 보다 간단한 형태소 분석 결과를 제공하기 위하여 총 9개의 품사 태그만을 사용한 결과로 변환한다. 사용하는 품사 태그는 다음과 같다.\n\nN(체언), P(용언), M(수식언), I(독립언), J(관계언), E(어미), X(접사), S(기호), F(외국어)\n\n주의사항: 이 플러그인은 HmmPosTagger와 호환되지 않습니다.",
+ "type": "MorphemeProcessor"
+}
@@ -0,0 +1,12 @@
+{
+ "name": "SimpleMAResult22",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ }
+ ],
+ "description": "카이스트 태그셋은 69개의 형태소 태그를 정의하고 있다. 이 플러그인은 보다 간단한 형태소 분석 결과를 제공하기 위하여 총 22개의 품사 태그만을 사용한 결과로 변환한다. 사용하는 품사 태그는 다음과 같다.\n\n - NC(보통명사), NQ(고유명사), NB(의존명사), NP(대명사), NN(수사)\n - PV(동사), PA(형용사), PX(보조용언)\n - MM(관형사), MA(부사)\n - II(감탄사)\n - JC(격조사), JX(보조사), JP(서술격조사)\n - EP(선얼말어미), EC(연결어미), ET(전성어미), EF(종결어미)\n - XP(접두사), XS(접미사)\n - S(기호)\n - F(외국어)\n\n주의사항: 이 플러그인은 HmmPosTagger와 호환되지 않습니다.",
+ "type": "MorphemeProcessor"
+}
@@ -0,0 +1,12 @@
+{
+ "name": "UnknownMorphProcessor",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ }
+ ],
+ "description": "형태소 분석 단계 결과 미등록어로 처리된 형태소에 대해서 비서술성명사(ncn) 태그를 부착한다. 미등록어를 처리에는 다양한 접근 방법이 있지만 가장 단순한 방법으로 처리하고 있다.",
+ "type": "MorphemeProcessor"
+}
@@ -0,0 +1,12 @@
+{
+ "name": "InformalSentenceFilter",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ }
+ ],
+ "description": "비형식적인 문장 필터는 약 9만 건의 인터넷 댓글 자료를 조사하여 발견한 형태소 분석이 반드시 필요한 형태가 아니면서 형태소 분석기의 성능에 영향을 주는 입력 패턴에 대해 필터링을 수행한다. 필터링의 대상이 되는 대표적인 예는 아래와 같다. 이러한 입력들은 설정에 따라서 워크플로의 이후 단계에서 분석되지 않거나 짧은 단위로 나뉘어 분석된다. 아래는 필터링의 대상이되는 입력의 예이다. \n - 특수기호의 반복적인 사용\n\t예) $$$$$$$$$$$$$ 일시 $$$$$$$$$$$$$$\n - 짧은 패턴의 지속적인 반복\n\t예) 서울시장서울시장서울시장서울시장서울시장...",
+ "type": "PlainTextProcessor"
+}
@@ -0,0 +1,12 @@
+{
+ "name": "SentenceSegmentor",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ }
+ ],
+ "description": "문장 분리기는 문장의 구분자 역할을 할 수 있는 마침표, 물음표, 느낌표 문장 기호를 기준으로 전·후 조건에 따라 문장 구분을 결정하는 간단한 방식으로 구현되었다. 마침표에 대해서는 바로 뒤에 숫자가 있는 경우 소수점으로, 마침표 바로 앞에 영문자가 있는 경우 영문 약어로, 바로 뒤에 또 다른 마침표가 있는 경우 말줄임표로, 앞 단어의 길이가 2바이트 이하인 경우 말머리표로 인식하여 문장구분을 하지 않는다. 물음표와 느낌표는 다른 특수 기호와 함께 사용된 경우에 문장 구분자로 인식하지 않는다.",
+ "type": "PlainTextProcessor"
+}
@@ -0,0 +1,12 @@
+{
+ "name": "NounExtractor",
+ "version": "1.0",
+ "author": [
+ {
+ "name": "박상원",
+ "email": "hudoni@gmail.com"
+ }
+ ],
+ "description": "명사 추출기는 형태소 분석과 품사 태깅 결과 명사로 인식된 형태소만 추출하여 보여준다.",
+ "type": "PosProcessor"
+}
Oops, something went wrong.

0 comments on commit fcf79d9

Please sign in to comment.