4 min read

R, Windows i... Ubuntu

Gdyby wszystko działało “od ręki”, to człowiek by się zanudził na śmierć. Dlatego od czasu do czasu, by trochę rozruszać zmurszałe komórki móżgowe, warto się pomęczyć, nawet jeśli człowiek klnie na czym świat stoi. Dwa ostatnie dni poświęciłem na taką właśnie “gimnastykę” mózgu, a powód był stary jak polski świat komputerów. Niekompatybilność.

Wszystko zaczęło się od Donalda Trumpa, który podczas wizyty w Polsce wygłosił przemówienie, które każdego z Polaków musiało ucieszyć. Pomyslałem sobie: to fajna okazja by przypomnieć sobie swoje umiejętności w tzw. Text Mining - czyli analizie tekstu i dowiedzieć się:

  • jakie słowa padały najczęściej w przemówieniu Trumpa w Warszawie
  • jakich tzw. bigramów albo trigramów używał prezydent Stanów Zjednoczonych

Najczęściej do takich analiz używałem R i pakietu tm. To - jak się opanuje - dość fajne narzędzie, a przede wszystkim coś w rodzaju standardu w text mining. Co za tym idzie, sporo ludzi pisze o tm, czy potrafi pomóc np. na StackOverflow..

Tym razem jednak postanowiłem użyć innego narzędzia: pakietu Tidytext. Przypomniałem sobie, że dobrych kilka miesięcy temu, a może nawet jeszcze w zeszłym roku, autorzy tekgo pakietu Julia Silge i David Robinson opublikowali książkę “Text Mining with R. A Tidy Approach”, będącą niejako manualem do ich pakietu, a przy okazji fajną lekcją analizy tekstu. Jako, że przeczytałem wcześniej spore fragmenty tej ksiązki, to mniej więcej orientowałem się, że zadanie, ktore sobie postawiłem, można przy pomocy tidytext rozwiązać i to w kilku linijkach kodu.

Zadanie numer 1, czyli jakie słowa padły w przemówieniu Trumpa zajęło mi jakieś circa 1 minutę :- ) bo to tyle co napisanie tych kilku linijek kodu:

library(dplyr)
library(tidytext)

filename <- "trump.txt"
trump <- readLines(filename, encoding = "UTF-8")
trump <- data_frame(text=quovadis)

pl_stop_words <- read.table("stopwords.txt", col.names = "word")

trump_slowa <- trump %>%
  unnest_tokens(word, text) %>%
  anti_join(pl_stop_words) %>%
  count(word, sort=T) %>%

Pyk, pyk plus biblioteka do chmurki słów i już wiadomo.

Słowa, których najczęściej używał Trump w Warszawie Zachęcony tym zabrałem się za bigramy. Unigramy to pojedyncze słowa tekstu. Funkcja unnest_tokens() bierze tekst, dzieli go na pojedyncze słowa i liczy częstotliwość wysteopujących słów. Bigramy są to dwa sąsiadujące ze sobą słowa. Trigramy to trzy sąsiadujące słowa i tak dalej. Ogólnie nazywa się ngrams - czyli ngramami.

Kod do wyodrębnienia bigramów wykorzystuje tę samą funkcję unnest_tokens() tylko podaje się nieco inne paramtery. No i w inny trochę sposób usuwa się tzw. stopwords czyli często wystepujące słowa, ktore nic nie wnoszą do analizy np. “albo”, “i” etc. Wydawało się, że pójdzie jak z płatka i tak było do momentu, gdy obejrzałem na ekranie wynik. Znaczki zamiast polskich znaków!

No to jest problem, ktory tygryski lubią najbardziej bo:

  • używam tego samego pliku tekstowego
  • wczytuję go tą samą funkcją
  • używam do bigramów tej samej funkcji co do unigramów
  • nie ma żadnych błędów

W pierwszym przypadku polskie litery są poprawnie, a w drugim nie.

Dopóki wszystko z R robiłem na linuksie, to problem nie istniał. Niestety przymusowa przesiadka na Windows, przypomniała mi, że niby wszyscy używają UTF-8, ale gdy masz Windows, to wiadomo, że będzie inaczej.

Pierwszy pomysł? Zmienię na moment wykonywania funkcji liczącej bigramy, locales z polskich 1250 na np. angielskie. Niestety, efekt żaden. Dzisiaj podejrzewam, że być może to dobry trop, tylko zmiana locales musi być zrobiona podczas uruchamiania R, a nie w czasie trwania sesji.

Drugi pomysł? Oczywiście zrobić sobie proste środowisko Linuksa, które w razie potrzeby mógłbym szybko wykorzystać. Tu również jest kilka ścieżek:

  • Amazon AWS,
  • Linux współdzielony z Windows na jednym dysku
  • powłoka Bash w Windows 10

Pierwsze dwa odrzuciłem, bo trochę przy tym roboty. Trzecie rozwiązanie to trochę dla mnie niewiadoma, ale kusząca, bo na tym samym komputerze, bez ponownego uruchamiania komputera, mam pod ręką linuksa. Trochę jak na Amazon AWS, tylko na swoim kompie :-)

Sama procedura jest prosta i nie zabiera więcej niż 15 minut:

  • włączenie funkcji developerskich w panelu sterowania
  • włączenie “podsystem Windows dla systemu Linux”

Potem już z górki, bo mamy nieco okrojony, ale jednak Ubuntu. Co prawda nie ma graficznego interfejsu (i coś mi mówi, że nie będzie :-)), a wiec nie użyjemy RStudio, no ale do incydentalnej pracy z R to nie jest jakiś specjalny problem. Co fajnego to to, że z jednej strony mam linuksową przestrzeń dyskową, ale z drugiej jest też dostęp do dysku w Windows. Dzięki temu bez żadnej gimnastyki mogę korzystać z plików w obu systemach. Instalacja R i pakietów taka sama jak w jakimkolwiek linuksie.

Efekt? Poniżej :-)

R uruchomiony w bashu na…Windows 10

R uruchomiony w bashu na…Windows 10