首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >csv文件中字符串的Tf-idf

csv文件中字符串的Tf-idf
EN

Stack Overflow用户
提问于 2014-06-09 10:02:07
回答 1查看 1.2K关注 0票数 1

我的test.csv文件是(没有头):

代码语言:javascript
复制
very good, very bad, you are great
very bad, good restaurent, nice place to visit

我希望将我的语料库与,分开,以便我的最终DocumentTermMatrix变成:

代码语言:javascript
复制
      terms
 docs       very good      very bad        you are great   good restaurent   nice place to visit
  doc1       tf-idf          tf-idf         tf-idf          0                    0
  doc2       0                tf-idf         0                tf-idf             tf-idf

如果不从DTM加载documents,我就能够正确地生成上述csv file,如下所示:

代码语言:javascript
复制
library(tm)
docs <- c(D1 = "very good, very bad, you are great", 
    D2 = "very bad, good restaurent, nice place to visit")

dd <- Corpus(VectorSource(docs))
dd <- tm_map(dd, function(x) {
    PlainTextDocument(
       gsub("\\s+","~",strsplit(x,",\\s*")[[1]]), 
       id=ID(x)
     )
})
inspect(dd)

# A corpus with 2 text documents
# 
# The metadata consists of 2 tag-value pairs and a data frame
# Available tags are:
#   create_date creator 
# Available variables in the data frame are:
#   MetaID 

# $D1
# very~good
# very~bad
# you~are~great
# 
# $D2
# very~bad
# good~restaurent
# nice~place~to~visit

dtm <- DocumentTermMatrix(dd, control = list(weighting = weightTfIdf))
as.matrix(dtm)

这将产生

代码语言:javascript
复制
# Docs good~restaurent nice~place~to~visit very~bad very~good you~are~great
#   D1       0.0000000           0.0000000        0 0.3333333     0.3333333
#   D2       0.3333333           0.3333333        0 0.0000000     0.0000000

如果我是从document文件中加载csv,那么每个文档的第一个项将被加入,如下所示:

代码语言:javascript
复制
> file_loc <- "testdata.csv"
> require(tm)
  Loading required package: tm
> x <- read.csv(file_loc, header = FALSE)
> x <- data.frame(lapply(x, as.character), stringsAsFactors=FALSE)
> dd <- Corpus(DataframeSource(x))
> dd <- tm_map(dd, stripWhitespace)
> dd <- tm_map(dd, tolower)
>  dd <- tm_map(dd, function(x) {
            PlainTextDocument(
            gsub("\\s+","~",strsplit(x,",\\s*")[[1]]), 
            id=ID(x)
            )
          })
> inspect(dd)

只加入如下的第一个术语:

代码语言:javascript
复制
# $D1
# very~good

# 
# $D2
# very~bad

我如何加入所有的条款并创建一个像上面这样的DocumentTermMatrix

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-09 13:36:07

你不正确地读取数据。我用scan阅读。以下工作:

代码语言:javascript
复制
docs <- scan("testdata.csv", "character", sep = "\n")

dd <- Corpus(VectorSource(x))
dd <- tm_map(dd, function(x) {
  PlainTextDocument(
    gsub("\\s+","~",strsplit(x,",\\s*")[[1]]), 
    id=ID(x)
  )
})
inspect(dd)

dtm <- DocumentTermMatrix(dd, control = list(weighting = weightTfIdf))
as.matrix(dtm)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24117862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档