У меня есть следующие функции для возврата глаголов в тексте, разделенных "|".Кто-нибудь знает, в чем проблема со второй функцией, которая дает неправильный результат?
> library(openNLP)
> library(NLP)
> tagPOS <- function(x, ...) {
+ s <- as.String(x)
+ if(s=="") return(list())
+ word_token_annotator <- Maxent_Word_Token_Annotator()
+ a2 <- Annotation(1L, "sentence", 1L, nchar(s))
+ a2 <- annotate(s, word_token_annotator, a2)
+ a3 <- annotate(s, Maxent_POS_Tag_Annotator(), a2)
+ a3w <- a3[a3$type == "word"]
+ POStags <- unlist(lapply(a3w$features, `[[`, "POS"))
+ POStagged <- paste(sprintf("%s/%s", s[a3w], POStags), collapse = " ")
+ list(POStagged = POStagged, POStags = POStags)
+ }
> verbs <-function(x) {
+ tagPOSx <- tagPOS(x)
+ scanx <- scan(text=as.character(x), what="character")
+ n <- length(scanx)
+ paste(scanx[(1:n)[grepl("VB", tagPOSx$POStags)]], collapse="|")
+ }
и теперь, как она работает:
x="hello Sir ,This is applicable to your system only correct ? ,because I
can see under affected products other things as well"
> verbs(x)
[1] "applicable|under"
, тогда как она должна возвращать:
is|correct|can|see