Zamiast klikać, napisałam kod. Historia skryptu, który oszczędził dni pracy.
Stajesz przed nowym, ekscytującym projektem. Masz zbudować dla klienta dedykowane narzędzie oparte na solidnej bazie danych. Jest tylko jeden problem: cała wiedza, całe „złoto”, które ma zasilić tę bazę, jest zamknięte w setkach stron plików PDF.
To był dokładnie mój punkt wyjścia. Stanęłam przed wyborem. Mogłam pójść drogą na skróty: otworzyć każdy PDF i ręcznie przekopiować setki pytań i odpowiedzi. Zadanie wykonalne, ale piekielnie żmudne, powolne i proszące się o błąd. Wiedziałam, że to pułapka, zwłaszcza że klient planował w przyszłości dosyłać kolejne pliki.
Wybrałam drugą drogę, którą uwielbiam. Zamiast spędzać godziny na klikaniu, postanowiłam zainwestować ten czas w napisanie prostego, ale potężnego narzędzia – konwertera w Pythonie, który wykona całą pracę za mnie.
Gdy diabeł tkwi w formatowaniu
Pierwszy krok – wyciągnięcie surowego tekstu z plików PDF za pomocą biblioteki pdfplumber – poszedł gładko. Prawdziwe wyzwanie zaczęło się później. Okazało się, że każdy PDF, choć pozornie identyczny, miał swoje małe „widzimisię”: a to dodatkowy odstęp, a to inny znak nowej linii. Te drobne anomalie sprawiały, że proste metody oddzielania pytań od odpowiedzi zawodziły. Tekst był chaotyczną mieszanką, która wymagała inteligentnego podejścia.
Moja broń: Wyrażenia regularne (RegEx)
W walce z nieustrukturyzowanym tekstem moją tajną bronią są wyrażenia regularne. To jak dać komputerowi supermoc rozumienia wzorców w tekście. Zamiast mówić mu „szukaj litery A”, mówię mu: „znajdź mi linijkę, która zaczyna się od litery A, po której może być gwiazdka, potem dowolna spacja, a następnie przechwyć wszystko aż do końca linii”.
Dzięki bibliotece re w Pythonie stworzyłam precyzyjne wzorce, które potrafiły „wyłuskać” z chaosu dokładnie te dane, których potrzebowałam. Poniższy fragment kodu to serce mojego automatu – logiką, która analizuje blok tekstu, identyfikuje pytanie i poprawną odpowiedź, a następnie składa je w uporządkowaną strukturę.
# Fragment kodu, który z bloku tekstu wyciąga pytanie i odpowiedź
for i in range(1, len(blocks), 2):
content = blocks[i + 1].strip()
# Użycie RegEx do znalezienia poprawnej odpowiedzi (zaczynającej się od 'A')
match = re.search(r'^A\s*(\*?)\s*(.+)', content, re.MULTILINE)
if match:
# Wyłuskanie odpowiedzi i reszty tekstu (który jest pytaniem)
correct_answer = match.group(2).strip()
question_text = re.split(r'^A\s*(\*?)\s*(.+)', content, maxsplit=1, flags=re.MULTILINE)[0].strip()
# Oczyszczenie i dodanie do finalnej listy
questions.append({
"questionText": question_text,
"correctAnswerText": correct_answer
})
Na końcu skrypt zapisywał wszystkie dane w czystym, ustrukturyzowanym pliku JSON, gotowym do zasilenia głównej bazy danych.
Efekt? Godziny zamienione w sekundy
Rezultat tej pracy był transformujący. Proces, który ręcznie zająłby mi wiele dni żmudnego kopiowania, skrócił się do kilku minut. Co ważniejsze, stworzyłam skalowalne rozwiązanie. Gdy za miesiąc klient przyśle nową partię plików PDF, aktualizacja bazy danych będzie błyskawiczna i bezbłędna.
Uwielbiam takie projekty, bo pokazują prawdziwą moc kodu. To nie była budowa skomplikowanego systemu, ale stworzenie małego, prostego narzędzia, które rozwiązało jeden, ale za to bardzo uciążliwy problem. Czasem taki inteligentny skrypt przynosi więcej wartości biznesowej niż największe aplikacje, uwalniając nas od nudnych zadań i pozwalając skupić się na kreatywnej pracy.
Czy w Twojej firmie jest proces, w którym ktoś godzinami ręcznie przekleja dane z jednego miejsca w drugie? A może toniesz w dokumentach, z których dane trzeba przenieść do systemu?
Zapraszam na bezpłatną konsultację. Porozmawiajmy o tym, jak mały, sprytny automat mógłby zaoszczędzić Twój czas i pieniądze.
