所以我在 R 中有 3 个数据帧,每个数据帧都有单词和单词出现在文档中的频率(其中 df 代表)。我正在 R Shiny 中创建一个应用程序,用户可以在其中搜索单词并返回包含该单词的 pdf。所以我想添加功能,向用户提供基于其他数据帧推荐的单词。
一个例子:
因此,假设用户输入了“考试”一词。“考试”一词存在于两个数据帧中,因此它会从这些数据帧中推荐单词,并重复此过程,以便您可以根据我们拥有的数据帧找到可能的最佳单词。我希望有一个包可以做到这一点,或者可以实现 PCA 或 LDA/QDA。
有任何想法吗?
这是要尝试的 3 个数据帧,但只有前 20 个条目
df1 <- structure(list(word = c("data", "summit", "research", "program",
"analysis", "study", "evaluation", "minority", "federal", "department",
"statistical", "experience", "business", "design", "education",
"response", "sampling", "learning", "project", "review"), n = c(213L,
131L, 101L, 98L, 90L, 84L, 82L, 82L, 76L, 72L, 65L, 63L, 60L,
58L, 58L, 58L, 55L, 50L, 50L, 46L)), row.names = c(NA, -20L), class = c("tbl_df",
"tbl", "data.frame"))
df2 <- structure(list(word = c("regression", "sampling", "research", "forecast",
"analysis", "development", "disparity", "firms", "impact", "office",
"statistical", "experience", "sample", "support", "consulting",
"provide", "contract", "technology", "result", "system"), n = c(113L,
89L, 76L, 24L, 20L, 20L, 19L, 16L, 26L, 10L, 9L, 4L, 2L,
1L, 1L, 1L, 1L, 1L, 1L, 1L)), row.names = c(NA, -20L), class = c("tbl_df",
"tbl", "data.frame"))
df3 <- structure(list(word = c("knowledge", "veteran", "association", "compliance",
"random", "safety", "treatment", "analyst", "legal", "welfare",
"selection", "solicitation", "tasks", "personnel", "student",
"estimating", "investigation", "multivariate", "result", "system"), n = c(302L,
300L, 279L, 224L, 199L, 180L, 156L, 112L, 101L, 100L, 100L, 67L, 56L,
55L, 55L, 54L, 23L, 23L, 22L, 11L)), row.names = c(NA, -20L), class = c("tbl_df",
"tbl", "data.frame"))
理想情况下,我希望 R 返回与您已经输入的文档在同一文档中的可能性很高的单词。
理想情况下,我希望 R 返回与您已经输入的文档在同一文档中的可能性很高的单词。
如果您只是在寻找单词共现或相似性,您可能需要查看Word2Vec或Wikipedia2Vec - 您可以使用基于向量的方法对文本做一些有趣的事情。
但是:鉴于您上面关于不使用字数的评论
我要问的是,如果用户输入一个词,我想提供一些也可能有帮助的词。这意味着从他们搜索的单词所在的 pdf 中返回很有可能的单词
我想你想要的可能会有所不同。我将您的问题解释为用户有一个词 "orange" 并且他想知道哪些文档包含相关概念,例如 "tree" 或 "juice" 或 "California"。
如果您正在寻找文档之间的相似性,那么您就是在描述主题模型的用例。Latent Dirichlet Allocation是最基本的主题模型,也是LDA的缩写,但不一样。
LDA直觉
您可以将 LDA 视为非结构化文本数据的 PCA。
它从文档中提取“潜在”主题——我不会在这里详细介绍,但本质上它会检查哪些词在不同文档中不断弹出,然后将它们分组为“主题”。
示例:关于橘子的文档也更有可能包含“树”或“果汁”等词,而关于汽车的文档可能包含“汽油”和“发动机”——如果您使用足够多的文本集合,您将能够使用一些相似性度量(我会选择软余弦相似性)告诉关于从关于橙汁的文档中提取的文档,您将能够判断出一篇关于橙子运输成本的文章是关于两者的。重要的是,它还为主题分配了单词,因此“橙色”在“橙色和相关内容”主题中的加载量较高,而在汽车主题中的加载量较低 - 因为颜色可能与汽车的讨论较少,以及关于橙色物流可能很少见。
实施(非常粗略的指导方针)
假设我对您的项目的假设(主要是这就是您想要的并且您拥有原始文档,并且拆分为三个数据框并不重要),这是一种解决方法:
野外应用
您可以查看JSTOR 文本分析器,它完全符合我解释您的用例的方式。您上传了一个文档,它返回了类似的文档。(它使用LDA)
包:例如lda或topicmodels,还有其他具有此功能的包。
(旁注:首字母缩写词 LDA 是我偶然发现这篇文章的原因......)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句