Więcej tekstów o archiwizacji Webu, historii cyfrowej i nowoczesnych instytucjach dziedzictwa? Możesz wesprzeć rozwój bloga przez wpłatę w Patronite

Przeszukiwanie repozytoriów naukowych za pomocą konsoli R (1)

Praca naukowa na komputerze to niestety zbyt częste korzystanie z przeglądarki, która nie jest specjalnie efektywnym narzędziem. Jednocześnie otwarte zakładki z wyszukiwarką ogólną i z Google Scholar, z wynikami wyszukiwania, ze słownikiem, pdfami i masą dodatkowych stron powodują, że więcej klikamy niż piszemy, a przeglądarka w końcu zwalnia tak, że nie daje się jej używać. Do tego biblioteki cyfrowe i repozytoria nie zawsze budowane są w sposób pozwalający na szybkie dotarcie do interesujących nas treści. Warto byłoby mieć możliwość rezygnacji z przeglądarki tam, gdzie nie jest ona niezbędna, tak jak przy pisaniu szkiców można korzystać z lekkich programów (notatnik czy gedit) zamiast uruchamiania ciężkiego edytora tekstu z pakietu biurowego.

Uniknąć przeglądarki

Także nie zawsze interesuje nas czytanie publikacji, a jedynie zebranie o nich podstawowych informacji: wciąż jednak oznacza to wiele klikania w przeglądarce lub menedżerze bibliografii. Zebranie korpusu tytułów i abstraktów w prostej tabeli w Excelu wymaga intensywnego korzystania z przeglądarki i częstego ręcznego przekopiowywania tekstów. To nie jest dobre środowisko pracy. Lepiej i szybciej jest korzystać z klawiatury niż z myszy i większość zadań realizować w jednym programie z pominięciem niepotrzebnych interfejsów graficznych stron internetowych. Aby zwiększyć użyteczność swojego cyfrowego środowiska pracy naukowej można skorzystać z konsoli języka R, najlepiej w programie RStudio.

R przedstawiany jest powszechnie jako język programowania głównie do zastosowań w badaniach statystycznych. Jego możliwości pozwalają jednak na skuteczne pozyskiwanie i przetwarzanie tekstów oraz pracę z repozytoriami, bibliotekami i archiwami cyfrowymi. Korzystanie z tych źródeł za pomocą linii poleceń to moim zdaniem dobra alternatywa dla klikania w przeglądarce. Poniżej przedstawię krótko prosty przykład, przy czym dla tych, którzy i które pracują już z R i RStudio nie będzie to niczym specjalnie nowym i zaskakującym. Osoby, które chciałyby szybko zacząć korzystać z możliwości tego języka, zapraszam na warsztaty.

Wyszukiwanie w aRxiv z poziomu konsoli

Interesuję się problemem archiwizacji Webu, więc moim testowym zadaniem będzie zrobienie przeglądu tekstów naukowych (preprintów) na ten temat, opublikowanych w repozytorium aRxiv. Podstawową frazę zapytania określę jako web archiving. Gdybym chciał teraz przeszukać repozytorium pod tym kątem, musiałbym wejść na stronę, znaleźć wyszukiwarkę i wpisać do niej odpowiednią frazę, a potem zapisywać gdzieś na boku interesujące mnie tytuły. Na szczęście w konsoli RStudio mogę mocno ułatwić sobie pracę i zrobić to wszystko w jednym oknie.

Możliwości R rozbudowuje się za pomocą paczek. Właśnie teraz doinstaluję sobie paczkę przygotowaną do pracy z aRxiv. Robię to za pomocą standardowej komendy, nie musząc nigdzie klikać ani niczego ściągać i instalować manualnie:

# instaluję paczkę aRxiv
> install.packages("aRxiv")

# i uruchamiam ją 
> library("aRxiv")

# aby wyszukać teksty po tytułach, korzystam z komendy arxiv_search z atrybutem ti:
# aby zwiększyć limit wyników wyszukiwania - standardowy wynosi 10 - dodaję atrybut limit
# wyniki wyszukiwania zapisuję w obiekcie lista

> lista <- arxiv_search('ti:"web archives"', limit=1000)

# następuje wyszukiwanie; w efekcie otrzymuję ramkę (data frame) z danymi dotyczącymi znalezionych publikacji (jest ich 6)
# mogę (z poziomu linii komend) szybko podejrzeć tytuły

> lista$title
[1] "Evaluating the SiteStory Transactional Web Archive With the ApacheBench\n  Tool"                                    
[2] "Profiling Web Archive Coverage for Top-Level Domain and Content Language"                                           
[3] "Access Patterns for Robots and Humans in Web Archives"                                                              
[4] "Evaluating Sliding and Sticky Target Policies by Measuring Temporal\n  Drift in Acyclic Walks Through a Web Archive"
[5] "A Query Language for Multi-version Data Web Archives"                                                               
[6] "Bots, Seeds and People: Web Archives as Infrastructure" 

# albo adresy URL pdf-ów (np. żeby je potem automatycznie pobrać)

> lista$link_pdf
[1] "http://arxiv.org/pdf/1209.1811v2"  "http://arxiv.org/pdf/1309.4008v1" 
[3] "http://arxiv.org/pdf/1309.4009v1"  "http://arxiv.org/pdf/1309.5503v1" 
[5] "http://arxiv.org/pdf/1504.01891v3" "http://arxiv.org/pdf/1611.02493v1"

# mogę też pobrać linki do abstraktów

> lista$link_abstract
[1] "http://arxiv.org/abs/1209.1811v2"  "http://arxiv.org/abs/1309.4008v1" 
[3] "http://arxiv.org/abs/1309.4009v1"  "http://arxiv.org/abs/1309.5503v1" 
[5] "http://arxiv.org/abs/1504.01891v3" "http://arxiv.org/abs/1611.02493v1"

# oczywiście można wyszukiwać też po autorze, np: arxiv_search('au:"Michael L. Nelson"')

> arxiv_search('au:"Michael L. Nelson"', limit=1000)$title
retrieved batch 1
retrieved batch 2
 [1] "A Scalable Architecture for Harvest-Based Digital Libraries - The\n  ODU/Southampton Experiments"                   
 [2] "Dynamic Linking of Smart Digital Objects Based on User Navigation\n  Patterns"                                      
 [3] "Co-Authorship Networks in the Digital Library Research Community"                                                   
 [4] "A Survey of Reverse Engineering and Program Comprehension"                                                          
 [5] "mod_oai: An Apache Module for Metadata Harvesting"                                                                  
 [6] "The Availability and Persistence of Web References in D-Lib Magazine"                                               
 [7] "Reconstructing Websites for the Lazy Webmaster"                                                                     
 [8] "Dynamic Web File Format Transformations with Grace"                                                                 
 [9] "D2D: Digital Archive to MPEG-21 DIDL"                                                                               
[10] "Repository Replication Using NNTP and SMTP"                                                                         
[11] "Characterization of Search Engine Caches"                                                                           
[12] "Evaluating Personal Archiving Strategies for Internet-based Information"                                            
[13] "Object Re-Use & Exchange: A Resource-Centric Approach"                                                              
[14] "Approximating Document Frequency with Term Count Values"                                                            
[15] "Correlation of Expert and Search Engine Rankings"                                                                   
[16] "Everyone is a Curator: Human-Assisted Preservation for ORE Aggregations"                                            
[17] "Adding eScience Assets to the Data Web"                                                                             
[18] "Evaluating Methods to Rediscover Missing Web Pages from the Web\n  Infrastructure"                                  
[19] "Investigating the Change of Web Pages' Titles Over Time"                                                            
[20] "Memento: Time Travel for the Web"                                                                                   
[21] "Using Web Page Titles to Rediscover Lost Web Pages"                                                                 
[22] "An HTTP-Based Versioning Mechanism for Linked Data"                                                                 
[23] "Is This a Good Title?"                                                                                              
[24] "Analysis of Graphs for Digital Preservation Suitability"                                                            
[25] "An Evaluation of Link Neighborhood Lexical Signatures to Rediscover\n  Missing Web Pages"                           
[26] "Connectivity Damage to a Graph by the Removal of an Edge or a Vertex"                                               
[27] "When Should I Make Preservation Copies of Myself?"                                                                  
[28] "Evaluating the SiteStory Transactional Web Archive With the ApacheBench\n  Tool"                                    
[29] "A Plan For Curating \"Obsolete Data or Resources\""                                                                 
[30] "Losing My Revolution: How Many Resources Shared on Social Media Have\n  Been Lost?"                                 
[31] "The Performance of Betting Lines for Predicting the Outcome of NFL Games"                                           
[32] "How Much of the Web Is Archived?"                                                                                   
[33] "Carbon Dating The Web: Estimating the Age of Web Resources"                                                         
[34] "ResourceSync: Leveraging Sitemaps for Resource Synchronization"                                                     
[35] "HTTP Mailbox - Asynchronous RESTful Communication"                                                                  
[36] "ArcLink: Optimization Techniques to Build and Retrieve the Temporal Web\n  Graph"                                   
[37] "Web Synchronization Simulations using the ResourceSync Framework"                                                   
[38] "Reading the Correct History? Modeling Temporal Intention in Resource\n  Sharing"                                    
[39] "An Evaluation of Caching Policies for Memento TimeMaps"                                                             
[40] "On the Change in Archivability of Websites Over Time"                                                               
[41] "Resurrecting My Revolution: Using Social Link Neighborhood in Bringing\n  Context to the Disappearing Web"          
[42] "Profiling Web Archive Coverage for Top-Level Domain and Content Language"                                           
[43] "Access Patterns for Robots and Humans in Web Archives"                                                              
[44] "Who and What Links to the Internet Archive"                                                                         
[45] "Evaluating Sliding and Sticky Target Policies by Measuring Temporal\n  Drift in Acyclic Walks Through a Web Archive"
[46] "A Framework for Evaluation of Composite Memento Temporal Coherence"                                                 
[47] "Real-Time Notification for Resource Synchronization"                                                                
[48] "Support for Various HTTP Methods on the Web"                                                                        
[49] "Bringing Web Time Travel to MediaWiki: An Assessment of the Memento\n  MediaWiki Extension"                         
[50] "Improving Accessibility of Archived Raster Dictionaries of Complex\n  Script Languages"                             
[51] "Avoiding Spoilers in Fan Wikis of Episodic Fiction"                                                                 
[52] "Archiving Deferred Representations Using a Two-Tiered Crawling Approach"                                            
[53] "Quantifying Orphaned Annotations in Hypothes.is"                                                                    
[54] "Adapting the Hypercube Model to Archive Deferred Representations and\n  Their Descendants"                          
[55] "Web Infrastructure to Support e-Journal Preservation (and More)"  

# w R wyniki wyszukiwania można szybko wyeskportować do pliku

> write.csv(arxiv_search('au:"Michael L. Nelson"', limit=1000)$title ,"/home/mw/r/@usunto/lista.csv")

# zestawienie w cvs łatwo już zaimportować do Excela lub skopiować jako listę do edytora tekstu i uzupełnić nią treść pisanego artykułu
 

Łatwe przetwarzanie danych

Jak widać już po tych kilku prostych przykładach, konsola R daje możliwość szybkiego pobierania i przetwarzania danych ściągniętych z aRxiv. Szczególnie pomocna może być przy badaniach piśmiennictwa naukowego, kiedy mniej zależy nam na szczegółowej lekturze wybranych tekstów, a bardziej na danych statystycznych dotyczących dużego korpusu artykułów naukowych. Dzięki bibliotece aRxiv eksportować możemy automatycznie następujące informacje dotyczące pojedynczego artykułu lub korpusu artykułów:

id, submitted, updated, title, abstract, authors, affiliations, link_abstract, link_pdf, link_doi, comment, journal_ref, doi, primary_category, categories

Jednak kiedy chcielibyśmy przeczytać wybrany tekst, musimy albo otworzyć go w przeglądarce. Można to zrobić za pomocą komendy arxiv_open lub wygenerować listę bezpośrednich URL-i do plików PDF i ściągnąć je za pomocą polecenia curl. Oczywiście można też postarać się ściągnąć treści PDF-ów do jednego pliku tekstowego i dalej przetwarzać taki korpus.


# poniższa komenda automatycznie otworzy w przeglądarce pierwszy artykuł (stronę artykułu na aRxiv) z listy tekstów Michaela L. Nelsona 
# tj. "A Scalable Architecture for Harvest-Based Digital Libraries..."

> arxiv_open(arxiv_search('au:"Michael L. Nelson"', limit=1))

# uzyskanie bezpośrednich linków do pdf-ów wymaga dopisania nazwy kolumny, którą chcemy wyświetlić w wynikach wyszukiwania (tutaj link_pdf)

> arxiv_search('au:"Michael L. Nelson"', limit=100)$link_pdf
 [1] "http://arxiv.org/pdf/cs/0205071v1" "http://arxiv.org/pdf/cs/0401029v1"
 [3] "http://arxiv.org/pdf/cs/0502056v2" "http://arxiv.org/pdf/cs/0503068v1"
 [5] "http://arxiv.org/pdf/cs/0503069v1" "http://arxiv.org/pdf/cs/0511077v1"
 [7] "http://arxiv.org/pdf/cs/0512069v1" "http://arxiv.org/pdf/cs/0512068v1"
 [9] "http://arxiv.org/pdf/cs/0602059v1" "http://arxiv.org/pdf/cs/0606008v2"
[11] "http://arxiv.org/pdf/cs/0703083v2" "http://arxiv.org/pdf/0704.3647v1" 
[13] "http://arxiv.org/pdf/0804.2273v1"  "http://arxiv.org/pdf/0807.3755v1" 
[15] "http://arxiv.org/pdf/0809.2851v2"  "http://arxiv.org/pdf/0901.4571v1" 
[17] "http://arxiv.org/pdf/0906.2135v1"  "http://arxiv.org/pdf/0907.2268v2" 
[19] "http://arxiv.org/pdf/0907.3445v1"  "http://arxiv.org/pdf/0911.1112v2" 
[21] "http://arxiv.org/pdf/1002.2439v1"  "http://arxiv.org/pdf/1003.3661v1" 
[23] "http://arxiv.org/pdf/1004.2719v1"  "http://arxiv.org/pdf/1004.4296v1" 
[25] "http://arxiv.org/pdf/1102.0930v1"  "http://arxiv.org/pdf/1103.3075v1" 
[27] "http://arxiv.org/pdf/1202.4185v1"  "http://arxiv.org/pdf/1209.1811v2" 
[29] "http://arxiv.org/pdf/1209.2664v1"  "http://arxiv.org/pdf/1209.3026v1" 
[31] "http://arxiv.org/pdf/1211.4000v1"  "http://arxiv.org/pdf/1212.6177v2" 
[33] "http://arxiv.org/pdf/1304.5213v1"  "http://arxiv.org/pdf/1305.1476v1" 
[35] "http://arxiv.org/pdf/1305.1992v1"  "http://arxiv.org/pdf/1305.5959v2" 
[37] "http://arxiv.org/pdf/1306.1073v1"  "http://arxiv.org/pdf/1307.4063v1" 
[39] "http://arxiv.org/pdf/1307.5685v1"  "http://arxiv.org/pdf/1307.8067v1" 
[41] "http://arxiv.org/pdf/1309.2648v1"  "http://arxiv.org/pdf/1309.4008v1" 
[43] "http://arxiv.org/pdf/1309.4009v1"  "http://arxiv.org/pdf/1309.4016v1" 
[45] "http://arxiv.org/pdf/1309.5503v1"  "http://arxiv.org/pdf/1402.0928v3" 
[47] "http://arxiv.org/pdf/1402.3305v1"  "http://arxiv.org/pdf/1405.2330v1" 
[49] "http://arxiv.org/pdf/1406.3876v1"  "http://arxiv.org/pdf/1409.1284v1" 
[51] "http://arxiv.org/pdf/1506.06279v1" "http://arxiv.org/pdf/1508.02315v1"
[53] "http://arxiv.org/pdf/1512.06195v1" "http://arxiv.org/pdf/1601.05142v1"
[55] "http://arxiv.org/pdf/1605.06154v1"
  

Wydaje mi się, że taka metoda eksploracji repozytoriów jest bardzo dobrą alternatywą dla korzystania z nich za pomocą przeglądarki. W kolejnej notce z cyklu napiszę o wyszukiwaniu za pomocą konsoli R w repozytorium PLOS i bazie Crossref.

Warto subskrybować newsletter, aby otrzymywać informacje o nowych wpisach.

Udostępnij na na Twitterze | Udostępnij na Facebooku

Przeczytaj także