R TermDocumentMatrix 행렬 용어 병합

1 개요[ | ]

R TermDocumentMatrix 용어 병합
R TermDocumentMatrix 행렬 단어 병합
R zTdmMatrixMergeTerms()
tdm은 트리플릿(정확히는 simple_triplet_matrix)으로 데이터가 보관되므로, 대부분의 경우에 저장공간이 훨씬 절약된다.
  • 아래 방법은 tdm을 행렬로 이미 변환하고 본래의 tdm 정보를 날려버린 경우에만 사용
library(tm) # TermDocumentMatrix()

### 커스텀 함수 ###
# 불필요한 용어 제거
zTdmMatrixRemoveTerms = function(m, t) {
  m[!rownames(m) %in% t,]
}
# 용어(들)을 하나로 병합(합산)
zTdmMatrixMergeTerms = function(m, froms, to) {
  names = names(dimnames(m))
  for(from in froms) {
    if(from == to) next
    #print(paste0("Merging [",from,"] to [",to,"]..."))
    if(!(from %in% rownames(m))) next
    if(!(to %in% rownames(m))) {
      m = rbind(m, rep(0,ncol(m)))
      rownames(m)[length(rownames(m))] = to
    }
    m[to,] = m[from,] + m[to,]
    m = m[!rownames(m) %in% from,]
  }
  names(dimnames(m)) = names 
  return(m)
}
# 정규식으로 잡히는 용어들을 하나로 병합(합산)
zTdmMatrixMergeTermsGrep = function(m, grepstr, to) {
  return(zTdmMatrixMergeTerms(m, rownames(m)[grep(grepstr,rownames(m))], to))
}
######

docs = c("안녕, 안녕.", "반갑다, 친구들.", "반갑다, 친구야, 친구야")
## docs1 = iconv(docs1, "CP949", "UTF-8") ## 윈도우 R스튜디오 하드코딩 데이터입력시 인코딩 변환
tdm = TermDocumentMatrix(Corpus(VectorSource(docs)),control=list(
  removePunctuation = T,
  stopwords = F)
)
mat = as.matrix(tdm)
mat
##         Docs
## Terms    1 2 3
##   안녕   2 0 0
##   반갑다 0 1 1
##   친구들 0 1 0
##   친구야 0 0 2

zTdmMatrixRemoveTerms(mat, c("반갑다","친구야"))
##         Docs
## Terms    1 2 3
##   안녕   2 1 1
##   친구들 0 1 0

mat = zTdmMatrixMergeTerms(mat, "반갑다", "안녕")
mat
##         Docs
## Terms    1 2 3
##   안녕   2 1 1
##   친구들 0 1 0
##   친구야 0 0 2

zTdmMatrixMergeTerms(mat, c("친구야","친구들"), "친구")
##       Docs
## Terms  1 2 3
##   안녕 2 1 1
##   친구 0 1 2

zTdmMatrixMergeTermsGrep(mat, "^친구", "친구")
##       Docs
## Terms  1 2 3
##   안녕 2 1 1
##   친구 0 1 2

2 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}