Basics of programming (Python) - second-year students of computational linguistics

  1. 2023-10-03: Introduction to Python

    Instrukcja instalacji narzędzi

    1. Ściągnij Python, wersja 3.10.10 dla systemu 32-bit lub 64-bit.
    2. Zainstaluj python-3.10.10.exe (32-bit) lub python-3.10.10-amd64.exe (64-bit).
    3. Otwórz IDLE (Python) z menu programów.
    4. Przywitaj się ze światem komendą: print ('Hello world!')
    5. W oknie Python Shell idź do File -> Save As i skopiuj ścieżkę, w której jest plik python.exe.
    Np. C:\Users\jbach\AppData\Local\Programs\Python\Python310-64
    6. W polu z lupą na pasku narzędzi w Windows 10 wyszukaj "Uruchom" i wpisz "cmd". Otworzy się okno z wierszem poleceń.
    7. W oknie wpisz "cd", a po spacji wklej ścieżkę, którą skopiowałeś w punkcie 4. Np. cała komenda będzie wyglądała tak:

    cd C:\Users\jbach\AppData\Local\Programs\Python\Python310-64

    Zatwierdź komendę, klikając ENTER.
    Polecenie powyżej przenosi do katalogu, w którym jest plik python.exe. Możesz go zobaczyć, wpisując dir i zatwierdzając przez kliknięcie na ENTER.
    8. Zainstaluj pip komendą: python -m pip install --upgrade pip. Jeżeli masz problemy z instalacją 'pip', spróbuj rozwiązać je, korzystając z TEJ strony.
    9. Zainstaluj nltk komendą: python -m pip install nltk
    10. Zainstaluj matplotlib komendą: python -m pip install -U matplotlib
    11. Zainstaluj numpy komendą: python -m pip install -U numpy
    12. Otwórz ponownie IDLE (Python) z menu programów.
    13. Zaimportuj nltk komendą: import nltk
    14. Ściągnij korpusy i narzędzia do NLTK komendą: nltk.download()
    Pojawi się okno, z którego wybierz "Everything used in the NLTK Book" i kliknij "Download".
    15. Jeżeli nie pojawiły się błędy podczas pobierania danych, to możesz przetestować, czy wszystko jest w porządku komendą:

    from nltk.book import *

    Powinien pojawić się niebieski tekst:

    *** Introductory Examples for the NLTK Book ***
    Loading text1, ..., text9 and sent1, ..., sent9
    Type the name of the text or sentence to view it.
    Type: 'texts()' or 'sents()' to list the materials.
    text1: Moby Dick by Herman Melville 1851
    text2: Sense and Sensibility by Jane Austen 1811
    text3: The Book of Genesis
    text4: Inaugural Address Corpus
    text5: Chat Corpus
    text6: Monty Python and the Holy Grail
    text7: Wall Street Journal
    text8: Personals Corpus
    text9: The Man Who Was Thursday by G . K . Chesterton 1908

    16. Przetestuj, czy masz pakiety Matplotlib i NumPy komendą:

    text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"])

    Jeżeli pojawił się wykres rozproszenia, to Python i NLTK są poprawnie zainstalowane. Gratulacje!

  2. 2023-10-10: Introduction to Python, cont.
  3. 2023-10-17: Introduction to Python, cont.
  4. 2023-10-24: Introduction to Python, cont.
  5. 2023-10-31: Introduction to Python, cont.
    1. Napisz funkcję, która zapyta użytkownika o liczby x i y, a następnie obliczy działanie:

    2. Napisz funkcję, w której zdefiniujesz jakieś hasło, a kiedy hasło zostanie wpisane, program wydrukuje 'Doskonale!' (Skorzystaj z pętli 'while'.)
      Przykładowe działanie programu:

      Podaj hasło: jajko
      Podaj hasło: 123abc
      Podaj hasło: Kasia
      Podaj hasło: Angelina
      Doskonale!
    3. Napisz funkcję, która zapyta użytkownika w pętli 'for' trzy razy o podanie liczby, a następnie wydrukuje pierwiastki tych liczb z dokładnością do trzech miejsc po przecinku.
      Przykładowe działanie programu:

      pierwiastki_liczb()
      Podaj liczbę: 
      Pierwiastek liczby 4 wynosi 2.000.
      Podaj liczbę: 10
      Pierwiastek liczby 10 wynosi 3.162.
      Podaj liczbę: 16
      Pierwiastek liczby 16 wynosi 4.000.
      

    4. Stwórz funkcję, która zapyta użytkownika o to, jaki jest dzisiaj dzień. Następnie zapyta, która jest godzina. Na koniec wydrukuje stosowny komunikat, np. Dzisiaj jest czwartek, godzina 10:30. Skorzystaj z formatu drukowania %s.
    5. Stwórz tablicę z imionami, a następnie wydrukuj elementy tablicy w tym formacie:
      0 => Basia
      1 => Maciej
      2 => Andżela
      3 => Piotr

      Skorzystaj z funkcji 'enumerate'.

    6. Napisz funkcję, w której zapytasz użytkownika o tekst oraz liczbę. Następnie sprawdź czy litera 'a' wystąpiła w podanym tekście przynajmiej tyle razy, ile podał użytkownik. Jeśli tak, wydrukuj komunikat: 'Tekst spełnia wymagania.' Jeśli nie, to wydrukuj: 'Ale pech. Spróbuj jeszcze raz.'
      >>> sprawdzaj()
      Podaj tekst: salamandra
      Podaj liczbę: 3
      Tekst spełnia wymagania.
  6. 2023-11-07: NLTK book, Chapter 1, Section 1: Computing with Language: Texts and Words
  7. 2023-11-14: NLTK book, Chapter 1, Section 2: A Closer Look at Python: Texts as Lists of Words

    Homework: Do again at home the tasks from section 1 and section 2 which were presented in class and check if your Python and nltk settings are working on your computer at home.

  8. 2023-11-21: Seminarium Dariah.lab "Sezon na humanistykę cyfrową"
  9. 2023-11-28: NLTK book, Chapter 1, Section 3: Computing with Language: Simple Statistics
  10. 2023-12-05: NLTK book, Chapter 1, Section 4: Back to Python: Making Decisions and Taking Control
  11. 2023-12-12: NLTK book, Chapter 1, Section 4: Back to Python: Making Decisions and Taking Control and Section 5: Automatic Natural Language Understanding

    Exercises with frequency distribution.

    Homework: Do the exercises 1-12 at the end of Chapter 1.

  12. 2023-12-19: NLTK book, Chapter 2

    http://bachan.speechlabs.pl/files/New_York_Times.zip

    Zadanie 1: Załaduj korpus New_York_Times.
    Zadanie 2: Wydrukuj nazwy plików w tym korpusie.
    Zadanie 3: Zbuduj konkordans dla wyrazu 'sisters' w pliku 1.
    Zadanie 4: Wydrukuj tylko te wyrazy z pliku 1, które są pisane wielkimi literami, np. BROOKS.
    Zadanie 5: Policz, ile jest zdań w pliku 2.
    Zadanie 6: Wydrukuj 60 pierwszych znaków z pliku 3.
    >> Zadanie 7: Dodaj plik tekstowy do korpusu New_York_Times z listą wyrazową (bez polskich znaków). Wydrukuj najdłuższy wyraz z tego pliku.

  13. 2024-01-09: Revision exercises
    Zadanie 1: Ściągnij, rozpakuj i załaduj korpus do nltk.
    Zadanie 2: Wydrukuj nazwy plików w tym korpusie.
    Zadanie 3: Zbuduj konkordans dla wyrazu 'Brexit' w pliku Times_file_01.txt.
    Zadanie 4: Znormalizuj tekst z pliku Times_file_01.txt do małych liter i oblicz, ile jest typów wyrazów.
    Zadanie 5: Stwórz listę frekwencyjną wyrazów z pliku Times_file_01.txt. Następnie wydrukuj tylko te wyrazy, które pojawiły się 4 lub więcej razy. Wyświetl wyraz i liczbę wystąpień tego wyrazu w formacie: wyraz <=> liczba.
    Zadanie 6: Wydrukuj najkrótsze zdanie (lub zdania) z pliku Times_file_02.txt.
    Zadanie 7: Wydrukuj cyfry (nie liczby!) w pliku Times_file_03.txt.
    Zadanie 8: Zsumuj cyfry z zadania 7.
    Zadanie 9: Napisz funkcję, w której zapytasz użytkownika o imię oraz ilość wykonanych zadań. Jeżeli liczba jest większa od 3, to wydrukuj informację 'imię, bardzo dobrze!.', a jeśli nie to wydrukuj 'imię, musisz więcej pracować w domu.' => Za 'imię' należy podstawić to, co wpisał użytkownik, czyli np. 'Jola, bardzo dobrze!' lub 'Jola, musisz więcej pracować w domu.'
    Zadanie 10: Napisz funkcję, która zapyta użytkownika o liczby x i y, a następnie obliczy działanie:

    Zadanie 11: Napisz funkcję, która zapyta użytkownika w pętli 'for' trzy razy o podanie liczby, a następnie wydrukuje sześciany tych liczb.
    Przykładowe działanie programu:

    >>> szesciany_liczb()
    Podaj liczbę: 3
    Sześcian liczby 3 wynosi 27.
    Podaj liczbę: 5
    Sześcian liczby 5 wynosi 125.
    Podaj liczbę: 4
    Sześcian liczby 4 wynosi 64.
    
  14. 2024-01-16: Revision exercises

    1. Ściągnij, rozpakuj i załaduj korpus do nltk. Korpus znajduje się tutaj: http://bachan.speechlabs.pl/files/Corpus_test1_A.zip
    2. Wydrukuj nazwy plików w tym korpusie.
    3. Zbuduj konkordans dla wyrazu „Sala” w pliku paper1.txt.
    4. Wydrukuj tylko te wyrazy z pliku paper1.txt, które mają 10 liter.
    5. Wydrukuj tylko te wyrazy z pliku paper1.txt, które mają ciąg liter „ff”.
    6. Stwórz listę frekwencyjną wyrazów z pliku paper1.txt. Następnie wydrukuj tylko te wyrazy i tokeny, które pojawiły więcej niż 3 razy w tekście. Wyświetl wyraz i liczbę wystąpień tego wyrazu/tokenu w formacie: wyraz *** >>> *** liczba.
    7. Policz, ile jest różnych typów znaków w pliku paper2.txt.
    8. Wydrukuj tylko duże litery z pliku paper2.txt.
    9. Wydrukuj 21 ostatnich znaków z pliku paper2.txt.
    10. Policz, ile jest zdań w pliku paper3.txt.
    11. Skonkatenuj dwa pierwsze wyrazy dwóch pierwszych zdań z pliku paper3.txt, aby powstał tekst „EmilianoJames”.
    12. Wydrukuj najdłuższe zdanie z pliku paper3.txt.
    13. Wydrukuj drugi wyraz z ostatniego zdania z pliku paper3.txt.
    14. Napisz funkcję, która zapyta użytkownika o liczby x i y, a następnie obliczy działanie:


    15. Napisz funkcję, która zapyta użytkownika o Twoje ulubione danie oraz jak często jesz to danie. Jeśli jesz to danie cztery razy w tygodniu lub więcej, to wydrukuj komunikat: „Ty naprawdę kochasz DANIE!”. Jeśli jesz to danie rzadziej, to wydrukuj komunikat: „DANIE to dobre danie, ale nie najlepsze.” Za DANIE podstaw tekst, który wpisałeś/-aś, korzystając z operatora %s.

  15. 2024-01-23: Final test - winter semester
  16. 2024-02-29: NLTK book, Chapter 2, Section 1.2-1.8: Accessing Text Corpora
    Warunki zaliczenia semestru letniego 2024
  17. 2024-03-07: NLTK book, Chapter 2, Section 2: Conditional Frequency Distributions
  18. 2024-03-14: NLTK book, Chapter 2, Section 3: More Python: Reusing Code and Section 4.1-2: Lexical Resources
  19. 2024-03-21: NLTK book, Chapter 2, Section 4.2-4: Lexical Resources
  20. 2024-03-28: NLTK book, Chapter 2, Section 5: WordNet and final exercises
  21. 2024-04-11: Exercises on the command line (Terminal)

    Download: exercises in ODT format, PDF format, DOS-exercises.zip folder.

    • cd - shows the present working directory/folder (pwd command in Linux)
    • tree /f - shows a tree structure of directory/folder
    • type - shows the content of a file, e.g. type file01.txt
    • dir *part_of_filename* /s => finds files which contain given text in the filename. In the example below, the command looks for the word 'encoding' in the filename.
      /s => tells the dir command to search the current directory and all sub directories.

      C:\Users\Jola\Documents\Teaching>dir *encoding* /s.

       Wolumin w stacji C to OS
       Numer seryjny woluminu: 982B-4B29
      
       Katalog: C:\Users\Jola\Documents\Teaching\Teaching2013_2014\Systemy_pisma
      
      2013-10-23  17:31            16 200 2013-10-17_encoding_systems.odp
      2013-10-23  17:31            90 664 2013-10-17_encoding_systems.pdf
                     2 plik(ów)            106 864 bajtów
      
       Katalog: C:\Users\Jola\Documents\Teaching\Teaching2015_2016\Systemy_pisma
      
      2015-10-22  12:40            16 310 2015-10-15_encoding_systems.odp
      2015-10-22  12:40           122 425 2015-10-15_encoding_systems.pdf
                     2 plik(ów)            138 735 bajtów
      
           Razem wymienionych plików:
                     4 plik(ów)            245 599 bajtów
                     0 katalog(ów)   3 477 344 256 bajtów wolnych
      
      
      
    • findstr => finds a given string (text) in a certain text file or any file.
      1. In the 1st example, the word "echo" is looked for in the file 'DOS-exercises.txt'
        C:\Users\Jola\Documents\Teaching\>findstr "echo" Dos-exercises.txt
      2. In the 2nd example, the word "Jola" is looked for in any text file with the .txt extension.
        C:\Users\Jola\Documents\Teaching\>findstr "Jola" *.txt
        new_file.txt:Jola ma kota.
        test.txt:Jola ma kota
    • xcopy /s - copy the content of the folder with the subfolders. In the example, copy folder: '2015-10-22-DOS' to 'here' marked by the dot '.' 'Here' in the example is the Desktop: 'C:\Users\Jola\Desktop'

      C:\Users\Jola\Desktop>xcopy /s c:\Users\Jola\Documents\Teaching\Teaching2015_2016\Jezyki_skryptowe\2015-10-22-DOS .
    • mkdir - creates a new directory/folder
      c:\Users\Jola\Documents\Teaching\Teaching2017_2018\Jezyki_skryptowe\2018-03-01>mkdir EXERCISES

      c:\Users\Jola\Documents\Teaching\Teaching2017_2018\Jezyki_skryptowe\2018-03-01>dir
       Wolumin w stacji C to OS
       Numer seryjny woluminu: 982B-4B29
      
       Katalog: c:\Users\Jola\Documents\Teaching\Teaching2017_2018\Jezyki_skryptowe\2018-03-01
      
      2018-03-01  10:50  <DIR>  .
      2018-03-01  10:50  <DIR>  ..
      2018-03-01  10:46  274    2018-03-01_exercises.txt
      2018-03-01  09:51  <DIR>  DOS-exercises
      2018-03-01  09:50  115 465 DOS-exercises.pdf
      2018-03-01  09:50  39 682 DOS-exercises.zip
      2018-03-01  10:50  <DIR>  EXERCISES
                      3 plik(ów)          155 421 bajtów
                      4 katalog(ów) 1 368 072 192 bajtów wolnych
    • rmdir - removes a directory/folder
    • rmdir /s - removes a directory/folder with subdirectories

    Substitute commands for Linux: Windows vs. Linux

    1. cd <=> pwd (present working directory)
    2. dir <=> ls (list directory)
    3. type <=> cat
    4. copy con <=> touch
    5. move <=> mv
    6. copy <=> cp
    7. del <=> rm
    8. tree <=> ls -R
    9. find <=> grep

    Ćwiczenia:
    1. Wydrukuj wszystkie pliki PDF, które są na Pulpicie.
    2. Stwórz nowy folder w swoich dokumentach za pomocą funkcji "mkdir".
    3. Skopiuj wszystkie pliki PDF z Pulpitu do nowego folderu w swoim nowo powstałym folderze.
    4. Wydrukuj tylko te pliki z Pulpitu, które zawierają wyraz "Praat".

  22. 2024-04-18: NLTK book, Chapter 3, Regular Expressions for Detecting Word Patterns
  23. 2024-04-25: NLTK book, Chapter 3, Useful Applications of Regular Expressions
  24. 2024-05-09: NLTK book, Chapter 3, Normalizing Text and Regular Expressions for Tokenizing Text

    Homework: Do the exercise 6, 7, 24 and 25 at the end of Chapter 3.

  25. 2024-05-16: INPUT/OUTPUT filehandles

    File operations: reading files and writing to files

  26. 2024-05-23: INPUT/OUTPUT filehandles

    Treść zadania, które było wykonane w klasie:
    # 1 - Stwórz plik tekstowy z danymi.
    # 2 - Poproś użytkownika o podanie nazwy pliku, który chce przeszukać.
    # 3 - Zapytaj użytkownika, jakiego znaku poszukuje.
    # 4 - Zapytaj użytkownika, na jaki znak zamienić szukany znak.
    # 5 - Przeszukaj plik i policz, ile razy szukany znak wystąpić w pliku
    # oraz zamień go zgodnie z życzeniem użytkownika.
    # 6 - Tekst ze zamienionymi znakami wydrukuj do pliku zewnętrznego 'output.txt'.
    # 7 - Wydrukuj liczbę wskazanych znaków na ekran.

    Homework: Do the following tasks.

    1. 1 - Poproś użytkownika o podanie liczb a i h, aby obliczyć pole trójkąta (a, h).
      2 - Oblicz pole i wydrukuj wyniki na pliku zewnętrzenego.
      3 - Powtórz te obliczenia trzy razy z innymi danymi (stwórz pętlę for).
    2. 1 - Wczytaj plik tekstowy, który ma trzy kolumny: (1) imię, (2) nazwisko rodowe, (3) nazwisko
      2 - Pobierz nazwiska z trzeciej kolumny i użyj w pytaniu, np.: "Jak się masz, Tomaszczyk?"
      3 - Do pliku zewnętrzego wydrukuj nazwiska z trzeciej kolumny oraz odpowiedź użytkownika.

      Format plik wejściowego:

      Joanna Krzyżanowska Tomaszczyk
      Tomasz Górski Górski
      Marcelina Nowak Kowalska

      Format plik wyjściowego:

      Tomaszczyk	dobrze
      Górski	źle
      Kowalska	świetnie

  27. 2024-06-06:

    Tekst do zadania "foreign":

    Foreign is a afafafa word. I like foreign films. Who is forrein in this fantastic class? 
    Foreing is not spelled this way. Foren languages are my passion.

    Tekst do zadania "phones":

    Telephones are everywhere nowadays. One can't imagine
    life without a mobilephone. Mobilephones connect people and make us feel closer.
    I posses three phones myself.
  28. 2024-06-13: Revision exercises
    1. Wydrukuj do pliku zewnętrzenego "output.txt" w folderze "2024-06-13" swoje imię z literami jedną pod drugą (w pętli "for"). Następnie zapytaj użytkownika o jakąś liczbę i dodaj do niej 20. Wydrukuj sumę do tego samego pliku.
    2. Stwórz listę z poniższymi wyrazami:
      programming, Python, prgrming, python, Programing, to program

      Napisz wyrażenie regularne, które znajdzie różne warianty wyrazu "programming". Skorzystaj z re_show i pętli "for".

    3. Masz dany tekst:
      I have television. teleWizor I like my TeeeeleWizor, and I have many tlviiiiisions

      Napisz wyrażenie regularne, które odpowiada różnym pisowniom wyrazu "telewizor". Policz, ile jest tych wyrazów.
      Przykładowe działanie programu:

      ['television', 'teleWizor', 'TeeeeleWizor', 'tlviiiiisions']
      The word 'telewizor was found 4 times.
    4. Wczytaj plik tekstowy, który zawiera poniższy tekst. Policz, ile jest wierszy w pliku. Zamień partykułę "nie" na "tak" i wydrukuj zmieniony tekst na ekran.
      Ja nie mam ochoty.
      Zapomnienie.
      Co to, to nie.
      Nie ma mnie.
      Niezmiernie niezadowolony człowiek nie ma czasu na wniesienie walizek.
    5. Wydrukuj indeksy (miejsce występowania) partykuły "nie" z pliku z zadania 4. Najpierw przeprowadź tokenizację:
      ['Ja', 'nie', 'mam', 'ochoty', '.', 'Zapomnienie', '.', 'Co', 'to', ',', 'to', 'nie', '.', 'Nie', 'ma', 'mnie', '.']

      W pętli "for" z funkcją enumerate, wskaż indeksy partykuły "nie".

      1
      11
      13
    6. Wczytaj plik tekstowy "text_for_taks6_0.txt" i wydrukuj trzecią linijkę oraz jej długość.
    7. Zsumuj w pętli "for" liczby od 5 do 10 i wydrukuj sumę do pliku zewnętrznego "suma.txt"
    8. Stwórz plik z listą wyrazów (poza Pythonem). Znajdź najdłuższy wyraz w tym pliku.
  29. 2024-06-17: Revision exercises
    1. 1 – Ściągnij i wczytaj plik chairman.txt. Plik znajduje się tutaj: http://bachan.speechlabs.pl/files/chairman.txt

      2 - Za pomocą funkcji re_show znajdź rożne pisownie wyrazu "chairman".
      3 – Znajdź wszystkie liczby w pliku i wydrukuj.
      4 – Policz, ile jest wszystkich wyrazów/tokenów w pliku.
      Przykładowe działanie programu:

      Poznan, 2018-05-24
      Task 1
      
      I am wondering about a word {chairman} at least 6 times. Can a woman be a {Chairman}? 
      Maybe it is better to say a chairperson? {Chairrrrrmannnn}!!! Does it sound very masculine? 
      Even if I say this 1000 times for me it is neutral. I would say {charman} may also be a woman. 
      And what do you think about the word '{chaiman}'?
      ['2018', '05', '24', '1', '6', '1000']
      77
      
    2. 1 – Wczytaj plik pandemic_0.txt, który zawiera następujący tekst:
      What a tragedy! 2020 is a totally different year because of the viiiirus. Who could predict in 2019 that in 2020 students in many countries will take online tests because of pandemic of Covid-19?! The other name of this deadly Vairuuuuus is SARS-Cov-2. I hate this viiirs!
      2 – Napisz wyrażenie regularne, które znajdzie wszystkie formy zapisu wyrazu „virus”. Wydrukuj te wyrazy. → Są 3 wyrazy „virus”: viiiirus, Vairuuuuus, viiirs.
      3 – Policz i wydrukuj, ile jest wyrazów „virus” zapisanych w różny sposób w pliku.
      4 - Policz, ile jest różnych typów wyrazów. Wydrukuj posortowane wyrazy unikatowe na ekran oraz ich liczbę.
      5 – Napisz wyrażenie regularne, które znajdzie wszystkie wyrazy/tokeny, które zawierają
      same cyfry albo kombinację liter, myślników i cyfr. Zamień te tokeny na „XXXX” i wydrukuj zmieniony tekst na ekran. Poprawnie zamieniony tekst powinien wyglądać tak :
      What a tragedy! XXXX is a totally different year because of the viiiirus. Who could predict in XXXX that in XXXX students in many countries will take online tests because of pandemic of XXXX?! The other name of this deadly Vairuuuuus is XXXX. I hate this viiirs!
    3. 1 – Zapytaj użytkownika o 5 liczb i stwórz z nich listę z liczbami.
      2 – W pętli for zsumuj te liczby i wydrukuj sumę na ekran.
      3 – Zapytaj użytkownika o podanie nazwy pliku.
      4 – Utwórz plik o nazwie podanej przez użytkownika w punkcie 3.
      5 – Wydrukuj do tego pliku sumę liczb.