콘텐츠로 이동

R 클라이언트(RBareun)

R에서 바른 사용하기

RBareun 으로 형태소 분석·맞춤법 교정·동형이의어 의미 구분·우리말샘 음소 검색을 씁니다.

  • 저장소: RBareun
  • 현재 버전: 1.3.0

설치

CRAN 에는 아직 등록되지 않았습니다. 깃허브에서 받습니다.

install.packages(c("curl", "httr", "jsonlite"))
library(devtools)
devtools::install_github("bareun-nlp/RBareun")

준비물

  • 실행 중인 바른 서버. 로컬 설치본은 5658, 도커는 5656 이 기본 포트입니다.
  • API 키. koba- 로 시작합니다. 발급 방법
library(bareun)
set_api("koba-...", "localhost", 5656)

맞춤법 교정과 우리말샘 음소 검색은 맞춤법 교정 기능이 포함된 서버에서만 됩니다.

형태소 분석

t <- tagger("결과를 문자열로 바꾼다.")

pos(t)
#> [[1]]
#> [1] "결과/NNG" "를/JKO" "문자열/NNG" "로/JKB" "바꾸/VV" "ㄴ다/EF" "./SF"

morphs(t)
#> [[1]]
#> [1] "결과" "를" "문자열" "로" "바꾸" "ㄴ다" "."

nouns(t)
#> [[1]]
#> [1] "결과" "문자열"

verbs(t)
#> [[1]]
#> [1] "바꾸"

여러 문장은 줄바꿈으로 나눠 넣습니다.

t <- tagger("문장을 입력합니다.\n여러 문장을 넣습니다.")

사용자 사전

t <- tagger("문장", custom_dict_names = c("mydict"))

여럿을 주면 앞에 온 것이 우선합니다. 사전을 만드는 방법은 사용자 사전 API 를 보세요.

맞춤법 교정

r <- correct_grammar("이거 안되요. 학교에 갔읍니다.")

revised_text(r)
#> [1] "이거 안되요. 학교에 갔습니다."

revisions(r)
#>      origin   revised category            help
#> 1 갔읍니다. 갔습니다. STANDARD STANDARD-읍니다

교정기 옵션도 줄 수 있습니다.

correct_grammar("제목처럼 다룬다", treat_as_title = TRUE)

자세한 내용은 맞춤법 검사 API 를 보세요.

동형이의어 의미 구분

같은 글자가 여러 뜻을 가질 때 어느 뜻인지 골라 줍니다.

t <- tagger("나는 밤에 밤을 먹었다.", with_sense = TRUE)
senses(t)
#>   sentence morph tag sense_no meaning                    probability
#> 1        1    밤 NNG        2 밤나무의 열매. ...           0.5513565
#> 3        1    먹  VV        2 음식 따위를 입을 통하여 ... 0.9777783

조사·어미처럼 의미를 갖지 않는 형태소에는 원래 붙지 않으므로, 대부분의 형태소는 표에 나오지 않습니다. 동형이의어 의미 구분 API 참고.

우리말샘 음소 검색

완성형 한글로는 "초성이 ㅅ 이고 종성이 ㄴ 인 음절" 같은 조건을 쓸 수 없습니다.

dict_words(search_dict("{ㅅ//ㄴ}다", pos = "동사"))
#> [1] "신다"

dict_words(search_dict("아지", anchor = "suffix", limit = 5))
#> [1] "아지" "가아지" "강아지" "개아지" "갱아지"

anchorword(기본)·prefix·suffix·contains 중에 고릅니다. 패턴 문법은 우리말샘 음소 검색 API 를 보세요.

오류 처리

서버 호출이 실패하면 종류를 구분할 수 있는 조건(condition)이 올라옵니다.

tryCatch(
  correct_grammar("문장"),
  bareun_auth_error = function(e) message("API 키를 확인하세요"),
  bareun_connection_error = function(e) message("서버 주소를 확인하세요")
)
클래스 언제
bareun_connection_error 서버에 닿지 못함. 주소 오타·미기동·방화벽
bareun_auth_error API 키가 없거나 유효하지 않음, 라이선스 만료
bareun_unimplemented_error 그 서버가 제공하지 않는 기능
bareun_server_error 서버 내부 오류
bareun_request_error 그 밖의 요청 오류
bareun_argument_error 인자가 잘못됨. 서버를 부르기 전에 걸립니다

1.2.0 에서 달라진 것

1.2.0 1.3.0
형태소 분석·사용자 사전 + 교정·의미 구분·음소 검색
오류가 모두 같은 모양 조건 클래스로 구분
테스트 없음 testthat 50건

기존 함수의 사용법은 그대로입니다. tagger()with_sensecustom_dict_names 인자가 늘었습니다.

자주 묻는 질문

Q. CRAN 에서 설치할 수 없나요? A. 아직 등록되지 않았습니다. devtools::install_github() 로 설치하세요.

Q. 교정 함수를 불렀더니 "제공하지 않습니다" 오류가 납니다. A. 맞춤법 교정 기능이 없는 서버입니다. 교정과 음소 검색은 교정 기능이 포함된 서버에서만 동작합니다. bareun_unimplemented_error 로 구분할 수 있습니다.

Q. with_sense = TRUE 로 했는데 senses() 가 비어 있습니다. A. 서버에 의미 구분 모델이 실려 있어야 합니다. 그리고 중의성이 없는 형태소에는 의미가 붙지 않으므로, 짧은 문장에서는 비어 있을 수 있습니다.

도움이 되었나요?