使用正则表达式提取 r ngram

2024-03-28

卡尔·布罗曼的帖子:https://kbroman.wordpress.com/2015/06/22/randomized-hobbit-2/ https://kbroman.wordpress.com/2015/06/22/randomized-hobbit-2/让我玩正则表达式和 ngram 只是为了好玩。我尝试使用正则表达式来提取 2-grams。我知道有解析器可以执行此操作,但对正则表达式逻辑感兴趣(即,这是我未能满足的自我挑战)。

下面我给出一个最小的例子和所需的输出。我的尝试中的问题有两个:

  1. 克(单词)被消耗掉并且无法用于下一次传递。我怎样才能使它们可用于第二次传递?(例如,我想要like可用于like toast在它之前已经被消耗之后I like)

  2. 我无法使单词之间的空格不被捕获(请注意输出中的尾随空格,即使我使用了(?:\\s*)). 我怎样才能不捕获第 n 个(在本例中是第二个)单词上的尾随空格?我知道这可以简单地通过以下方式完成:"(\\b[A-Za-z']+\\s)(\\b[A-Za-z']+)"对于 2-gram,但我想将解决方案扩展到 n-gram。 PS我知道的\\w但我不认为下划线和数字是单词部分,但确实考虑'作为单词的一部分。

MWE:

library(stringi)

x <- "I like toast and jam."

stringi::stri_extract_all_regex(
    x,
    pattern = "((\\b[A-Za-z']+\\b)(?:\\s*)){2}"
)

## [[1]]
## [1] "I like "    "toast and "

期望的输出:

## [[1]]
## [1] "I like"  "like toast"    "toast and"  "and jam"

这是使用基本 R 正则表达式的一种方法。这可以轻松扩展以处理任意 n 元语法。诀窍是将捕获组放入积极的前瞻断言中,例如,(?=(my_overlapping_pattern))

x <- "I like toast and jam."
pattern <- "(?=(\\b[A-Za-z']+\\b \\b[A-Za-z']+\\b))"
matches<-gregexpr(pattern, x, perl=TRUE)
# a little post-processing needed to get the capture groups with regmatches
attr(matches[[1]], 'match.length') <- as.vector(attr(matches[[1]], 'capture.length')[,1])
regmatches(x, matches)

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

使用正则表达式提取 r ngram 的相关文章

  • 如何在 R 组内的两个变量的组合上选择具有特定值的行

    这是我之前提出的 R 问题的扩展 如何在R中选择组内具有特定值的行 https stackoverflow com questions 55853841 how to select rows with certain values with
  • 将选择标准添加到 read.table

    让我们采用以下我导入的数据集的简化版本read table a lt as data frame c M M F F F b lt as data frame c 25 22 33 17 18 df lt cbind a b colname
  • 是否可以在 R 中为 data.frame 命名别名

    使用某些数据标准时 使用多种方法来查看 data frame 的列会更简单 作为一个具体示例 在使用 SDTM 数据进行临床试验时 每种数据类型 如实验室或生命体征 都有一列时间点 实验室名称为 LBPT 生命体征名称为 VSTPT 理想情
  • 在批处理模式下运行 R - 打印到屏幕?

    跑步时 R CMD BATCH options filename r 我想控制输出的打印位置 我可以使用以下命令抑制 Rout 文件的创建 R CMD BATCH options filename r dev null 但是否可以将输出直接
  • 如何绘制两个 ggplot 密度分布之间的差异?

    我想使用 ggplot2 来说明两个相似密度分布之间的差异 这是我拥有的数据类型的玩具示例 library ggplot2 Make toy data n sp lt 100000 n dup lt 50000 D lt data fram
  • R 忽略空值的矩阵列的成对比较

    我有一个数组 我想获取它之间的相似度的度量values在每一列中 我的意思是我希望比较数组的成对列之间的行 并在它们的值匹配时增加一个度量 对于两列来说 所得的测量值最大值将完全相同 本质上我的问题与这里讨论的相同 R 两两比较矩阵中的所有
  • 如何在闪亮进度条的详细消息中添加换行符?

    有没有办法在闪亮的进度条消息中添加换行符 n or br 似乎不起作用 我正在尝试将我的一个旧代码转换为一个闪亮的应用程序 该代码基本上是一个接一个地调用许多函数 所有这些函数都需要一些时间来执行 从应用程序中 我想知道哪些功能已经执行以及
  • 循环更改多个数据帧

    例如 我有这三个数据集 就我而言 它们更多并且有很多变量 data frame1 lt data frame a c 1 5 3 3 2 b c 3 6 1 5 5 c c 4 4 1 9 2 data frame2 lt data fra
  • 正则表达式查找 Java 字符串中前 8 位数字的第一次出现

    这是我的字符串20161011 我想得到第一个字符串20161011 我正在使用 s 0 9 s 但是它不起作用 有人可以建议正确的用法吗 顺便说一句 我想检索的第一个字符串是格式的日期yyyymmdd 我不需要验证日期格式 因为它已经过预
  • 无法使用include_graphics在Rmarkdown中插入png(错误:文件不是PNG格式)

    这个错误很奇怪 当我编织文档时 出现以下错误 Quitting from lines 42 43 sigminer doc Rmd Error in png readPNG path native TRUE info TRUE file i
  • 使用 Visual Studio 构建 R 包 (C API)

    我正在尝试使用 Visual Studio 构建一个简单的 R 包 这是我的代码 include
  • 如何在 dplyr 中使用切片来保留 R 中具有 NA 值的行

    我有以下数据集 我想知道每个组的最小单词 如果没有最小单词 它是 NA 我仍然想显示它 df data frame key c A A B B C word c 1 2 3 5 NA df gt group by key gt slice
  • 列表列中的设置操作

    我正在尝试做集合运算在存储在列表列中的向量之间 例如this https stackoverflow com questions 38712196 text file to dataframe with a list column DT l
  • 自动化 RStudio 处理 RMarkdown?

    我有一个 RMarkdown 文件 用于生成漂亮的 HTML 报告 问题是 我希望能够自动化它 以便它可以在无头服务器上运行 因此 不会有人启动 Rstudio 并按下 knithtml 按钮 而且 Rstudio 似乎正在做很多额外的魔法
  • 不使用apply函数对data.table的每一行进行操作的方法

    我在下面写了一个简单的函数 mcs lt function v ifelse sum diff sort v gt 6 gt 0 NA sd v 它应该采用一个向量 对其进行排序 然后检查每个连续差异中是否存在大于 6 的差异 如果差值大于
  • 使用 R 迭代读取、操作多个 Excel 文件并将它们附加到一个数据帧中

    在一个目录下 我有多个具有相似格式的excel文件 您可以从以下位置下载示例文件 here https www dropbox com s ho3visres55kpoy test zip dl 0 我需要 循环文件和read excel
  • 运行 R.exe 会创建临时文件吗?

    我在想 是否启动 R exewindows创建临时文件并 是否解释类似x lt 5写入那些临时文件 如果创建了临时文件 它们存储在哪里 如果我启动多个 R exe 实例会发生什么情况 他们会共享并覆盖彼此的临时文件吗 R 的每个实例都有自己
  • 从 foreach 循环赋值

    我想并行化一个循环 例如 td lt data frame cbind c rep 1 4 2 rep 1 5 rep 1 10 2 names td lt c val id res lt rep NA NROW td for i in l
  • 将值添加到 rCharts hPlot 工具提示

    我想通过 rCharts 向标准 Highcharts 工具提示添加一些额外的值 示例代码 require rCharts df lt data frame x c 1 5 y c 5 1 z c A B C D E name c K L
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p

随机推荐