문장에서 보통명사만 추출하는 과정은
2016/11/22 - [R] - [R.아르] 문장에서 명사 추출하기 에서 본 과정과 거의 동일하다.
다만 extractNoun()으로 명사를 추출하는 대신 보통명사만 추출해야 하므로
위 포스트에서 제작했던 커스텀 함수 부분을 보통명사 추출로 바꾸어 주면 된다.
커스텀 함수 제작 후, 동일한 과정을 반복해 보자.
words <- function(doc) {
doc <- as.character(doc)
extractNoun(doc)
}
위 함수가 이전 포스트에서 제작했던 함수이다.
보통명사 추출을 위해서는 extractNoun() 함수 대신 단어의 형태를 분석해주는 SimplePos 함수를 사용해야 한다.
그 중에서도 보통명사까지 가려내려면 22가지로 구분해주는 SimplePos22() 함수를 사용하면 되겠다.
SimplePos22() 에서 보통명사는 NC 로 표기된다. (아래 그림 참고)
(출처: https://github.com/haven-jeon/KoNLP/wiki/KoNLP-examples)
SimplePos22()가 어떻게 동작하는지 알기 위해 임의의 문자열로 테스트를 진행해 보자.
먼저 KoNLP 라이브러리를 부르고 SejongDic을 사용하겠다고 선언해 준다.
임의의 문자열을 doc에 넣은 후 SimplePos22()를 적용하면
이와 같이 분석해 준다.
여기에서 분류가 /NC 인 것만 추출하기 위해 str_match() 함수를 사용한다.
str_match는 주어진 개체로부터 특정 문자열을 반환하는 함수이며 str_match(개체, 찾을 문자열) 과 같이 사용한다.
여기서 찾을 문자열에는 2016/09/06 - [R] - [R.아르] 특정 조건에 맞는 글자(이메일 주소)만 추출하기 에서 본 정규표현식의 사용이 가능하다.
찾을 부분인 (모든 한글)/NC 를 정규표현식으로 바꾸면 [가-힣]+/NC 가 된다.
[a-zA-Z]가 '모든 알파벳'이라면 [가-힣] 는 '모든 한글' 이라는 의미이다. (정규표현식에 관하여는 이전 포스트 참조)
이제 SimplePos22()로 분석한 결과를 doc2에 넣고 그 중 /NC를 포함한 문자열만 추출하여 doc3에 넣으면
와 같이 NC인 것만 남겨 준다.
하지만 사실 /NC라는 글자 자체가 필요한 것은 아니다. 이럴 때 str_match()의 정규표현식에서
따로 떼어내고 싶은 부분만 괄호로 한 번 감싸 주면 다음과 같이 별도로 표기해 준다.
이제 결과에서 2열만 떼어내면, 그리고 NA인 것을 지우면 깔끔하겠다.
!is.na()는 NA가 아닌(!) 항목을 의미한다.
여기까지를 커스텀 함수로 만들면 다음과 같다.
words <- function(doc){
doc <- as.character(doc)
doc2 <- paste(SimplePos22(doc))
doc3 <- str_match(doc2, "([가-힣]+)/NC")
doc4 <- doc3[,2]
doc4[!is.na(doc4)]
}
잘 동작하는지 테스트해 보자.
참고로, 만일 동사(PV)와 형용사(PA)만 추출하고 싶다면
위 함수의 정규표현식 부분만 다음과 같이 변경해 주면 되겠다.
words <- function(doc){
doc <- as.character(doc)
doc2 <- paste(SimplePos22(doc))
doc3 <- str_match(doc2, "([가-힣]+)/(PA|PV)")
doc4 <- doc3[,2]
doc4[!is.na(doc4)]
}
이제 커스텀 함수를 만들었으므로,
본격적인 추출은 2016/12/06 - [R] - [R.아르]문장에서 보통명사만 추출하기(2) 에서 이어서 알아보자.
'R' 카테고리의 다른 글
[R. 아르] KoNLP 패키지에서 에러가 날 때 (25) | 2017.10.16 |
---|---|
[R. 아르] 언어 설정하기 / MDI, SDI 설정하기 (0) | 2017.10.12 |
[R.아르] 통계 프로그램 R 설치하기 (0) | 2017.10.11 |
[R.아르] 특정 단어가 들어있는 문장 추출하기 (0) | 2016.12.06 |
[R.아르] 문장에서 보통명사만 추출하기(2) (2) | 2016.12.06 |
[R.아르] 문장에서 명사 추출하기 (5) | 2016.11.22 |
[R. 아르] 로또 확률 계산하기 for() / choose() (0) | 2016.11.08 |
[R. 아르] 숫자를 날짜로 바꾸기 (0) | 2016.10.28 |
[R.아르] R에서 엑셀의 vlookup()처럼 첫 번째 값만 가져오기 (0) | 2016.10.28 |
[R.아르] 주별 합계 구하기 cut() (2) | 2016.10.24 |
댓글