如何使用 Quanteda 和 kwic 进行模糊模式匹配?

2024-01-05

我有医生写的文本,我希望能够突出显示上下文中的特定单词(我在文本中搜索的单词之前 5 个单词和之后 5 个单词)。假设我想搜索“自杀”这个词。然后我将使用 quanteda 包中的 kwic 函数:

kwic(数据集,模式=“自杀”,窗口= 5)

到目前为止,一切都很好,但是我想考虑到打字错误的可能性。在这种情况下,我想允许使用三个不同的字符,并且对这些字符在单词中的位置没有限制。

是否可以使用 Quanteda 的 kwic 函数来做到这一点?

Example:

dataset <- data.frame("patient" = 1:9, "text" = c("On his first appointment, the patient was suicidal when he showed up in my office", 
                                  "On his first appointment, the patient was suicidaa when he showed up in my office",
                                  "On his first appointment, the patient was suiciaaa when he showed up in my office",
                                  "On his first appointment, the patient was suicaaal when he showed up in my office",
                                  "On his first appointment, the patient was suiaaaal when he showed up in my office",
                                  "On his first appointment, the patient was saacidal when he showed up in my office",
                                  "On his first appointment, the patient was suaaadal when he showed up in my office",
                                  "On his first appointment, the patient was icidal when he showed up in my office",
                                  "On his first appointment, the patient was uicida when he showed up in my office"))

dataset$text <- as.character(dataset$text)
kwic(dataset$text, pattern = "suicidal", window = 5)

只会给我第一个拼写正确的句子。


很好的问题。我们没有近似匹配作为“值类型”,但这对于未来的开发来说是一个有趣的想法。同时,我建议使用以下命令生成固定模糊匹配的列表base::agrep()然后匹配这些。所以这看起来像:

library("quanteda")
## Package version: 1.5.2

dataset <- data.frame(
  "patient" = 1:9, "text" = c(
    "On his first appointment, the patient was suicidal when he showed up in my office",
    "On his first appointment, the patient was suicidaa when he showed up in my office",
    "On his first appointment, the patient was suiciaaa when he showed up in my office",
    "On his first appointment, the patient was suicaaal when he showed up in my office",
    "On his first appointment, the patient was suiaaaal when he showed up in my office",
    "On his first appointment, the patient was saacidal when he showed up in my office",
    "On his first appointment, the patient was suaaadal when he showed up in my office",
    "On his first appointment, the patient was icidal when he showed up in my office",
    "On his first appointment, the patient was uicida when he showed up in my office"
  ),
  stringsAsFactors = FALSE
)
corp <- corpus(dataset)

# get unique words
vocab <- tokens(corp, remove_numbers = TRUE, remove_punct = TRUE) %>%
  types()

The use agrep()生成最接近的模糊匹配 - 在这里我运行了几次,增加max.distance每次都会稍微偏离默认值 0.1。

# get closest matches to "suicidal"
near_matches <- agrep("suicidal", vocab,
  max.distance = 0.3,
  ignore.case = TRUE, fixed = TRUE, value = TRUE
)
near_matches
## [1] "suicidal" "suicidaa" "suiciaaa" "suicaaal" "suiaaaal" "saacidal" "suaaadal"
## [8] "icidal"   "uicida"

然后,使用它作为pattern论证kwic():

# use these for fuzzy matching
kwic(corp, near_matches, window = 3)
##                                                        
##  [text1, 9] the patient was | suicidal | when he showed
##  [text2, 9] the patient was | suicidaa | when he showed
##  [text3, 9] the patient was | suiciaaa | when he showed
##  [text4, 9] the patient was | suicaaal | when he showed
##  [text5, 9] the patient was | suiaaaal | when he showed
##  [text6, 9] the patient was | saacidal | when he showed
##  [text7, 9] the patient was | suaaadal | when he showed
##  [text8, 9] the patient was |  icidal  | when he showed
##  [text9, 9] the patient was |  uicida  | when he showed

基于类似的解决方案还有其他可能性,例如模糊连接 or 字符串分布包,但这是一个简单的解决方案base应该工作得很好的包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Quanteda 和 kwic 进行模糊模式匹配? 的相关文章

  • 绘制 Cox 回归的 Kaplan-Meier 图

    我使用 R 中的以下代码设置了一个 Cox 比例风险模型来预测死亡率 添加协变量 A B 和 C 只是为了避免混淆 即年龄 性别 种族 但我们真正对预测变量 X 感兴趣 X 是一个连续变量 cox model lt coxph Surv t
  • 为什么 sapply 的缩放速度比样本大小的 for 循环慢?

    假设我想采用向量 X 2 1 N 并将 e 计算为每个元 素的指数 是的 我认识到最好的方法就是通过向量化 exp X 但这样做的目的是将 for 循环与 sapply 进行比较 我通过逐步尝试三种方法 一种使用 for 循环 两种以不同方
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • 在 RcppArmadillo 中将列向量乘以数值标量

    我在编译这个简单的程序时遇到一些麻烦c 代码使用Rcpp和RcppArmadillo包裹 采用以下简单示例 将矩阵的每一列乘以数值标量 code lt arma mat out Rcpp as
  • R - 重塑 - 熔化错误

    我正在尝试融化数据框 但出现了这个奇怪的错误 有什么想法吗 str zx7 data frame 519 obs of 5 variables calday new Date format 2011 01 03 2011 01 04 201
  • R,使用具有两种以上可能性的二项式分布

    我知道这可能是基本的 但我似乎有一个心理障碍 假设您想要计算在一个骰子上掷出 4 5 或 6 的概率 在 R 中 这很简单 sum 1 6 1 6 1 6 这给出了 1 2 这是正确答案 然而 我内心深处 可能应该保留的地方 认为我应该能够
  • R Shinydashboard 自定义 CSS 到 valueBox

    我一直在尝试将 valueBox 的颜色更改为自定义颜色 超出 validColors 中可用的颜色 但一直无法这样做 我知道有一种方法可以使用标签来包含自定义 CSS 但是我无法将它们放在正确的位置 ui lt dashboardPage
  • 在网格中制作一个矩形图例,并标记行和列

    我有一个 ggplot 我将因子映射到填充和 alpha 如下所示 set seed 47 the data lt data frame value rpois 6 lambda 20 cat1 rep c A B each 3 cat2
  • R在Windows平台Rstudio上打印data.frames中的UTF-8代码

    当数据框中存在UTF 8字符时 将无法正常显示 例如 以下内容是正确的 gt U6731 1 朱 但是当我将其放入数据框中并打印出来时 它是 gt data frame x U6731 x 1
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • R - 基于列名称的子集

    我的数据框有超过 120 列 变量 我想根据列名称创建子集 例如 我想创建一个子集 其中列名称包含字符串 心情 这可能吗 我一般用 SubData lt myData grep whatIWant colnames myData 我很清楚
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • 条件和分组 mutate dplyr

    假设我有以下每个抽屉库存增加的数据 gt socks year drawer nbr sock total 1990 1 2 1991 1 2 1990 2 3 1991 2 4 1990 3 2 1991 3 1 我想要一个二进制变量来标
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 使用data.table进行聚合

    经过 SO 用户的多次建议后 我终于尝试将我的代码转换为使用data table library data table DT lt data table plate paste0 plate rep 1 2 each 5 id rep c
  • 更改绘图区域背景颜色

    我想使用我们公司的颜色在 R 中制作一个图表 这意味着所有图表的背景应为浅蓝色 但绘图区域应为白色 我正在寻找答案 发现绘制一个矩形就可以完成这项工作 几乎 然而 绘图区域现在是白色的 并且图形不再可见 这可能吗 getSymbols SP
  • 更改ggplot2中的字体

    曾几何时 我改变了我的ggplot2字体使用windowsFonts Times windowsFont TT Times New Roman 现在 我无法摆脱这一切 在尝试设置family in ggplot2 theme 当我用不同的字

随机推荐

  • Foldl 和 Foldr 如何工作(以示例为例)?

    好吧 我是计划 球拍 lisp 的新手 我正在练习创建自己的函数 语法和递归 所以我想制作自己的函数 语法和递归foldl and foldr完全执行预定义版本功能的函数 我无法做到这一点 因为我只是不明白这些功能是如何工作的 我在这里看到
  • 在 IIS 7 中使用 myfakesite.com 而不是 localhost

    我按照以下步骤操作 我所做的是编辑这个文件 C Windows System32 drivers etc hosts 我添加了一行 127 0 0 1 myfakesite com 然后我进入 Facebook 编辑应用程序页面 特别是 网
  • xslt 将所有节点复制到变量

    如何将包含一组节点的另一个变量的副本分配给变量 这是我的代码
  • 我可以避免向未登录的客户端提供所有js吗?

    在构建 Meteor 应用程序时 是否可以在用户通过身份验证之前不向客户端提供 加载所有生成的 JavaScript 如果没有人能看到我的模板 模型 助手等 我会更高兴 澄清 这并不是要把东西放在 server 下 或者用 pub sub
  • 限制链接对象的全局符号的范围

    我的存档文件中有一个 C 库 clib a 我已经为它编写了一个 C 包装器 cpp o 并想将其用作静态库 ar cTrvs cppwrap a clib a cpp o 链接到此的代码将无法使用来自的内容clib a直接 除非包含正确的
  • 如何从远程(openshift)下载文件/文件夹到本地系统

    如何使用 rhc 客户端工具下载 备份或将文件副本从 openshift 远程文件夹保存到我的本地系统文件夹中 或者除了 rhc 客户端工具之外还有其他方法可以将其备份到我的本地系统吗 另外 有没有办法将整个文件夹从远程 openshift
  • JSON 中位置 1 处出现意外标记 o

    我在下面的代码块中不断收到此错误 function openWebsocket url var ws ws websocket url ws onOpen function event console log Websocket conne
  • 编写更好的正则表达式以不使用惰性重复量词

    我有一个正则表达式
  • asp.net c# 复选框被选中吗?

    如何确定复选框是否被选中 非常困惑为什么这不起作用 就是这么简单 在我的网络表单上
  • 如何在 Visual Studio 2010 中从网站创建解决方案文件 (.sln)

    我将在这里使用 Visual Studio 术语 我有一个网站位于 Visual Studio 2010 Projects My Project Code WebSite 我想为此网站创建一个解决方案文件 sln 文件 该文件位于 Visu
  • PHP:确保数组仅包含来自某个类的对象

    在我的一些设置器中 我传递了一个对象数组 我想确保它只包含给定类的实例 阅读文档 这就是我所做的 class Foo public function construct class ErrorFoo public function cons
  • 自定义二进制文件的惯用 C# 反序列化?

    问候 执行二进制自定义格式的序列化 反序列化的最惯用方法是什么 例如 如何读取具有一组以字节为单位指定的标头 例如 4 4 16 4 8 8 4 16 的文件 没有填充 使用混合整数 byte types 换句话说 在指定结构时 如何实现与
  • Bash 在什么情况下不执行分词和通配符? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这些情况下 Bash 不会在通配符中执行分词 赋值的 LHS 或 RHS 索引数组除外 var value simple varia
  • 如何将不使用空格的泰语句子拆分为单词?

    如何从泰语句子中拆分单词 英语中我们可以按空格分割单词 例子 I go to school 分割 I go to school 仅通过查看空间来分割 但是泰语没有空格 所以我不知道该怎么办 示例 spit 从 txt 文件到 输出另一个 t
  • C++:返回 C 字符串的最快方法

    我有一个简单的函数 它接受一个字符并返回一个字符串 在 C 中它看起来像 char get string char c switch c case A return some string Case B return some other
  • 捕获AsyncTask的异常。需要思考

    我想在 doInBackground 中捕获线程的异常并在 onPostExcecute 中打印错误消息 问题是我在 onPostExecute 中没有 Throwable 对象 如何在非 UI 线程中捕获异常 and 在 UI 线程中打印
  • 检测用户是否有打印能力?

    客户要求在其网站上添加打印按钮 并希望对没有打印能力的用户 例如 用户 隐藏该按钮 大多数移动设备 有没有办法通过JavaScript来检测客户端是否具有打印功能 该要求是有缺陷的 因为大多数用户代理可以 打印 并且 UA 是否可以打印的知
  • 查找对象数组中所有匹配的元素[重复]

    这个问题在这里已经有答案了 我有一个对象数组 我正在像这样的数组中搜索 let arr name string 1 arrayWithvalue 1 2 other that name string 2 arrayWithvalue 2 o
  • 在 gnuplot 中绘制两个轴

    是否可以在 gnuplot 中绘制两条曲线 其中有两个相应的轴 每个轴都有不同的比例 例如 y x 2 and y x 4在同一张图中 当用相同的比例绘制时 它们的变化足以让人 不舒服 您可以自动处理轴 而无需自己缩放它们并保持自动缩放 s
  • 如何使用 Quanteda 和 kwic 进行模糊模式匹配?

    我有医生写的文本 我希望能够突出显示上下文中的特定单词 我在文本中搜索的单词之前 5 个单词和之后 5 个单词 假设我想搜索 自杀 这个词 然后我将使用 quanteda 包中的 kwic 函数 kwic 数据集 模式 自杀 窗口 5 到目