Data publikacji w serwisie:

NLP w Linuxie

Jak najłatwiej przetwarzać teksty?

Przyjęło się uważać, że przetwarzanie dokumentów tekstowych wymaga znajomości języka programowania wysokiego poziomu. Kilkanaście lat temu “wypadało” dobrze znać język Perl, natomiast dziś specjalista w tej dziedzinie “absolutnie musi” mieć opanowany język Python. Czy naprawdę jest to niezbędne?

W niniejszym wpisie pokażę, że nawet całkiem zaawansowane zadania związane z przetwarzaniem tekstu można łatwo i szybko wykonać bez znajomości ani jednego polecenia jakiegokolwiek języka programowania.

Ile wyrazów ma mój tekst?

Zacznijmy od zadania najprostszego: sprawdźmy, ile wyrazów ma pewien dokument tekstowy. Można to zrobić za pomocą następującego ciągu poleceń:

  • pobierz dane z dokumentu (pliku) tekstowego;
  • zlicz wyrazy w pobranych danych.

Jeśli wynik swojego zadania chcemy zapamiętać (zapisać w jakimś pliku), ciąg poleceń może mieć poniższą postać:

  • pobierz dane z pliku tekstowego;
  • zlicz słowa w pobranych danych;
  • zapisz wynik do pliku.

Platforma Bash Box

Polecenia takiego typu są dostępne w systemie operacyjnym Linux. Aby uzyskać pożądany wynik, należy wpisać odpowiednie nazwy poleceń, których trzeba się uprzednio nauczyć. Polecam jednak coś znacznie bardziej atrakcyjnego: program graficzny, w którym zamiast wpisywania “trudnych do wyuczenia się na pamięć” poleceń można po prostu przesuwać puzzle.

Wejdźmy na stronę: https://s416072.students.wmi.amu.edu.pl/, gdzie naszym oczom ukaże się taki oto ekran:

Spośród ponad 20 dostępnych puzzli przeciągamy na pasek znajdujący się pod nimi tylko te, które chcemy wykorzystać – na przykład w celu zliczenia wyrazów w danym dokumencie:

Zauważmy, że pierwszy puzzel (Pobierz dane z pliku) ma wypustkę tylko z prawej strony, co oznacza, że oczekuje on na dołączenie innego elementu tylko z tejże strony. Kształt drugiego puzzla sugeruje z kolei gotowość na dołączenie puzzli z obu stron, podczas gdy trzeci element (Zapisz do pliku) wyłącznie domyka całą układankę.

W jakim dokumencie chcemy policzyć wyrazy? Bash Box daje nam tutaj do wyboru cztery możliwości:

Jeśli wybierzemy plik zawierający informacje o młodych przestępcach, wyświetli nam się na ekranie zawartość odpowiedniego dokumentu:

Pierwszy z widocznych powyżej wierszy informuje o tym, że w roku 2010 odnotowano w Polsce 741 przestępczyń płci żeńskiej w wieku 17 lat. Kolejne wersy zawierają analogiczne informacje – dla odpowiedniego wieku oraz odpowiedniej płci.

Aby zliczyć liczbę wyrazów w tym dokumencie, dokonujemy “tłumaczenia” ciągu poleceń zapisanego wcześniej za pomocą puzzli na odpowiednie polecenie systemu Linux. Odbywa się to z użyciem poniższego przycisku:

W systemie Linux dostępne jest specjalne środowisko (zwane potocznie “czarnym okienkiem”), które służy do wydawania poleceń – jest to powłoka Bash. Przetłumaczony przez nas ciąg poleceń ma w powłoce Bash następującą postać:

Zapis wygląda na odrobinę skomplikowany, spróbujmy go jednak przeanalizować.

  • :~$ to tzw. symbol gotowości, który pojawia się samoistnie w powłoce Bash w oczekiwaniu na polecenie wydane przez użytkownika;
  • cat filename.txt to polecenie pobrania danych do dalszego przetwarzania z pliku o nazwie filename.txt;
  • | (znak “pipe”) to separator poleceń, który informuje, że wynik polecenia z lewej strony ma być przetworzony przez polecenie z prawej strony;
  • wc -w to polecenie zliczenia wyrazów;
  • > finalfile.txt to polecenie zapisu danych w pliku o nazwie finalfile.txt.

W oknie obok możemy zobaczyć wynik działania całego potoku, czyli ciągu poleceń:

Okazuje się więc, że dokument o młodych przestępcach zawiera 819 wyrazów.

Zagadki

W systemie Bash Box można pobawić się też w przetwarzanie tekstu, rozwiązując zagadki w stylu historii westernowych. Uruchamia je poniższy przycisk, umiejscowiony w lewym górnym rogu ekranu:

Rozwiążmy zatem pierwszą z zagadek:

Format dokumentu ze wspomnianej bazy osób wyświetlony jest obok zagadki:

Aby uzyskać wymaganą odpowiedź, należy wykonać następujące kroki:

  • pobierz dane z pliku;
  • uszereguj dane w kolejności od najmniejszej wartości – według zawartości pierwszej kolumny;
  • wyświetl pierwsze dwadzieścia informacji (pierwsze dwadzieścia wierszy bazy danych);
  • zapisz wynik do pliku.

Przeciągamy zatem na ekranie odpowiednie puzzle:

Następnie sprawdzamy poprawność uzyskanej odpowiedzi:

Przycisk Sprawdź zabarwia się na pomarańczowo, co oznacza, że to nie była prawidłowa odpowiedź!

Przeciągamy więc trzeci puzzel na jego pierwotne miejsce, zastępując go innym:

Teraz przycisk Sprawdź zabarwia się już na zielono, co oznacza, że możemy spokojnie przejść do kolejnej z ośmiu zagadek.

Przykład zastosowania poleceń powłoki Bash

Jeśliby zapytać studenta informatyki, w jaki sposób uzyskać listę częstości występowania poszczególnych wyrazów, użytych na przykład we wszystkich dziełach Szekspira razem wziętych, najczęściej usłyszymy odpowiedź, iż najprościej będzie napisać odpowiedni kod w języku programowania Python. Można to jednak uczynić znacznie łatwiej – przy użyciu pojedynczego polecenia w powłoce Bash:

cat sh.txt | tr -sc ’A-Za-z’ ’\n’ | sort | uniq -c  > sh_frequency_list

Załóżmy, że plik tekstowy sh.txt zawiera wszystkie dzieła Szekspira. Wtedy:

  • cat sh.txt pobiera dane z tego pliku do dalszego przetwarzania;
  • tr -sc ‘A-Za-z’ ‘\n’ zastępuje wszystkie znaki niebędące literami (np. spacje) znakiem nowego wiersza (dzięki czemu każdy wyraz będzie teraz umieszczony w oddzielnym wierszu);
  • sort układa wszystkie wiersze (a w każdym z nich umieszczony jest teraz tylko jeden wyraz) w kolejności alfabetycznej (w efekcie czego wielokrotne pojawienia się tych samych wyrazów umieszczone zostaną w sąsiadujących wierszach);
  • uniq -c redukuje powtarzające się wiersze (czyli te o tej samej zawartości), podając odnotowane liczby powtórzeń;
  • uzyskana w ten sposób lista frekwencyjna zapisana zostaje w pliku sh_frequency_list.

Podsumowanie

Przetwarzanie dokumentów tekstowych w systemie Linux jest bardzo efektywne. Za pomocą jednego polecenia można tutaj uzyskać takie same efekty jak w wyniku działania złożonych programów. Trudnością, którą trzeba pokonać, jest wyłącznie zapoznanie się z odpowiednimi poleceniami oraz nabycie umiejętności układania ich w potok.

Na pewno jednak warto, a platforma Bash Box może w tym wydatnie pomóc!