"R TermDocumentMatrix 단어 병합"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 17개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
==개요==
;R TermDocumentMatrix 용어 병합
;R TermDocumentMatrix 용어 병합
* zTdmMergeTerms()
** 1개 또는 여러 개의 기존용어(froms)를 하나의 신규용어(to)로 병합(합산)한다.
** 새로운 용어(to)가 tdm 내에 있어도 되고 없어도 된다.
** 기존용어(froms)에 to가 들어있는 경우 무시된다.
* zTdmMergeTermsGrep()
** 정규식으로 잡히는 용어들을 하나로 병합(합산)한다.


==zTdmMergeTerms()==
<syntaxhighlight lang='r' notebook hideerr>
* 1개 또는 여러 개의 기존용어(froms)를 하나의 신규용어(to)로 병합(합산)한다.
* 새로운 용어(to)가 tdm 내에 있어도 되고 없어도 된다.
* 기존용어(froms)에 to가 들어있는 경우 무시된다.
 
<source lang='r'>
library(tm) # TermDocumentMatrix()
library(tm) # TermDocumentMatrix()


zTdmMergeTerms <- function(tdm, froms, to) {
zTdmMergeTerms = function(tdm, froms, to) {
   froms <- froms[froms!=to]
   froms = froms[froms!=to & froms %in% rownames(tdm)]
  if(length(froms)<1) return(tdm)
   if(!to %in% rownames(tdm)) {
   if(!to %in% rownames(tdm)) {
     tdm$nrow <- as.integer(tdm$nrow + 1)
     tdm$nrow = as.integer(tdm$nrow + 1)
     rownames(tdm) <- append(rownames(tdm),to)
     rownames(tdm) = append(rownames(tdm),to)
   }
   }
   for(from in froms) {
   for(from in froms) {
     nms <- rownames(tdm)
     nms = rownames(tdm)
     t1 <- tdm[which(nms==from),] + tdm[which(nms==to),]
     t1 = tdm[which(nms==from),] + tdm[which(nms==to),]
     rownames(t) <- to
     rownames(t1) = to
     t2 <- tdm[which(nms!=from & nms !=to),]
     t2 = tdm[which(nms!=from & nms !=to),]
     t1$i <- t1$i + t2$nrow
     t1$i = t1$i + t2$nrow
     t2$i <- c(t2$i, t1$i)
     t2$i = c(t2$i, t1$i)
     t2$j <- c(t2$j, t1$j)
     t2$j = c(t2$j, t1$j)
     t2$v <- c(t2$v, t1$v)
     t2$v = c(t2$v, t1$v)
     t2$nrow <- as.integer(t2$nrow + 1)
     t2$nrow = as.integer(t2$nrow + 1)
     rownames(t2) <- append(rownames(t2),to)
     rownames(t2) = append(rownames(t2),to)
     tdm <- t2
     tdm = t2
   }
   }
   return(tdm)
   return(tdm)
}
zTdmMergeTermsGrep = function(tdm, pattern, to) {
  return(zTdmMergeTerms(tdm, rownames(tdm)[grep(pattern,rownames(tdm))], to))
}
}


#### tdm1
#### tdm1
docs1 <- c("안녕, 안녕.", "반갑다, 친구들.", "반갑다, 친구야, 친구야")
docs1 = c("안녕, 안녕.", "반갑다, 친구들.", "반갑다, 친구야, 친구야")
docs1 <- iconv(docs1, "CP949", "UTF-8") # 윈도우 R스튜디오 하드코딩 데이터입력시 인코딩 변환
## docs1 = iconv(docs1, "CP949", "UTF-8") ## 윈도우 R스튜디오 하드코딩 데이터입력시 인코딩 변환
tdm1 <- TermDocumentMatrix(Corpus(VectorSource(docs1)),control=list(removePunctuation=T,stopwords=F))
tdm1 = TermDocumentMatrix(Corpus(VectorSource(docs1)),control=list(removePunctuation=T,stopwords=F))
inspect(tdm1)
inspect(tdm1)
## <<TermDocumentMatrix (terms: 4, documents: 3)>>
</syntaxhighlight>
## Non-/sparse entries: 5/7
<syntaxhighlight lang='r' notebook>
## Sparsity          : 58%
# '반갑다'를 '안녕'으로 간주한다.
## Maximal term length: 3
## Weighting          : term frequency (tf)
## Sample            :
##        Docs
## Terms    1 2 3
##  반갑다 0 1 1
##  안녕   2 0 0
##  친구들 0 1 0
##  친구야 0 0 2
 
inspect(zTdmMergeTerms(tdm1,"반갑다","안녕"))
inspect(zTdmMergeTerms(tdm1,"반갑다","안녕"))
## <<TermDocumentMatrix (terms: 3, documents: 3)>>
</syntaxhighlight>
## Non-/sparse entries: 5/4
<syntaxhighlight lang='r' notebook>
## Sparsity          : 44%
# '반갑다', '안녕', '친구야'를 '인사'로 간주한다.
## Maximal term length: 3
## Weighting          : term frequency (tf)
## Sample            :
##        Docs
## Terms    1 2 3
##  안녕   2 1 1
##  친구들 0 1 0
##  친구야 0 0 2
 
inspect(zTdmMergeTerms(tdm1,c("반갑다","안녕","친구야"),"인사"))
inspect(zTdmMergeTerms(tdm1,c("반갑다","안녕","친구야"),"인사"))
## <<TermDocumentMatrix (terms: 2, documents: 3)>>
</syntaxhighlight>
## Non-/sparse entries: 4/2
<syntaxhighlight lang='r' notebook>
## Sparsity          : 33%
# '반갑다', '안녕', '친구야'를 '안녕'으로 간주한다.
## Maximal term length: 3
inspect(zTdmMergeTerms(tdm1,c("반갑다","안녕","친구야"),"안녕"))
## Weighting          : term frequency (tf)
</syntaxhighlight>
## Sample            :
<syntaxhighlight lang='r' notebook>
##        Docs
# '친구'로 시작하는 것들은 '친구'로 간주한다.
## Terms    1 2 3
inspect(zTdmMergeTermsGrep(tdm1, "^친구", "친구"))
##  인사  2 1 3
</syntaxhighlight>
##  친구들 0 1 0
</source>


==같이 보기==
==같이 보기==
85번째 줄: 69번째 줄:


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

2021년 10월 18일 (월) 18:59 기준 최신판

1 개요[ | ]

R TermDocumentMatrix 용어 병합
  • zTdmMergeTerms()
    • 1개 또는 여러 개의 기존용어(froms)를 하나의 신규용어(to)로 병합(합산)한다.
    • 새로운 용어(to)가 tdm 내에 있어도 되고 없어도 된다.
    • 기존용어(froms)에 to가 들어있는 경우 무시된다.
  • zTdmMergeTermsGrep()
    • 정규식으로 잡히는 용어들을 하나로 병합(합산)한다.
library(tm) # TermDocumentMatrix()

zTdmMergeTerms = function(tdm, froms, to) {
  froms = froms[froms!=to & froms %in% rownames(tdm)]
  if(length(froms)<1) return(tdm)
  if(!to %in% rownames(tdm)) {
    tdm$nrow = as.integer(tdm$nrow + 1)
    rownames(tdm) = append(rownames(tdm),to)
  }
  for(from in froms) {
    nms = rownames(tdm)
    t1 = tdm[which(nms==from),] + tdm[which(nms==to),]
    rownames(t1) = to
    t2 = tdm[which(nms!=from & nms !=to),]
    t1$i = t1$i + t2$nrow
    t2$i = c(t2$i, t1$i)
    t2$j = c(t2$j, t1$j)
    t2$v = c(t2$v, t1$v)
    t2$nrow = as.integer(t2$nrow + 1)
    rownames(t2) = append(rownames(t2),to)
    tdm = t2
  }
  return(tdm)
}
zTdmMergeTermsGrep = function(tdm, pattern, to) {
  return(zTdmMergeTerms(tdm, rownames(tdm)[grep(pattern,rownames(tdm))], to))
}

#### tdm1
docs1 = c("안녕, 안녕.", "반갑다, 친구들.", "반갑다, 친구야, 친구야")
## docs1 = iconv(docs1, "CP949", "UTF-8") ## 윈도우 R스튜디오 하드코딩 데이터입력시 인코딩 변환
tdm1 = TermDocumentMatrix(Corpus(VectorSource(docs1)),control=list(removePunctuation=T,stopwords=F))
inspect(tdm1)
# '반갑다'를 '안녕'으로 간주한다.
inspect(zTdmMergeTerms(tdm1,"반갑다","안녕"))
# '반갑다', '안녕', '친구야'를 '인사'로 간주한다.
inspect(zTdmMergeTerms(tdm1,c("반갑다","안녕","친구야"),"인사"))
# '반갑다', '안녕', '친구야'를 '안녕'으로 간주한다.
inspect(zTdmMergeTerms(tdm1,c("반갑다","안녕","친구야"),"안녕"))
# '친구'로 시작하는 것들은 '친구'로 간주한다.
inspect(zTdmMergeTermsGrep(tdm1, "^친구", "친구"))

2 같이 보기[ | ]

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