r - 将数据框中的文本信息拆分为单个单词并检测它们是否是字典 R 的一部分
问题描述
我正在尝试编写一个脚本来检测未定义数量的单词中的一个单词是否是字典的一部分。
为了让这个问题更容易理解,我有以下数据:
Items | Descriptions |
-------------------------
Item1 | poster
Item2 | used cd music etc
Item3 | hckd herbal ingds.
Item4 | 823942 blc
所以我想做的是检查列描述,如果这些单词中的任何一个是字典或自创字符串向量的一部分。所以结果应该类似于:
Items | Descriptions | inDictionary
--------------------------------------------------
Item1 | poster | TRUE
Item2 | used cd music etc | TRUE
Item3 | hckd herbal ingds. | TRUE
Item4 | 823942 blc | FALSE
对于这个例子,我只是假设一个英文字典。在这种特定情况下,如果只有一个单词是字典的一部分,就足够了。
我已经尝试使用 qdapDictionaries 库和标记器来标记数据框单元格的内容,但我无法正确检查我有多个单词的单元格。
非常感谢您的帮助,
谢谢!
解决方案
由于我不知道您正在使用哪本词典,以下是您原则上如何执行此任务的说明:
数据:
df <- data.frame(Descriptions = c("cyber"," &%@","aah ingds.", "823942 blc"))
假设您使用GradyAugmented
来自 的字典library(qdapDictionaries)
,您可以将字典中的单词粘贴在一起,通过正则表达式交替标记将它们分开,|
并使用grepl
返回 TRUE 或 FALSE 的 来检查字典单词是否包含在任何df$Description
字符串中:
df$inDict <- grepl(paste0("\\b(", paste(GradyAugmented[1:100], collapse = "|"), ")\\b"), df$Descriptions)
结果:
df
Descriptions inDict
1 cyber TRUE
2 &%@ FALSE
3 aah ingds. TRUE
4 823942 blc FALSE
字典可能非常大,您可能会遇到内存问题。在这种情况下,您可以通过以下方式采取不同的路线%in%
:
df$inDict <- lapply(strsplit(df$Descriptions, " "), function(x) x %in% GradyAugmented)
这里的行是列表:
df$inDict <- lapply(strsplit(df$Descriptions, " "), function(x) x %in% GradyAugmented)
df
Descriptions inDict
1 cyber TRUE
2 &%@ FALSE
3 aah ingds. TRUE, FALSE
4 823942 blc FALSE, FALSE
希望这可以帮助。
推荐阅读
- c - 为字符串指针分配内存?
- python - 为什么if语句返回False?
- python - 如何绘制并排分组条形图
- ios - 有没有办法在 SwiftUI 中复制手势或处理它们并将它们传递给子视图?
- cors - Cloud Run Cloud Storage Cors 字体问题
- javascript - 如何将 React 表单状态从应用程序传递给多个组件(功能性)
- sql - 将字段设置为空时删除外键引用的表记录
- linux - 我是否需要在新内核中重新编译用户空间程序
- php - Imagick PHP - 为 AI 文件获取 DPI
- firebase - Firebase 函数的推送通知 - 迭代 onWrite 返回