Czy wiesz, że ... Mathematica to nie tylko matematyka |
![]() |
Analizy lingwistyczne |
Operacje lingwistyczne
Operacje lingwistyczne w środowisku Wolfram Language to nie tylko wbudowane słowniki wielojęzykowe, ale również badanie struktury tekstu i zależności między wyrazami. W połączeniu z wbudowanymi procedurami manipulacji na ciągach znakowych, operacjami na listach, procedurami wizualizacji oraz wymiany danych z zewnętrznymi źródłami informacji tworzy to unikalną platformę do zastosowań w zakresie operacji na języku naturalnym.
Program posiada wbudowane słowniki wielu języków, a procedury typu WordTranslation czy TextTranslation pozwalają na tłumaczenia poszczególnych wyrazów czy fraz tekstu. Wbudowane słowniki zawierają zestawy słów dla wielu języków. Procedury rozpoznawania języka (LanguageIdentify) w połączeniu z funkcjami sortowania alfabetycznego AlphabeticOrder pozwalają poprawnie porządkować alfabetycznie słowa w różnych językach.
Mathematica i “Pan Tadeusz”
Przykładem niech będą pokazane poniżej operacje, które wykorzystując funkcje Wolfram Language dokonują analizy tekstu poematu Adama Mickiewicza “Pan Tadeusz”.
W opracowaniu tym demonstrowane są wybrane możliwości programu Mathematica w zakresie przetwarzania, wizualizacji i analizy tekstu. Treść poematu Adama Mickiewicza wykorzystana w tym opracowaniu pochodzi z domeny publicznej i nie jest objęta majątkowym prawem autorskim. Utwór opracowany został w ramach projektu Wolne Lektury przez fundację Nowoczesna Polska (http://wolnelektury.pl).
Struktura poematu w środowisku Wolfram Language
Sprawdzimy strukturę poematu Adama Mickiewicza zapisanego w środowisku Wolfram Language. Sprawdźmy zawartość zmiennej ksiegi. Zmienna ta zdefiniowana jest w tym notatniku i zawiera całą treść dwunastu ksiąg poematu oraz epilogu.
Jaki jest charakter zmiennej ksiegi?
Możemy to sprawdzić za pomocą funkcji Head, która najogólniej rzecz ujmując, podaje jaki jest typ zmiennej zdefiniowanej w środowisku Wolfram Language.
Zmienna ta to lista. Jaka jest jej długość, czyli ile ksiąg liczy poemat?
Całość to zatem trzynastoelementowa lista.Takiego wyniku należało się spodziewać, dwanaście ksiąg plus epilog.
Taraz sprawdzimy jaki charakter ma każdy element naszej zmiennej ksiegi. Funkcja Head w tym kontekście pozwala sprawdzić charakter każdego elementu listy zmiennej ksiegi.
Nasze ksiegi to lista list.
Sprawdźmy pierwszy element tej listy. Funkcja Short pozwoli nam skrócić zapis.
Elementem tym jest treść pierwszej księgi poematu. Sprawdźmy pierwsze cztery elementy pierwszej księgi.
Litwo! Ojczyzno moja! ty jesteś jak zdrowie: |
Ile cię trzeba cenić, ten tylko się dowie, |
Kto cię stracił. Dziś piękność twą w całej ozdobie |
Widzę i opisuję, bo tęsknię po tobie. |
Otrzymaliśmy znany wszystkim początek poematu Adama Mickiewicza.
Długość listy pierwszej księgi poematu to liczba trzynastozgłoskowych wierszy.
W dalszej części sprawdzimy czy poeta nie pomylił się i czy faktycznie każdy wiersz poematu jest trzynastozgłoskowy.
Pierwsza księga “Pana Tadeusza” liczy 985 wierszy.
Cała treść poematu przechowywana jest w strukturze listy. W naszym przykładzie “Pan Tadeusz” jest listą list. Listy to podstawowy element środowiska Wolfram Language. Występują one zarówno jako wejście komend oraz jako wynik operacji. Struktura listy może być dowolnie zagnieżdżona. Nasza elektroniczna kopia “Pana Tadeusza” to lista złożona z 13 podlist odpowiadających księgom poematu. Każda księga to lista wierszy danej księgi, jeden wiersz to jeden element listy.
Treść poematu
Cała treść poematu zapamiętana jest w zmiennych zdefiniowanych w środowisku Wolfram Language w pliku Wolfram Notebook. Pokazany poniżej panel pozwala wyświetlić niezależnie treść każdej księgi lub spis jej zawartości.
Uwaga: Wersja interaktywna tego panelu będzie udostępniona wkrótce na podstronie Portalu dla Użytkowników.
Księgi Pana Tadeusza w liczbach
Zobaczymy teraz ile wierszy liczy każda księga i cały poemat, ile wyrazów jest w każdej księdze i jakie wyrazy występują najczęściej.
Wiemy już, że pierwsza księga ma 985 wierszy, bo pierwszy element listy ma długość 985. Ile wierszy mają pozostałe księgi poematu? Możemy to łatwo sprawdzić używając funkcji Map[...]. Mapowanie funkcji to zastosowanie jej do każdego elementu listy. Aby sprawdzić ile wierszy ma każda księga, należy wykonać mapowanie zmiennej ksiegi funkcją Length, czyli Map[Length,ksiegi] lub w skrócie:
Wszystkie księgi “Pana Tadeusza” mają razem 9715
Adam Mickiewicz najbardziej napracował się nad księgą czwartą, a był bardziej zwięzły w księdze siódmej. To, że epilog jest najkrótszy, to jest zrozumiałe. Ma tylko 130 wierszy.
Utwórzmy zmienną poemat w pokazany poniżej sposób.
Teraz nasz poemat jest listą zmiennych typu String, czyli ciągiem znaków. Możemy teraz sprawdzić ile znaków liczy każda księga poematu. Księgę z postaci listy wierszy zamieniliśmy na ciąg znaków.
Księgi poematu mają od około 25 tysięcy do 45 tysięcy znaków każda.
Możemy teraz łatwo sprawdzić ile ma ich cały poemat.
Nieco ponad 439 tysięcy znaków musiał napisać Adam Mickiewicz, aby powstał Pan Tadeusz.
Trzeba dodać, że wyliczona liczba 439018 znaków zawiera kropki, przecinki, wykrzykniki i inne znaki interpunkcyjne oraz znaki końca linii. Możemy je pominąć i zobaczyć jak wtedy wyglądałby poemat, ale zapewne stałby się mniej czytelny.
Operacja poniżej pokazuje, że Wieszcz postawił w poemacie ponad 9 tysięcy przecinków.
“Pan Tadeusz” jako “chmura słów”.
Zobaczymy teraz w formie tak zwanej chmury wyrazów (World Cloud) jakich wyrazów jest najwięcej w poemacie.
Najpierw sporządzimy listę częstości wyrazów i posortujemy ją według liczby wystąpień wyrazów. Usuniemy (funkcja StringDelete) główne znaki interpunkcyjne, gdyż stojąc za wyrazem zwiększałyby jego długość i razem stanowiłyby nowe wyrazy. Wybierzemy też wyrazy o długości większej niż trzy znaki, aby pominąć proste spójniki, zaimki i przyimki (argument funkcyjny (StringLength@#>3)&). Za pomocą funkcji ToLowerCase zamieniliśmy pisownię na małe litery, aby wyraz pisany z małej i z dużej litery był potraktowany jako ten sam wyraz.
Otrzymaliśmy zmienną wyrazyCzestosc, której 100 pierwszych elementów widzimy poniżej.
Widzimy, że najczęściej używanym słowem jest słowo “lecz”, a najczęściej wymienianą postacią jest Sędzia, wymieniany 127 razy i 37 razy w drugim lub czwartym przypadku (sędziego). Tytułowy bohater tylko 105 razy w pierwszym przypadku, ale 47 razy w dopełniaczu lub bierniku (Tadeusza).
Poniżej pokazane są wszystkie formy “Tadeusza” jakie znalazły się w poemacie.
Razem jest ich 175.
Chmura słów przedstawia wyrazy pisane czcionką, której wielkość zależy od częstości występowania danego wyrazu.
Najczęściej użytym przez Mickiewicza słowem dłuższym niż trzyliterowe jest słowo “lecz”. Bardzo często występuje “jest”, “rzekł”, “tylko”, “jako”, “mnie”.
Histogram długości słów w poemacie
Przy tworzeniu chmury słów braliśmy pod uwagę wyrazy mające więcej niż trzy litery, aby wyeliminować proste spójniki, przyimki czy zaimki. Teraz weźmiemy pod uwagę wszystkie wyrazy, włącznie z jednoliterowymi, dlatego z poprzednio stosowanej komendy usunięta została selekcja wyrazów za pomocą komendy Select. Zrezygnowaliśmy tym razem z zamiany na pisownię z małej litery i zachowana został oryginalna pisownia wyrazów.
Poemat rozłożony na poszczególne wyrazy można oglądnąć poniżej, wyraz po wyrazie, pominięte zostały wszelkie znaki nie będące literami i wyświetlonych zostało w formie przewijanej listy pierwszych 1000 wyrazów poematu.
Nie podawaliśmy jeszcze ile wyrazów liczy poemat, a okazuje się, że jest ich pokaźna liczba, prawie 68 tysięcy w treści 12 ksiąg i epilogu. Dokładna liczba podana jest poniżej.
Listę wyrazów zamienimy teraz na listę długości wyrazów, aby móc wyznaczyć histogram długości wyrazów w treści ksiąg Pana Tadeusza. Fragment tej listy widzimy poniżej, jak wiemy z poprzednich obliczeń liczy ona 67 tysięcy 633 elementy.
Poniżej, za pomocą funkcji Take pokazane zostały długości pierwszych 200 wyrazów.
Histogram długości wyrazów przedstawia się następująco.
Jeśli losowo wybrać z poematu słowo, to najbardziej prawdopodobne jest, że będzie ono miało pięć lub sześć liter, ale niewiele rzadziej w losowaniu możemy otrzymać wyraz trzyliterowy lub siedmioliterowy.
Jeśli już patrzymy na Pana Tadeusza okiem matematyka, to warto sprawdzić jaka jest wartość średnia, wariancja i odchylenie standardowe długości słów w tekście poematu. Wartości tych parametrów podane są poniżej. Ponieważ lista podająca długości poszczególnych wyrazów jest listą liczb całkowitych, więc domyślnie wyniki tych obliczeń byłyby ułamkami zwykłymi, dlatego aby otrzymać przybliżenie dziesiętne zastosowana została funkcja N.
Najczęstsze dwuliterowe frazy
Tym razem zagadnienie z dziedziny kryptologii, gdyż jednostki dwuliterowe często występują w różnych systemach szyfrowania. Tutaj jedynie sprawdzimy jakie jednostki dwuliterowe najczęściej występują w tekście ksiąg Pana Tadeusza.
Poniższy diagram pokazuje efekt analizy tekstu poematu. Po najechaniu myszą na symbol koła o różnych średnicach na skrzyżowaniu wiersza i kolumny wyświetlona zostaje dwuliterowa jednostka oraz ile razy wystąpiła w treści poematu. Wielkość koła jest proporcjonalna do liczby wystąpień.
Próg selekcji, który domyślnie ma wartość 1 pozwala ograniczyć wyświetlanie kół do przypadków, gdy krotność wystąpienia jednostki dwuliterowej jest większa od wybranego progu. Ustawiając wartość progu w okolicach 5000 zauważymy, że najczęstszymi jednostkami dwuliterowymi są “ni” (5900 wystąpień) oraz “ie” (ponad 10 tysięcy wystąpień). Koła dla tych jednostek są największe, co przy niewielkim zróżnicowaniu ich średnic byłoby trudne do zaobserwowania, gdyby nie możliwość zmiany progu selekcji.
Uwaga: Wersja interaktywna tego panelu będzie udostępniona wkrótce na podstronie Portalu dla Użytkowników.
Zwróćmy uwagę, że wśród najrzadszych jednostek dwuliterowych są takie jak “ńb” (3 wystąpienia), “żł” (2 wystąpienia) czy “źż” (3 wystąpienia). Możemy łatwo sprawdzić w jakich wyrazach występują te dwuliterowe sekwencje.
Poniżej podane są wyrazy, w których występują te unikalne jednostki dwuliterowe.
Trzynastozgłoskowiec
Czy faktycznie każdy werset Pana Tadeusza jest trzynastozgłoskowcem?
Czy Mickiewicz gdzieś się nie pomylił?
Sprawdzimy to teraz.
Należy uprzedzić, że pojęcie zgłoski (sylaby) nie doczekało się w zasadzie jeszcze jednoznacznej definicji, ale niewątpliwie cechą wspólną różnych prób sformalizowania tego pojęcia jest fakt traktowania zgłoski jako elementu segmentacji potoku mowy. Również na przestrzeni lat podejście do zjawiska zgłoski ulegało modyfikacji, szczególnie w zakresie tzw. dwugłosek czyli dyftongów, których przykładem w języku polskim jest np. “au”.
Liczba zgłosek to liczba sylab i wyznacznikiem ich są samogłoski, ale trzeba pamiętać, że czasem dwie samogłoski stanowią o jednej zgłosce. Ma to miejsce w połączeniu z samogłoską “i” stanowiącą zmiękczenie poprzedzającej spółgłoski lub w tak zwanych dyftongach, gdzie dwie samogłoski stanowią jedną głoskę. Należy mieć na uwadze również fakt, że od powstania Pana Tadeusza minęło już ponad 180 lat, a język i pojęcie zgłoski to twory żywe, ulegające zmianom na przestrzeni lat.
Sprawdźmy księgę pierwszą.
Ponieważ nasza procedura polegać będzie na liczeniu samogłosek w wersie wiersza, więc najpierw za pomocą funkcji StringReplace wyeliminujemy dwugłoski, funkcja Select pozwoli pominąć wiersze puste, a liczbę samogłosek po korekcie związanej z dwugłoskami wyznaczy procedura StringCount. Zmienne o nazwach samogloski i dwugloski musiały być oczywiście wcześniej zdefiniowane.
Zmienna liczbaZglosek podaje w formie listy liczbę zgłosek w każdym wersie pierwszej księgi poematu. Jej skróconą postać widzimy poniżej.
Sprawdźmy teraz czy są wersy o liczbie zgłosek innej niż 13.
Okazuje się, że są.
Dyrektywa poniżej podaje wykaz wersów, w których liczba zgłosek jest inna niż 13. W tabelarycznym układzie podany jest numer wersetu w księdze pierwszej, liczba zgłosek w tym wersecie oraz jego treść.
526 | 12 | Czarował; tak były czary przeciw czarów. |
656 | 14 | O autorów pytała Tadeusza zdania |
899 | 14 | W Marengo, w Ulm, w Austerlitz. Zwycięstwo i Zabor |
970 | 12 | I słowa liturgii takim wyrzekł tonem |
Widzimy, że za niektóre rozbieżności odpowiedzialne są dyftongi (dwugłoski) “au” (werset 656 i 899). Nasza uproszczona procedura liczenia zgłosek nie uwzględnia faktu, że dyftong “au” jest różnie traktowany w różnych wyrazach, czasem jest to jedna zgłoska, a czasem odpowiada za dwie zgłoski. Wersety w których wykryliśmy 12 zgłosek pozostawiamy interpretacji specjalistów od struktur fonologicznych oraz teorii literatury, a w szczególności wersyfikacji.
Dla przypomnienia!
Epilog Pana Tadeusza pisany jest jedenastozgłoskowcem. Poniżej widzimy liczbę zgłosek pierwszych 20 wersetów epilogu. Dalej, podobnie jak w księdze pierwszej są pewne odstępstwa, ale interpretacja tego faktu nie jest przedmiotem tego opracowania.
Niniejsze opracowanie nie może być traktowane jako efekt analizy lingwistycznej tekstu, a jedynie jako prezentacja możliwości programu Mathematica w tym zakresie, jako potencjalnego narzędzia wspomagającego pracę specjalistów z zakresu lingwistyki.