Wróćmy do naszego programu zaopatrzeni w umiejętności z części 12. Usunięcie z naszego tekstu ciągu znaków „przypisek t d m” nie sprawi nam kłopotu, użyjemy po prostu metody .replace():
tekst = "Tutaj pojawi sie przypisek t d m i chcemy się go pozbyć. \
Nawet jeśli przypisek t d m pojawi się po raz drugi."
tekst = tekst.replace("przypisek t d m ", "")
print(tekst)
Spójrzmy na efekt:
======================== RESTART: F:/python38/wpis 13.py =======================
Tutaj pojawi się i chcemy się go pozbyć. Nawet jeśli pojawi się po raz drugi.
>>>
A jak pozbyć się wszystkiego, co jest przypisami? Na to też poznaliśmy sposób. Zastosujemy metodę .split(). Zobaczmy przykład:
tekst = """Pan Józef sięgnął do portfela, wydobył banknot dwudziestozłotowy i podał chłopcu.
— To masz na cukierki. Za każde dobre świadectwo będziesz dostawał tyle. Idź z Bogiem, chłopcze, a pamiętaj, co ci powiedziałem.
Podał mu rękę do pocałowania, Natce skinął głową. Audiencja była skończona.
Teraz wyjął grube cygaro i zostawszy sam, zapalił, patrząc przez misterne kółka dymu na dwa posążki chińskie kiwające mu z aprobatą porcelanowymi głowami.
Przypisy:
1. cztoż prikażetie (ros.) — cóż pan powie. [przypis edytorski]
2. goworitie, pożałujsta, ja ponimaju (ros.) — niech pan mówi, proszę, ja rozumiem. [przypis edytorski]
3. nu, konieczno radujetieś, cztoż dalsze — więc oczywiście cieszy się pan, cóż dalej. [przypis edytorski]
"""
podzielony_tekst = tekst.split("Przypisy:")
print(f"interesująca cześć książki: \n{podzielony_tekst[0]}")
print(f"reszta z przypisami: {podzielony_tekst[1]}")
W 22 linijce dzielimy string na listę a w linijkach 24 i 25 drukujemy efekt podziału celem sprawdzenia skuteczności. Zobaczmy efekt:
======================== RESTART: F:\python38\wpis 13.py =======================
interesująca cześć książki:
Pan Józef sięgnął do portfela, wydobył banknot dwudziestozłotowy i podał chłopcu.
— To masz na cukierki. Za każde dobre świadectwo będziesz dostawał tyle. Idź z Bogiem, chłopcze, a pamiętaj, co ci powiedziałem.
Podał mu rękę do pocałowania, Natce skinął głową. Audiencja była skończona.
Teraz wyjął grube cygaro i zostawszy sam, zapalił, patrząc przez misterne kółka dymu na dwa posążki chińskie kiwające mu z aprobatą porcelanowymi głowami.
reszta z przypisami:
1. cztoż prikażetie (ros.) — cóż pan powie. [przypis edytorski]
2. goworitie, pożałujsta, ja ponimaju (ros.) — niech pan mówi, proszę, ja rozumiem. [przypis edytorski]
3. nu, konieczno radujetieś, cztoż dalsze — więc oczywiście cieszy się pan, cóż dalej. [przypis edytorski]
>>>
Upewnijmy się, czy na pewno w naszych książkach string „Przypisy:” występuje tylko raz. Użyjemy do tego kawałka kodu naszego głównego programu:
from os import listdir
sciezka = "F:\\python\\ids\\"
pliki = listdir(sciezka)
#dla każdego pliu w katalogu
for plik in pliki:
#otwórz książki z przypisami
if plik == "Dziecko salonu - Janusz Korczak.txt" or \
plik == "Kiedy znow bede maly - Janusz Korczak.txt" or \
plik == "Bankructwo malego Dzeka - Janusz Korczak.txt":
#otwórz plik
ksiazka = open(sciezka + plik, mode="r", encoding = "utf-8")
tekst = ksiazka.read()
#podziel tekst na książkę i przypisy
podzielony_tekst = tekst.split("Przypisy:")
#potwierdź, że string podzielił się na tylko 2 listy
print(len(podzielony_tekst))
Zobaczmy efekt:
======================== RESTART: F:\python38\wpis 13.py =======================
2
2
2
>>>
Świetnie, zbierzmy teraz wszystko razem i przygotujmy ostateczne wersje naszych 3-gramów!
from os import listdir
import re
from collections import Counter
sciezka = "F:\\python\\ids\\"
pliki = listdir(sciezka)
#dla każdego pliu w katalogu
for plik in pliki:
#otwórz plik
ksiazka = open(sciezka + plik, mode="r", encoding = "utf-8")
tekst = ksiazka.read()
#usuń kłopotliwe przypisek T. D. M. i przypisy
if plik == "Pamietnik pani Hanki - Tadeusz Dolega-Mostowicz.txt":
tekst = tekst.replace("(Przypisek T. D. M.)","")
elif plik == "Dziecko salonu - Janusz Korczak.txt" or \
plik == "Kiedy znow bede maly - Janusz Korczak.txt" or \
plik == "Bankructwo malego Dzeka - Janusz Korczak.txt":
tekst = tekst.split("Przypisy:")[0]
#przygotuj tekst do zliczania powtórzeń słów
tekst = tekst.replace("\n", " ")
tekst = tekst.lower()
tekst = re.sub("[^a-z ąćęłńóśóżź]", "", tekst)
tekst = re.sub(" +", " ", tekst)
wyrazy = tekst.split()
lista_trzech_wyrazow = []
#utwórz listę trzech kolejnych wyrazów
for indeks in range(len(wyrazy) - 2):
trzy_wyrazy = " ".join(wyrazy[indeks:indeks + 3])
lista_trzech_wyrazow.append(trzy_wyrazy)
#utwórz słownik zliczający liczbę powtórzeń trzech kolejnych wyrazów
liczba_trzygramow = Counter(lista_trzech_wyrazow)
#zapisz słowniki do pliku
trzygramy_txt = open(f"{sciezka}trzygramy{plik}", mode="w", encoding = "utf-8")
trzygramy_txt.write(str(liczba_trzygramow))
trzygramy_txt.close()
Uruchom program i sprawdź, czy jesteś zadowolony z jego działania.
Udało się nam zrobić coś bardzo fajnego, a to jeszcze nie koniec! W następnej części nauczysz się, jak zapisać zliczone 3-gramy w bardziej przyjaznym formacie. Formacie, który pozwoli na dalszą obróbkę i wizualizację wyników.
Zadanie domowe
Podążanie za instrukcjami, nawet jeśli je wszystkie wykonujesz samodzielnie, nie zrobi z ciebie programisty. Zadania domowe mogą wydawać się na początku trudne. Tu nie ma rozwiązania podanego na talerzu, użyj dowolnych źródeł, by znaleźć odpowiedź.
- Skopiuj do pliku tekstowego 5 pierwszych artykułów z pudelek.pl, do drugiego pliku tekstowego skopiuj 5 pierwszych artykułów z polityka.pl. Użyj swoich umiejętności, by policzyć średnią liczbę słów w zdaniu w jednym i drugim pliku. Pamiętaj, że zdania kończą się nie tylko kropką!
- Wyciągnij wnioski z zadania 1.