library(tidyverse)
library(tidytext)
library(tm)
library(topicmodels)

1 Metodologia

El 17 de gener de 2022 vam cercar a Scopus els registres amb l’expressió “open science” al títol del document. L’equació de cerca emprada era: TITLE ("open science")

Vam recuperar 996 registres. Ens vam quedar amb 751 registres que tenien resum. La resta eren editorials o registres sense resum per alguna altra raó i van ser descartats.

Carreguem les dades:

data <- read.delim("open_science_abstracts.txt", header = TRUE, sep = "\t", quote="")

2 Evolució cronològica

Aquests són els anys de publicació dels articles:

ggplot(data) +
    geom_bar(aes(Year)) +
    scale_x_continuous(breaks = seq(2004, 2022, by = 1)) +
    labs(title = "Articles sobre ciència oberta", 
         x = "any de publicació",
         y = "nombre d'articles") 

3 Revistes de publicació

Aquestes són les revistes a les quals s’han publicat els articles (passar cap a la dreta pulsant “>” i passar de pàgina amb els números de la part inferior de la figura):

Els títols de revistes individuals no tenen gaire interès, però es podrien classificar les revistes per àrees temàtiques seguint la classificació de Scopus. El problema és que Scopus classifica moltes revistes en diverses categories temàtiques.

data %>% 
    count(Source, sort = TRUE)

4 Mineria dels resums: preparació dels textos

En primer lloc, eliminem els signes de puntuació dels resums:

data$Abstract <- gsub('[[:punct:] ]+',' ',data$Abstract) # removes punctuation

Passem a minúscula tot el text dels resums:

data$Abstract <- tolower(data$Abstract) # converts all text to lowercase

A continuació, separem les paraules individualment.

words <- separate_rows(data, Abstract, sep = " ")

Fem el recompte:

words %>% 
    count(Abstract, sort = TRUE)

Abans de procedir a l’anàlisi, eliminem les paraules buides (articles, preposiciones, etc.). He fet servir una llista de paraules buides en anglès disponible a http://snowball.tartarus.org/algorithms/english/stop.txt.

stopwords <- read.table(file = "stop2.txt",
                        header = FALSE,
                        stringsAsFactors = FALSE)

I ara eliminem dels resums les paraules buides de la llista. Passem de 121.037 aparicions de paraules (comptant repeticions) a 75.862.

words <- words %>% 
   anti_join(stopwords, by = c("Abstract" = "V1"))

5 Mineria dels resums: paraules més freqüents

Ara ja podem fer el recompte de paraules més freqüents. Com era d’esperar, les primeres són “open” i “science” que probablement acostumen a aparèixer juntes. Hi ha 9513 paraules úniques.

words %>% 
    count(Abstract, sort = TRUE)

Anem a fer el recompte de parelles de paraules que apareixen conjuntament (“open science”, “open access”, etc.).

word_pairs <- data %>%
  unnest_tokens(bigram, Abstract, token = "ngrams", n = 2)
word_pairs %>% 
    count(bigram, sort = TRUE)

Eliminem les paraules buides i veiem el resultat:

word_pairs_sep <- word_pairs %>%
  separate(bigram, into = c("word1", "word2"), sep = " ")

word_pairs_united <- word_pairs_sep %>%
  filter(!word1 %in% stopwords$V1,
         !word2 %in% stopwords$V1) %>%
  unite(bigram, c(word1, word2), sep = " ")

word_pairs_united %>% count(bigram, sort = TRUE)

6 Mineria dels resums: paraula més freqüent cada any

La següent figura mostra les 3 paraules més freqüents cada any (gairebé sempre són “science”, “research” i “open”). La figura és una mica enganyosa perquè són xifres absolutes i hem vist que el nombre d’articles i, per tant, de paraules es va incrementant progressivament. Caldrà mirar-lo per relativitzar la freqüència de cada paraula respecte al total de paraules de cada any.

words %>% 
    filter(!is.na(Year)) %>% 
    group_by(Year) %>% 
    count(Abstract, sort = TRUE) %>% 
    slice(1,2,3) %>% # això és el que talla les tres primeres paraules
    ggplot() +
    geom_bar(aes(x = Abstract, weight = n, fill = Abstract)) +
    coord_flip() +
    facet_wrap(~Year) +
    labs(title = "Resums d'articles sobre open science",
         subtitle = "Paraula més freqüent per any",
         x = "paraula",
         y = "freqüència")

I les parelles més freqüents cada any. Una és sempre “open science”. L’altra va canviant:

word_pairs_united %>% 
    filter(!is.na(Year)) %>% 
    group_by(Year) %>% 
    count(bigram, sort = TRUE) %>% 
    slice(1,2) %>% # això és el que talla les tres primeres paraules
    ggplot() +
    geom_bar(aes(x = bigram, weight = n, fill = bigram)) +
    coord_flip() +
    facet_wrap(~Year) +
    labs(title = "Resums d'articles sobre open science",
         subtitle = "Expressions més freqüents per any",
         x = "expressió",
         y = "freqüència")

7 Topic modelling

In text mining, we often have collections of documents, such as blog posts or news articles, that we’d like to divide into natural groups so that we can understand them separately. Topic modeling is a method for unsupervised classification of such documents, similar to clustering on numeric data, which finds natural groups of items even when we’re not sure what we’re looking for.

Latent Dirichlet allocation (LDA) is a particularly popular method for fitting a topic model. It treats each document as a mixture of topics, and each topic as a mixture of words. This allows documents to “overlap” each other in terms of content, rather than being separated into discrete groups, in a way that mirrors typical use of natural language.

Latent Dirichlet allocation is one of the most common algorithms for topic modeling. Without diving into the math behind the model, we can understand it as being guided by two principles.

Every document is a mixture of topics. We imagine that each document may contain words from several topics in particular proportions. For example, in a two-topic model we could say “Document 1 is 90% topic A and 10% topic B, while Document 2 is 30% topic A and 70% topic B.”

Every topic is a mixture of words. For example, we could imagine a two-topic model of American news, with one topic for “politics” and one for “entertainment.” The most common words in the politics topic might be “President”, “Congress”, and “government”, while the entertainment topic may be made up of words such as “movies”, “television”, and “actor”. Importantly, words can be shared between topics; a word like “budget” might appear in both equally.

Això està pendent.