"R TermDocumentMatrix 행렬 용어 병합"의 두 판 사이의 차이

 
(같은 사용자의 중간 판 18개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
==개요==
;R TermDocumentMatrix 용어 병합
;R TermDocumentMatrix 행렬 단어 병합
;R TermDocumentMatrix 행렬 단어 병합
;R zTdmMatrixMergeTerms()
;R zTdmMatrixMergeTerms()
* '''권장되지 않는 방법'''
* 특수한 경우가 아니라면 이 방법보다는 '''[[R TermDocumentMatrix 용어 병합]]'''을 참고하라 ★
:tdm은 트리플릿(정확히는 simple_triplet_matrix)으로 데이터가 보관되므로, 대부분의 경우에 저장공간이 훨씬 절약된다.
* 아래 방법은 tdm을 행렬로 이미 변환하고 본래의 tdm 정보를 날려버린 경우에만 사용


<source lang='r'>
<source lang='r' run>
zTdmMatrixMergeTerms <- function(m, from, to) {
library(tm) # TermDocumentMatrix()
   if(!(from %in% rownames(m))) return(m)
 
   if(!(to %in% rownames(m))) {
### 커스텀 함수 ###
     names <- names(dimnames(m))
# 불필요한 용어 제거
    m <- rbind(m, rep(0,ncol(m)))
zTdmMatrixRemoveTerms = function(m, t) {
    rownames(m)[length(rownames(m))] <- to
   m[!rownames(m) %in% t,]
     names(dimnames(m)) <- names
}
# 용어()을 하나로 병합(합산)
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,]
   }
   }
   m[to,] <- m[from,] + m[to,]
   names(dimnames(m)) = names
   m[!rownames(m) %in% from,]
  return(m)
}
# 정규식으로 잡히는 용어들을 하나로 병합(합산)
zTdmMatrixMergeTermsGrep = function(m, grepstr, to) {
   return(zTdmMatrixMergeTerms(m, rownames(m)[grep(grepstr,rownames(m))], to))
}
}
docs <- c("안녕, 안녕.", "반갑다, 친구들.", "반갑다, 친구야, 친구야")
######
docs <- iconv(docs, "CP949", "UTF-8")
 
tdm <- TermDocumentMatrix(Corpus(VectorSource(docs)),control=list(
docs = c("안녕, 안녕.", "반갑다, 친구들.", "반갑다, 친구야, 친구야")
## docs1 = iconv(docs1, "CP949", "UTF-8") ## 윈도우 R스튜디오 하드코딩 데이터입력시 인코딩 변환
tdm = TermDocumentMatrix(Corpus(VectorSource(docs)),control=list(
   removePunctuation = T,
   removePunctuation = T,
   stopwords = F)
   stopwords = F)
)
)
mat <- as.matrix(tdm)
mat = as.matrix(tdm)
mat
mat
##        Docs
##        Docs
30번째 줄: 54번째 줄:
##  친구야 0 0 2
##  친구야 0 0 2


mat <- zTdmMatrixMergeTerms(mat, "반갑다", "안녕")
zTdmMatrixRemoveTerms(mat, c("반갑다","친구야"))
##        Docs
## Terms    1 2 3
##  안녕  2 1 1
##  친구들 0 1 0
 
mat = zTdmMatrixMergeTerms(mat, "반갑다", "안녕")
mat
mat
##        Docs
##        Docs
38번째 줄: 68번째 줄:
##  친구야 0 0 2
##  친구야 0 0 2


mat <- zTdmMatrixMergeTerms(mat, "친구야", "친구")
zTdmMatrixMergeTerms(mat, c("친구야","친구들"), "친구")
mat <- zTdmMatrixMergeTerms(mat, "친구들", "친구")
##      Docs
mat
## Terms  1 2 3
##  안녕 2 1 1
##  친구 0 1 2
 
zTdmMatrixMergeTermsGrep(mat, "^친구", "친구")
##      Docs
##      Docs
## Terms  1 2 3
## Terms  1 2 3
49번째 줄: 83번째 줄:
==같이 보기==
==같이 보기==
* [[R TermDocumentMatrix()]]
* [[R TermDocumentMatrix()]]
* [[R TermDocumentMatrix 용어 병합]] ★
* <del>[[R TermDocumentMatrix 행렬 병합]]</del>


[[분류: R]]
[[분류: R tm]]
[[분류: 단어-문서 행렬]]

2020년 7월 10일 (금) 21:29 기준 최신판

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 }}