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.
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ń:
Jeśli wynik swojego zadania chcemy zapamiętać (zapisać w jakimś pliku), ciąg poleceń może mieć poniższą postać:
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ć.
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.
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:
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.
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:
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!