使用tm R包

时间:2015-09-03 02:30:48

标签: r text-mining

我一直在使用R中的tm包中的findAssocs()函数。如果我使用单个单词的函数我没有任何问题,我可以手动输入我想要查找的多个单词以下列格式的关联:

findAssoc(corpusname,"cat","dog","elephant",.75,.75,.75)

再次手动输入多个术语没有问题。我试图找到有时可能联系30或40个单词的术语列表的关联。我想要一个带有findAssocs()的列表或向量,而不是每次都要输入每个单词。任何想法如何做到这一点?我尝试制作一个自定义功能,但我仍然对R这么新,我没有运气。感谢。

感谢您的帮助。对新手来说,R有一个相当陡峭的学习曲线。我尝试了你建议的第一个方法并得到一个错误“错误:is.character(terms)不是TRUE”我使用的代码是:

 #data for associates list
wordAssocList<- read.csv("Word Assocs List.txt")
# change TRUE to FALSE if you have no column headings in the CSV
as.character(wordAssocList)
attributes(wordAssocList)
my_assocs <- findAssocs(tdm, wordAssocList, .01)
my_assocs

对于输出,我得到以下内容:

  

as.character(wordAssocList)   [1]“逻辑(0)”   属性(wordAssocList)   $名称   [1]“ÿþp”

$类 [1]“data.frame”

$ row.names 整数(0)

  

my_assocs&lt; - findAssocs(tdm,wordAssocList,.01)   错误:is.character(terms)不为TRUE

1 个答案:

答案 0 :(得分:1)

矢量不应该是一个问题。请参阅以下示例。

library(tm)

data("crude")
tdm <- TermDocumentMatrix(crude)

words <- c("oil", "opec", "xyz")
corr <- c(0.7, 0.75, 0.1)

# returns a list
my_assocs <- findAssocs(tdm, words, corr)

# turns list into a list of named dataframes.
my_list <- lapply(my_assocs, function(x) data.frame(terms = names(x), cor = x, stringsAsFactors = FALSE))

编辑使用新版本的dplyr(0.43),您可以为列表中的数据框创建有用的数据框,显示信息来自的数据框的名称。方便可视化和其他调查。

my_df <- dplyr::bind_rows(my_list, .id = "source")

Source: local data frame [28 x 3]

   source    terms   cor
    (chr)    (chr) (dbl)
1     oil     15.8  0.87
2     oil  clearly  0.80
3     oil     late  0.80
4     oil   trying  0.80
5     oil      who  0.80
6     oil   winter  0.80
7     oil analysts  0.79
8     oil     said  0.78
9     oil  meeting  0.77
10    oil    above  0.76
..    ...      ...   ...

您甚至可以使用数据框而不是2个向量,只需将单词和corr替换为数据框中的相应列。这样做的好处是,您可以在文本文件(或Excel)中读取您的单词和相关列表