r - 使用 R,正则表达式在语料库中查找押韵词
问题描述
我有以下语料库:
corpus_rhyme <- c("helter-skelter", "lovey-dovey", "riff-raff", "hunter-gatherer",
"day-to-day", "second-hand", "chock-a-block")
在所有这些词中,我只需要像“helter-skelter”、“lovey-dovey”和“chock-a-block”这样的词,它们是押韵的重复词,辅音发生了变化。它们通常用连字符拼写,并且在元素之间可能有中间部分,例如“chock-a-block”中的“a”。我只需要找到具有相同音节数的押韵重复表达。例如,虽然“phoney-baloney”是押韵的重复词,但我不需要它。
我正在使用以下代码来查找押韵重复项:
rhyme<- grep("\\b(\\w*)(\\w{2,}?)-(\\w{1,}?-)?\\w*\\2\\b", corpus_rhyme,
ignore.case = TRUE, perl = TRUE, value = TRUE)
此代码产生太多误报。输出如下:
rhyme
[1] "helter-skelter" "lovey-dovey" "riff-raff" "hunter-gatherer" "day-to-day" "second-hand"
[7] "chock-a-block"
我手动筛选出这些误报,这需要太多时间。谁能建议这行代码的更好版本以减少误报的数量?例如,出现“riff-raff”是因为我希望在重复表达式的末尾至少有 2 个最后的字母相同,否则我会错过像“rat-tat”这样的表达式。但是我们是否可以在这段代码中指定这两个字母必须彼此不同,以便找到“rat-tat”(“a”与“t”不同),但找到“riff-raff”(“f”和“f”是一样的)不出现?另一个可能的改进:我怎样才能摆脱两个元素完全相同的“日常”之类的词?我只需要在初始辅音上有差异的押韵重复词。
解决方案
如果第一个单词的后三个或更多字母与最后一个单词的后三个或更多字母相同是普遍现象,那么您可以尝试以下操作:
grep(".*(\\w{3,})-([aeiou]-)?(\\w+)(\\1)", corpus_rhyme,ignore.case = TRUE,value=TRUE)
#[1] "helter-skelter" "lovey-dovey" "chock-a-block"
推荐阅读
- python - Pyinstaller 编译的可执行文件失败,退出代码为 139
- c# - 如何在 Redis 缓存中添加/更新/删除值
- hibernate - 本机查询似乎没有看到 hql 查询 db 变化
- node.js - 在使用 takeUntil() 和 Observable.fromEvent() 方法方面需要帮助
- r - 在 R 中重新创建各种非参数 ANCOVA 分析
- python - 通过查询将具有相同 ForeignKey 字段的多行组合起来
- python - 动态域在odoo9中不能正常工作
- reactjs - 反应本机页面上带有电话号码的电话图标
- python - Pandas 是否有“承包”窗口功能
- mysql - 如何将 MySQL 数据库的结果放在 Node.js 中的变量中?