Usługi tłumaczeniowe i lokalizacyjne certyfikowane normami ISO 17100:2015, ISO 27001:2017 oraz ISO 18587
Menu
LoginSzybka wycena
Menu

NLP w Linuxie

19 września, 2021

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!

crossmenuchevron-down linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram