【发布时间】:2021-11-08 21:57:16
【问题描述】:
我在c7 列中有这种类型的词性标记话语:
df <- data.frame(
c7 = c("um_UH I_PPIS1 was_VBDZ there_RL",
"that_DD1 's_VBZ me_PPIO1",
"when_RRQ was_VBDZ that_DD1",
"holy_JJ shit_NN1 does_VDZ it_PPH1 happen_VVI",
"what_DDQ kind_NN1 of_IO pants_NN2 is_VBZ that_DD1",
"are_VBR the_AT pictures_NN2 nice_JJ",
"does_VDZ n't_XX it_PPH1",
"no_UH you_PPY did_VDD n't_XX"))
我想匹配极性(或“是”/“否”)问题。除其他外,极性问题的一个条件是动词之前不(在一定距离处)有疑问词('who'、'what'等)或人称代词('I' , 'you' 等)或指示语('that')。我发现自己无法通过使用否定回溯来排除与此否定条件不匹配的话语。我可以排除它们的唯一方法是通过 positive lookbehind 在模式中匹配它们并使用grep 的参数invert = TRUE:
# pattern:
p1 <- "(?<=Q|_D|_P)(\\w{2,4})?\\s(['\\w]+\\s){0,3}['\\w]+_V(B|D|H).{1,2}\\s(n't_XX\\s)?(there|.{2,4}_(P|D))?"
# matching:
grep(p1, df$c7, value = TRUE, perl = TRUE, invert = TRUE)
[1] "holy_JJ shit_NN1 does_VDZ it_PPH1 happen_VVI" "are_VBR the_AT pictures_NN2 nice_JJ"
[3] "does_VDZ n't_XX it_PPH1"
有没有办法积极匹配极性问题?也就是说,是否有另一种方法来断言动词不能在问题词之前(以Q结尾的词性标签,代词(以P开头的标签),指示词(以@987654328开头的标签@) 等等?
【问题讨论】:
-
你可以用空格分割每个值,然后用下划线分割它们以制作更易于使用的数据框吗?
-
@camille 是:
df$c7x <- lapply(lapply(df$c7, function(x) unlist(str_extract_all(x, "([A-Z]+)"))), paste0, collapse = " ") -
您是要仅提取与条件匹配的令牌-POS 对,还是提取所有令牌-POS 对的条件为真的整行文本?如果是后者,我是否正确阅读了只有第 6 行完全匹配?
-
我想匹配整行文本。第 4、6 和 7 行应该匹配。
标签: r regex regex-lookarounds