R Quanteda:当一个短语中有任意数量的单词时,如何查找两个或多个单词的模式?
我想使用包R Quanteda:当一个短语中有任意数量的单词时,如何查找两个或多个单词的模式?,r,dictionary,glob,quanteda,R,Dictionary,Glob,Quanteda,我想使用包{quanteda}和tokens\u lookup()函数将R中文本中的一些模式与默认的valuetype=“glob”匹配。这种模式是一个单词与位于同一短语中任何位置的第二个单词相关联 library(quanteda) text <- c(d1 = "apples word word word oranges", d2 = "apples oranges", d3 = "oranges and apples") dict &l
{quanteda}
和tokens\u lookup()
函数将R中文本中的一些模式与默认的valuetype=“glob”
匹配。这种模式是一个单词与位于同一短语中任何位置的第二个单词相关联
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()
库(quanteda)
文本%
dfm()
将此字典应用于上面的标记化文本将产生0-1-0的结果,而我预期的结果是1-1-0
所以我的问题是,在全局模式匹配中,空格是什么,星号不应该匹配所有的东西,包括空格吗?更一般地说,如何将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()
text%
dfm()
tokens()
空格上的段,以及tokens\u lookup()
查找标记中的模式-或标记序列中的模式(如果模式在字典值中包含空格)。要使用glob匹配来获取两个更具体的模式之间的任何标记,可以指定一个*
作为该模式的一部分。(从技术上讲,带空格的模式被解析成称为quanteda speak“短语”的序列。请参见?短语)
因此,要稍微修改您的示例:
库(“quanteda”)
##软件包版本:2.0.1
使用字典(list(fruits=c(“apple*”,“orange*”))的文本)
将生成2-2-2,而不是0-1-0Oh,对,但我想使用ngrams,其中指定了单词的组合。想象一下像“我讨厌苹果”、“苹果是我讨厌的东西”、“我喜欢苹果”这样的东西,基于此,你想过滤针对苹果的语句。你想看到什么结果?你期待d3的比赛吗?(因为顺序不同)不,实际上我只是希望前两个匹配,然后我想我可以在橙子优先的情况下切换顺序。顺便说一句,感谢大家回答我的问题!Quanteda是一个非常酷的软件包!再次感谢你,这真的很有帮助。但是,如果我想匹配一个可以是任意长度并且包含这两个单词的短语(无论是双字符还是两个单词以特定顺序同时出现在一个短语中),该怎么办?在正则表达式模式匹配中,这不会是一个问题(请参阅上面的我的编辑)。但是,这不会跨越令牌,因此不会像我们实现parse tokens+parse模式然后将令牌序列与短语匹配的方法那样起作用。您必须在原始文本上使用逻辑正则表达式匹配来实现匹配。嗯,您确定这不起作用吗?在上面的示例中,至少对于正则表达式匹配来说,它似乎工作得很好(请参见“编辑”)what=“句子”
基本上应该保留句子结构,不是吗?