按列计算POS标签

时间:2017-05-08 10:08:59

标签: r nlp text-analysis

我正在尝试连续统计所有词性标签并总结。

到目前为止,我达到了两个输出:

1)/ DT问题/ NN是/ VBD,/ /什么/ WP是/ VBP你/ PRP去/ VBG到/ TO切/ VB?/。

2)c(“DT”,“NN”,“VBD”,“,”,“WP”,“VBP”,“PRP”,“VBG”,“TO”,“VB”,“。” )

在这个特定的例子中,理想的输出是:

        DT  NN  VBD  WP  VBP  PRP   VBG   TO   VB
1 doc   1   1    1   1    1    1     1     1    1

但是因为我想在数据帧中为整列创建它,我想在列中看到0个值,这对应于在这个句子中没有使用的POS标记。

示例:

1 doc = "The/DT question/NN was/VBD ,/, what/WP are/VBP you/PRP going/VBG to/TO cut/VB ?/" 

2 doc = "Response/NN ?/."

输出:

        DT  NN  VBD  WP  VBP  PRP   VBG   TO   VB
1 doc   1   1    1   1    1    1     1     1    1
2 doc   0   1    0   0    0    0     0     0    0

我现在做了什么:

library(stringr)
#Spliting into sentence based on carriage return

s <- unlist(lapply(df$sentence, function(x) { str_split(x, "\n")     }))

library(NLP)
library(openNLP)

tagPOS <-  function(x, ...) {
s <- as.String(x)
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)
}

result <- lapply(s,tagPOS)
result <- as.data.frame(do.call(rbind,result))

这就是我如何达到开头描述的输出

我试过计算这样的事件:     出现&lt; -as.data.frame(table(unlist(result $ POStags)))

但它计算整个数据帧的出现次数。我需要为现有数据框创建新列,并在第一列中计算出现次数。

有人能帮帮我吗? :(

0 个答案:

没有答案