Projekt aplikacji mobilnej OCR · Oprogramowanie / OCR

Nowy, ekscytujący projekt: skrypt zasilający bazę danych aplikacji mobilnej OCR. Jeden problem – całe „złoto”, które ma tę bazę wypełnić, jest zamknięte w setkach stron plików PDF.
Był wybór. Droga na skróty: otworzyć każdy PDF i ręcznie przekopiować setki pytań i odpowiedzi. Wykonalne, ale piekielnie żmudne, powolne i proszące się o błąd – zwłaszcza że klient planował dosyłać kolejne pliki. Wybrałam drugą drogę, tę którą uwielbiam: zamiast godzin klikania, napisać prosty, ale potężny konwerter w Pythonie, który zrobi to za mnie.
Pierwszy krok – wyciągnięcie surowego tekstu z PDF-ów biblioteką pdfplumber – poszedł gładko. Prawdziwe wyzwanie zaczęło się później: każdy PDF, choć z pozoru identyczny, miał swoje „widzimisię” – a to dodatkowy odstęp, a to inny znak nowej linii. Proste metody oddzielania pytań od odpowiedzi zawodziły.
Tu wchodzi moja tajna broń: wyrażenia regularne (RegEx). To jak dać komputerowi supermoc rozumienia wzorców. Zamiast „szukaj litery A”, mówię: „znajdź linijkę zaczynającą się od A, po której może być gwiazdka, potem spacja, a potem przechwyć wszystko do końca linii”. Dzięki bibliotece re zbudowałam precyzyjne wzorce, które wyłuskiwały z chaosu dokładnie te dane:
# 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()
# RegEx znajduje poprawną odpowiedź (zaczynającą się od 'A')
match = re.search(r'^A*?s*(.+)', content, re.MULTILINE)
if match:
correct_answer = match.group(1).strip()
question_text = re.split(r'^A*?s*(.+)', content, maxsplit=1, flags=re.MULTILINE)[0].strip()
questions.append({
"questionText": question_text,
"correctAnswerText": correct_answer
})
Na końcu skrypt zapisywał wszystko w czystym, ustrukturyzowanym pliku JSON – gotowym do zasilenia bazy aplikacji.
Proces, który ręcznie zająłby wiele dni żmudnego kopiowania, skrócił się do kilku minut. Co ważniejsze – powstało rozwiązanie skalowalne: gdy klient przyśle nową partię PDF-ów, aktualizacja bazy będzie błyskawiczna i bezbłędna.
Uwielbiam takie projekty, bo pokazują prawdziwą moc kodu. To nie była budowa wielkiego systemu, ale małe, proste narzędzie, które rozwiązało jeden, za to bardzo uciążliwy problem. Czasem taki sprytny skrypt daje więcej niż największa aplikacja – uwalnia od nudy i zostawia czas na kreatywną pracę.
Ten skrypt to jedna strona projektu aplikacji OCR. O drugiej – algorytmie, który radził sobie z trybem jasnym i ciemnym – pisałam osobno tutaj.
Napisz, o co chodzi - nie musi być technicznie, od tego jestem ja. Odezwę się i powiem wprost, czy i jak mogę pomóc.