【问题标题】:Text Retrieval using R使用 R 进行文本检索
【发布时间】:2011-05-03 11:57:51
【问题描述】:

我一直在使用 R 的文本挖掘包,它确实是一个很棒的工具。我还没有找到检索支持,或者我缺少某些功能。 如何使用 R 的文本挖掘包实现一个简单的 VSM 模型?

【问题讨论】:

  • 请提供有关 VSM 模型的一些背景信息。

标签: r information-retrieval text-mining vsm tf-idf


【解决方案1】:

假设 VSM = 向量空间模型,您可以通过以下方式构建一个简单的检索系统:

  • 为您的收藏/语料库创建文档术语矩阵
  • 为您的相似性度量(Jaccard、Euclidean 等)创建一个函数。有这些功能可用的软件包。 RSiteSearch 应该有助于找到它们。
  • 将您的查询转换为文档术语矩阵(它将有 1 行,并使用与第一步相同的字典进行映射)
  • 计算与第一步中的查询和矩阵的相似度。
  • 对结果进行排名并选择前 n 个。

一种非 R 方法是在 PostgreSQL 中的表的文本列(行是文档)上使用 GINI 索引。使用 ts_vector 查询方法,您可以拥有一个非常快速的检索系统。

【讨论】:

  • vegan::vegdist 有许多 stats 包没有提供的相似指数(至少我看不到它们)。
  • 我在 R 中实现第 3 步时遇到问题。我没有找到可以让我在 R 中执行此操作的函数。我知道 VSM 是如何工作的,而您在这里给出的内容非常幼稚回答。虽然我很欣赏这个答案,但我需要 R 命令和库来让我执行上述操作,尤其是第 3 步
  • 请查看logic.at/staff/feinerer/publications/talks/237_GfKl_2006.pdf 以获得更强大的文本聚类。
【解决方案2】:
# Sample R commands in support of my previous answer
require(fortunes)
require(tm)
sentences <- NULL
for (i in 1:10) sentences <- c(sentences,fortune(i)$quote)
d <- data.frame(textCol =sentences )
ds <- DataframeSource(d)
dsc<-Corpus(ds)
dtm<- DocumentTermMatrix(dsc, control = list(weighting = weightTf, stopwords = TRUE))
dictC <- Dictionary(dtm)
# The query below is created from words in fortune(1) and fortune(2)
newQry <- data.frame(textCol = "lets stand up and be counted seems to work undocumented")
newQryC <- Corpus(DataframeSource(newQry))
dtmNewQry <- DocumentTermMatrix(newQryC, control = list(weighting=weightTf,stopwords=TRUE,dictionary=dict1))
dictQry <- Dictionary(dtmNewQry)
# Below does a naive similarity (number of features in common)
apply(dtm,1,function(x,y=dictQry){length(intersect(names(x)[x!= 0],y))})

【讨论】:

  • 当查询与为集合创建的字典没有共同特征时,这些特征不会被映射。 -"dictionary 要制表的字符向量。结果中不会列出其他术语。出于性能原因,将跳过字典中根本没有出现在文档中的术语。默认为无操作(即,考虑所有术语). - /library/tm/html/termFreq.html"。我想我之前没有想到这一点。
  • dtmNewQry
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多