【问题标题】:Text Mining: Getting a Sentence-Term Matrix文本挖掘:获取句子-术语矩阵
【发布时间】:2018-04-04 08:30:57
【问题描述】:

我目前在查找与使用文本挖掘在 R 中创建句子术语矩阵相关的任何内容时遇到了麻烦。

我正在使用 tm 包,我唯一能找到的就是转换为 tdm 或 dtm。

我只使用一个 Excel 文件,我只对其中一列的文本挖掘感兴趣。那一列中有大约 1200 行。我想创建一个行(句子) - 术语矩阵。我想创建一个矩阵,告诉我每行(句子)中单词的频率。

我想创建一个包含 1 和 0 的矩阵,以便稍后运行 PCA 分析。

在我的情况下,dtm 没有帮助,因为我只使用一个文件,行数为 1,列是整个文档中单词的频率。

相反,如果有意义的话,我想将这些句子视为文档。从那里,我想要一个矩阵,其中包含每个句子中单词的频率。

谢谢!

【问题讨论】:

    标签: r text-mining


    【解决方案1】:

    使用text2vec时,您只需将列的内容作为字符向量输入到标记器函数中 - 请参见下面的示例。

    关于您的下游分析,我不建议对计数数据/整数值运行 PCA,PCA 不适用于此类数据。您应该在 dtm 上应用归一化、tfidf 加权等以将其转换为连续数据,然后再将其提供给 PCA,或者改为应用对应分析。

    library(text2vex)
    
    docs <- c("the coffee is warm",
              "the coffee is cold",
              "the coffee is hot",
              "the coffee is warm",
              "the coffee is hot",
              "the coffee is perfect")
    
    
    #Generate document term matrix with text2vec    
    tokens = docs %>%
      word_tokenizer()
    
    it = itoken(tokens
                ,ids = paste0("sent_", 1:length(docs))
                ,progressbar = FALSE)
    
    vocab = create_vocabulary(it)
    
    vectorizer = vocab_vectorizer(vocab)
    
    dtm = create_dtm(it, vectorizer, type = "dgTMatrix")
    

    【讨论】:

      【解决方案2】:

      使用 语料库 库:

      library(corpus)
      library(Matrix)
      
      corpus <- federalist # sample data
      x <- term_matrix(text_split(corpus, "sentences"))
      

      尽管在您的情况下,听起来您已经将文本拆分为句子。如果这是真的,那么就不需要text_split 调用;做吧

      x <- term_matrix(data$your_column_with_sentences)
      

      (将 data$your_column_with_sentences 替换为适合您数据的任何内容)。

      【讨论】:

        【解决方案3】:

        无法添加 cmets 所以这里有一个建议:

        # Read Data from file using fread (for .csv from data.table package) 
        dat <- fread(filename, <add parameters as needed - col.namess, nrow etc>)
        counts <- sapply(row_start:row_end, function(z) str_count(dat[z,.(selected_col_name)],"the"))
        

        这将为您提供所选行感兴趣的列中出现的所有“the”。如果适用于所有行,您也可以使用apply。或用于不同变体的其他嵌套函数。请记住,您需要检查小写/大写字母 - 您可以使用 tolower 来实现这一点。希望这有帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-17
          • 2022-11-11
          • 2011-01-07
          • 2018-09-21
          相关资源
          最近更新 更多