Dúvida TextRank

Oi pessoal! Tenho uns dados contendo ID e para respectiva ID um texto, são 2373 textos no total. Estou tentando obter as palavras chaves para cada texto, utilizando o textrank. No R tem um pacote implementado que possui o mesmo nome, e a função que pretendo utilizar é a textrank_keywords.

Meu data.frame tem a seguinte estrutura:
ID,texto,palavra

Na coluna palavra, tenho cada palavra contida em cada texto… Através da função unnest_tokens()

A questão é que a função (textrank_keywords), não se fixa em cada ID… Ela acaba gerando as keywords considerando todos os textos juntos…

Teria alguma maneira de eu conseguir que a função considerasse cada ID? Tentei fazer um loop mas não avancei muito…
A ideia seria ter o seguinte resultado, ou ao menos parecido…
ID,keyword

tem um code + mini BD pra servir de tiro inicial? daí dá pra ir testando juntos!

Oi Athos!
Sim, como posso compartilhar o arquivo por aqui?
Vou subir pro Google Sheets e compartilho o link…

pode ser… Ou pode ser em código tbm, por ex:

bd <- data.frame(x = c("Alô alô", "uma frase"), y = c(10, 100))
1 curtida

Oi Athos, na planilha abaixo tenho um exemplo do banco de dados inicial, antes de aplicar o unnest_tokens e separar palavra por palavra de cada texto… com a respectiva ID e o texto de cada ID…

Os textos já passaram por algum tratamento… retirada de stopwords, todo o texto em minuscula e retirada de acentuação, números, espaços extras.

um summrise por cada ID fica legal, ó:

library(tidyverse)
library(tidytext)
library(textrank)

bd <- tribble(
    ~ID,    ~Texto,
    1, 'incentivo participacao mulheres politica acao deve ser cumprida',
    2, "ultima sextafeira procurador geral republica augusto aras",
    3, "fato gerou burburinho nada fim semana politica",
    4, "mar baia formosa rio grande norte guarda campeao",
    5, "momento forte elevacao gastos endividamento"
) %>%
    unnest_tokens("Palavra", "Texto") %>%
    group_by(ID) %>%
    summarise(
        keywords = list(textrank::textrank_keywords(Palavra))
    )
#> `summarise()` ungrouping output (override with `.groups` argument)

bd
#> # A tibble: 5 x 2
#>      ID keywords  
#>   <dbl> <list>    
#> 1     1 <txtrnk_k>
#> 2     2 <txtrnk_k>
#> 3     3 <txtrnk_k>
#> 4     4 <txtrnk_k>
#> 5     5 <txtrnk_k>

## acessando um obj keywords
bd$keywords[[1]]
#> $terms
#> [1] "participacao" "ser"          "deve"        
#> 
#> $pagerank
#> $pagerank$vector
#>    incentivo participacao     mulheres     politica         acao         deve 
#>   0.08089667   0.14622746   0.13815362   0.13472224   0.13472224   0.13815362 
#>          ser     cumprida 
#>   0.14622746   0.08089667 
#> 
#> $pagerank$value
#> [1] 1
#> 
#> $pagerank$options
#> NULL
#> 
#> 
#> $keywords
#>        keyword ngram freq
#> 1 participacao     1    1
#> 2     deve-ser     2    1
#> 3          ser     1    1
#> 
#> $keywords_by_ngram
#>        keyword ngram freq
#> 1 participacao     1    1
#> 2         deve     1    1
#> 3          ser     1    1
#> 4     deve-ser     2    1
#> 
#> attr(,"class")
#> [1] "textrank_keywords"

Created on 2020-10-09 by the reprex package (v0.3.0)

1 curtida

Obrigado @Athos!!
Só mais uma dúvida… :sweat_smile:
Teria alguma maneira de eu retirar apenas um elemento de dentro dessa lista?
Exemplo: Pegar apenas o $keywords da lista keywords

faria o que voê precisa?

1 curtida

Sim, mas só pro caso do primeiro texto… Teria alguma maneira de pegar de todos os textos?

Ah, sim. De fato, bd$keywords é uma lista de R tão filha de Deus quanto qualquer! Daí vc pode usar como uma lista msm.

1 curtida