본문 바로가기
R

[R.아르] 문장에서 보통명사만 추출하기(1)

by LightBlogger 2016. 12. 6.

문장에서 보통명사만 추출하는 과정은


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) 에서 이어서 알아보자.



반응형

댓글