Создание матрицы характеристик документа из списка извлеченных фраз после использования фразеомашины (R) - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть вложенный список с фразами после применения phrasemachine().Теперь я хотел бы создать матрицу элементов документа, в которой документы (пользователь) находятся в первом столбце, а все элементы - в виде оставшихся столбцов с частотой использования каждого пользователя в ячейках.

library(rJava)
library(phrasemachine)
library(quanteda)

#creating dummy data
id <- c(1:2)
text <- c("Election day is coming up and I am super excited. Election day. Wooho. I voted President Obama.", "School is boring. Partying is cool. Happy Birthday to me. When is Election Day?")
test <- data.frame(id, text)
test$text <- as.character(test$text)

corpus_test <- corpus(test[["text"]], docnames = test[["id"]])
tokens_test <- tokens(corpus_test)
phrases_test <- phrasemachine(tokens_test, minimum_ngram_length = 2, maximum_ngram_length = 3, return_phrase_vectors = TRUE, return_tag_sequences = TRUE)
phrases_test

# > phrases_test
# [[1]]
# [[1]]$phrases
# [1] "Election_day"    "Election_day"    "President_Obama"
# 
# [[1]]$tags
# [1] "NN" "NN" "NN"
# 
# 
# [[2]]
# [[2]]$phrases
# [1] "Happy_Birthday" "Election_Day"  
# 
# [[2]]$tags
# [1] "AN" "NN"

Это вывод, который я ищу (матрица возможностей документа):

# user    Election_day    President_Obama   Happy_Birthday
# 1       2               1                 0
# 2       1               0                 1 

Я пытался использовать lapply, но фразы каждого пользователя имеют разные размеры,это не сработает.

Вот что я попробовал:

library(plyr)
phrases_user <- laply(phrases_test, function(x) laply(x, identity)) #Error: Results must have the same dimensions.

library(dplyr)
phrases_user <- lapply(phrases_test, `[`, "phrases")

После выяснения проблемы с извлечением фраз для идентификатора, я полагаю, мне нужно будет сделать следующее:

corpus_test_2 <- corpus(phrases_user[["phrases"]], docnames = phrases_user[["id"]])
dfm_test <- dfm(corpus_test_2)

Может кто-нибудь помочь?:)

1 Ответ

0 голосов
/ 18 декабря 2018

Пример использования udpipe с фразеашиной

library(udpipe)
text <- c("Election day is coming up and I am super excited. Election day. Wooho. I voted President Obama.", "School is boring. Partying is cool. Happy Birthday to me. When is Election Day?")
x <- udpipe(text, "english")
x$tags <- as_phrasemachine(x$upos, type = "upos")

keyw <- keywords_phrases(x$tags, 
                         term = x$token, pattern = "(A|N)*N(P+D*(A|N)*N)*", 
                         is_regex = TRUE, detailed = FALSE)
head(keyw)
x$term <- txt_recode_ngram(x$token, 
                           compound = keyw$keyword, 
                           ngram = keyw$ngram)
dtm <- document_term_frequencies(x, document = "doc_id", term = c("term", "token"))
dtm <- document_term_matrix(dtm)

Обратите внимание, что вас также может заинтересовать использование вывода для анализа зависимостей.Вы можете извлечь выражения из нескольких слов на основе поля dep_rel в выводе udpipe - если оно говорит «фиксированный / плоский / составной», которые являются выражениями из нескольких слов.Определение «фиксированный / плоский / составной» определяется как http://universaldependencies.org/u/dep/index.html.

...