R 按列统计POS标签

R 按列统计POS标签,r,nlp,text-analysis,R,Nlp,Text Analysis,我试着把所有的词性标签数一行,然后把它们加起来 到目前为止,我取得了两项成果: 1/DT问题/NN是/VBD,/,什么/WP是/VBP你/PRP去/VBG去/去切/VB?/ 2 cDT,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 但是,因为我想为dataf

我试着把所有的词性标签数一行,然后把它们加起来

到目前为止,我取得了两项成果:

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

2 cDT,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
但是,因为我想为dataframe中的整个列创建它,所以我想在一个列中也看到0个值,它对应于一个POS标记,而这个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))
这就是我如何达到最初描述的输出

我尝试过这样计算事件: 使用tm比较无痛:

虚拟数据

eta2:Corpus仅创建列df$标记的语料库,VectorSource假设数据中的每一行都是一个文档,因此dataframe df中的行顺序和DocumentTermMatrix中的文档顺序是相同的:我可以将df$ID cbind到输出dataframe上。我使用dplyr来实现这一点,因为我认为它会导致可读性最高的代码读取%>%as,然后:

require(dplyr)
result <- as.data.frame(as.matrix(dtm)) %>%
          bind_col(df$ID)

在添加所需输出和您迄今为止所做的尝试方面做得很好,但是您也可以提供df的示例吗?也可以查看tm::TermDocumentMatrix,使用您的邮资而不是文档中的实际单词来创建矩阵。关于tm,我也有相同的想法。今天晚些时候我会试试。非常感谢。关于df:问题是,你打算削减什么?完全失控了。我支持清洁煤技术。这就是我在每一句话中所做的——如果你现在正在思考我应该如何处理一个简单的三元组矩阵,请看编辑??!还有一个控制选项,你可以设置为不将邮资名称转换为小写。是的,那太好了!再次感谢你!还有一个问题。所以我尝试了一个小的数据集,效果很好,但现在我尝试了2500行,我有点困惑。我真的应该在这里指定所有行ID=cdoc1,doc2吗?但这将是2500美元。我是这样做的,ID=results$POSTags,但比下一个问题更重要的是,我还有很多姿势。我必须写一些像:df-Hm。。。这样做:df
corpus <- Corpus(VectorSource(df$tags))
#default minimum wordlength is 3, so make sure you change this
dtm <- DocumentTermMatrix(corpus, control= list(wordLengths=c(1,Inf)))

#see what you've done
inspect(dtm)

<<DocumentTermMatrix (documents: 2, terms: 9)>>
Non-/sparse entries: 10/8
Sparsity           : 44%
Maximal term length: 3
Weighting          : term frequency (tf)
Sample             :
    Terms
Docs dt nn prp to vb vbd vbg vbp wp
   1  0  1   0  0  0   0   0   0  0
   2  1  1   1  1  1   1   1   1  1
as.data.frame(as.matrix(dtm))

  nn dt prp to vb vbd vbg vbp wp
1  1  0   0  0  0   0   0   0  0
2  1  1   1  1  1   1   1   1  1
require(dplyr)
result <- as.data.frame(as.matrix(dtm)) %>%
          bind_col(df$ID)