неверный результат в функциях POS-тегов для возврата глаголов текста - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующие функции для возврата глаголов в тексте, разделенных "|".Кто-нибудь знает, в чем проблема со второй функцией, которая дает неправильный результат?

> 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
...