Извлечение POS-тегов в R с помощью - PullRequest
0 голосов
/ 14 мая 2018

В моем наборе данных я пытаюсь создать переменные, содержащие количество существительных, глаголов и прилагательных соответственно для каждого наблюдения.Используя пакет openNLP, мне удалось продвинуться так далеко:

s <- paste(c("Pierre Vinken, 61 years old, will join the board as a ",
             "nonexecutive director Nov. 29.\n",
             "Mr. Vinken is chairman of Elsevier N.V., ",
             "the Dutch publishing group."),
           collapse = "")
s <- as.String(s)
s

sent_token_annotator <- Maxent_Sent_Token_Annotator()
word_token_annotator <- Maxent_Word_Token_Annotator()
a2 <- annotate(s, list(sent_token_annotator, word_token_annotator))
pos_tag_annotator <- Maxent_POS_Tag_Annotator()
pos_tag_annotator
a3 <- annotate(s, pos_tag_annotator, a2)
a3
a3w <- subset(a3, type == "word")
a3w

Это дает мне вывод:

id type     start end features
1 sentence     1  84 constituents=<<integer,18>>
2 sentence    86 153 constituents=<<integer,13>>
3 word         1   6 POS=NNP
4 word         8  13 POS=NNP
5 word        14  14 POS=,

И т. Д.

Мой вопрос таков:как мне извлечь, например, количество существительных на одно наблюдение, чтобы я мог использовать это для дальнейшего анализа.

Спасибо!

1 Ответ

0 голосов
/ 14 мая 2018

Я не использую openNLP, но использую различные пакеты для маркировки POS.Если у кого-то есть ответ для openNLP, который может вам помочь, это было бы здорово.

Но я дам вам решение, используя udpipe.Это может оказаться полезным.

s <- paste(c("Pierre Vinken, 61 years old, will join the board as a ",
             "nonexecutive director Nov. 29.\n",
             "Mr. Vinken is chairman of Elsevier N.V., ",
             "the Dutch publishing group."),
           collapse = "")

library(udpipe)

if (file.exists("english-ud-2.0-170801.udpipe")) 
  ud_model <- udpipe_load_model(file = "english-ud-2.0-170801.udpipe") else {
    ud_model <- udpipe_download_model(language = "english")
    ud_model <- udpipe_load_model(ud_model$file_model)
}

x <- udpipe_annotate(ud_model, s)
x <- as.data.frame(x)
table(x$upos)

  ADJ   ADP   AUX   DET  NOUN   NUM PROPN PUNCT  VERB 
    2     2     2     3     6     2     8     5     1 

edit: количество предложений:

table(x$sentence_id, x$upos)
    ADJ ADP AUX DET NOUN NUM PROPN PUNCT VERB
  1   2   1   1   2    3   2     3     3    1
  2   0   1   1   1    3   0     5     2    0

Когда вы создаете data.frame из x после аннотаций, у вас есть доступ к doc_id, para_id, Предложение_ и т. д. и т. д. Вы можете создать целый ряд статистических данных для каждого документа / предложения и т. д. Виньетки дают хороший обзор того, что возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...