【发布时间】:2020-05-28 18:55:35
【问题描述】:
我想使用包{quanteda} 和默认valuetype="glob" 的tokens_lookup() 函数来匹配R 中文本中的一些模式。该模式将是一个单词与位于同一短语中任意位置的第二个单词相关联。
library(quanteda)
text <- c(d1 = "apples word word word oranges",
d2 = "apples oranges",
d3 = "oranges and apples")
dict <- dictionary(list(fruits = c("apple* orange*")))
tokens(text) %>%
tokens_lookup(dict, valuetype = "glob") %>%
dfm()
将此字典应用到上面的标记化文本会产生 0-1-0 的结果,而我希望得到 1-1-0。
所以我的问题是,glob 模式匹配中的空格是什么,星号不应该匹配包括空格在内的所有内容?更一般地,如何将 d1、d2 和可能的 d3 与一个相同的模式匹配?
编辑:
在正则表达式模式匹配中,这不是什么大问题。示例:
text <- c(d1 = "apples word word word oranges",
d2 = "apples oranges")
dict <- dictionary(list(fruits = c("apples.*oranges")))
tokens(text, what="sentence") %>%
tokens_lookup(dict, valuetype = "regex") %>%
dfm()
【问题讨论】:
-
使用
dictionary(list(fruits = c("apple*", "orange*")))将得到 2-2-2,而不是 0-1-0 -
哦,对了,但我想使用您指定单词组合的 ngram。想象一下像“我讨厌苹果”、“苹果是我讨厌的东西”、“我喜欢苹果”之类的事情,然后您想要过滤出针对苹果的陈述。
-
你想看到什么结果?你期待 d3 的比赛吗? (因为顺序不同)
-
不,实际上我只是希望前两个匹配,然后我认为我可以切换顺序以处理橙色优先的实例。
-
感谢大家回答我的问题,顺便说一句! Quanteda 是一个非常酷的软件包!
标签: r dictionary glob quanteda