3. Wczytywanie treści z różnych formatów

Wczytanie pliku nie jest tym samym co poprawne odczytanie jego znaczenia. Program może zakończyć pracę bez błędu, a wynik nadal może mieć pomieszaną kolejność, pominięte zdanie albo elementy menu w środku instrukcji. Dlatego odczyt trzeba porównać z oryginałem.

1. Cztery formaty, różne pułapki

TXT przechowuje tekst bez rozbudowanego układu. Trzeba poprawnie rozpoznać kodowanie i zachować znaki oraz istotne przejścia do nowego wiersza. Markdown dodaje oznaczenia nagłówków, list i bloków kodu. Usunięcie wszystkich znaków #, - i wcięć bez rozpoznania ich roli może zniszczyć strukturę lub treść polecenia.

PDF opisuje wygląd stron. Tekst widoczny dla człowieka może zostać wyodrębniony w innej kolejności, z nagłówkami i stopkami albo ze słowami podzielonymi na końcu wiersza. Skan strony może nie mieć warstwy tekstowej. Pusty wynik ekstrakcji nie dowodzi wówczas, że dokument jest pusty; oznacza potrzebę rozpoznania typu PDF i ewentualnego OCR, a potem kontroli jego wyniku.

HTML zawiera treść oraz strukturę strony. Nawigacja, stopka i skrypty nie powinny automatycznie stać się wiedzą asystenta. W kontrolowanym przykładzie treść znajduje się w elemencie main. Na innej stronie należałoby sprawdzić jej rzeczywistą budowę, a nie zakładać, że ten sam wybór zawsze wystarczy.

Format Co chcemy zachować Co sprawdzamy w pierwszej kolejności
TXT Zdania, komendy i kolejność kroków Polskie litery, końce wierszy
MD Nagłówki, listy, kod i treść Granice sekcji i dosłowne znaki
PDF Treść oraz rzeczywisty numer strony Kolejność, tabele, dzielenie słów, brak tekstu
HTML Główną treść z nagłówkami Menu, stopkę, skrypty i granice akapitów

2. Zapisuj odczyt jako osobny etap

Po ekstrakcji zachowujemy tekst surowy (raw_text), identyfikator dokumentu, identyfikator rekordu i lokalizator. W naszym zestawie TXT, MD i HTML dają po jednym rekordzie, a PDF dwa — po jednym na stronę. Cztery wybrane pliki dają więc pięć rekordów. Liczba dokumentów, rekordów i późniejszych fragmentów nie musi być taka sama.

Numer strony powinien wskazywać rzeczywistą stronę PDF liczoną od 1. Dla TXT, MD i HTML nie przypisujemy stron udających paginację: wpisujemy null. Sekcja dokumentu może pomóc w odnalezieniu treści, lecz nie staje się z tego powodu stroną PDF. Surowy tekst przechowujemy przed czyszczeniem, aby móc porównać efekt kolejnych operacji.

3. Przykład HTML: widok strony a wiedza

W pomoc.html występują następujące elementy. Cytaty poniżej dostarczają wszystkich danych potrzebnych do ćwiczenia.

Nawigacja: Start | Kontakt | Następna strona.

Treść główna — sekcja „Błąd połączenia”:

Gdy aplikacja zgłasza brak połączenia, sprawdź stan usługi i adres w konfiguracji. Jeżeli usługa działa, zapisz dokładny komunikat i przekaż go administratorowi. Nie zmieniaj uprawnień plików bez ustalenia przyczyny.

Treść główna — sekcja „Kontrola znaków”:

Tekst kontrolny: Zażółć gęślą jaźń. Zachowaj nazwy docassist-api i --no-pager oraz jednostki: 25°C, ±5%, ≤10 ms.

Stopka: Stopka techniczna strony. Skrypt: const menu='Nawigacja';

Dobry odczyt zachowuje oba nagłówki i oba akapity treści głównej. Menu, stopka techniczna i kod skryptu są w tym przykładzie elementami otoczenia strony. Usunięcie tagów przez proste sklejenie tekstu bez separatorów mogłoby połączyć koniec nagłówka z początkiem zdania. Po odczycie sprawdzamy zatem także granice tekstu.

4. Przykład PDF: wynik wymaga porównania

W dwustronicowym docassist.pdf strona 1 opisuje wymagania stanowiska: minimum 8 GB RAM i 2 GB wolnego miejsca. Strona 2 omawia diagnostykę, w tym timeout_seconds o wartości 30 s. To parametry fikcyjnej aplikacji, nie zalecenia sprzętowe dla lokalnego modelu językowego ani gwarantowany czas obsługi zgłoszenia.

Na stronach występuje powtarzany nagłówek „Dokumentacja techniczna DocAssist | materiał ćwiczeniowy” i stopka „Strona 1 z 2” lub „Strona 2 z 2”. W tekście strony 1 występuje również podział konfigu- na końcu wiersza i racji na początku następnego. Odczyt może poprawnie zachować wszystkie te znaki, mimo że później część z nich trzeba będzie świadomie oczyścić.

Rozpoznaj etap błędu. Jeżeli odczyt nie zawiera zdania widocznego w oryginale, najpierw napraw ekstrakcję. Jeżeli je zawiera, ale razem ze stopką, rozważ regułę czyszczenia. Czyszczenie nie odzyska treści, której nigdy nie odczytano.

5. Ćwiczenie 2 — oceń odczyt

Dla sekcji „Błąd połączenia” porównaj dwa wyniki z oryginałem przytoczonym wyżej:

Wynik A: „Start | Kontakt | Następna strona. Gdy aplikacja zgłasza brak połączenia, sprawdź stan usługi i adres w konfiguracji. Jeżeli usługa działa, zapisz dokładny komunikat i przekaż go administratorowi. Nie zmieniaj uprawnień plików bez ustalenia przyczyny. Stopka techniczna strony”.

Wynik B: „Gdy aplikacja zgłasza brak połączenia, sprawdź stan usługi i adres w konfiguracji. Jeżeli usługa działa, zmień uprawnienia plików”.

  1. Wskaż szum w A. Czy zasadnicza treść sekcji została zachowana?
  2. Opisz zmianę znaczenia i brakującą treść w B. Czy samo usunięcie szumu naprawi ten wynik?
  3. Zapisz oczekiwany zestaw lokalizatorów dla odczytu czterech aktywnych plików, gdy PDF dzielimy na strony. Ile rekordów powstanie?
  4. Co należy zrobić, gdy skan PDF daje pusty tekst? Czy można go od razu oznaczyć jako poprawnie przetworzony?
  5. Wybierz cztery ciągi z sekcji „Kontrola znaków”, które wykorzystasz do sprawdzenia odczytu znaków i jednostek.

Wynik: krótka ocena dwóch odczytów oraz plan kontroli formatów i lokalizatorów.

Sprawdź rozumienie

Dlaczego brak wyjątku programu nie wystarcza do uznania odczytu za poprawny? Czy stronę 2 PDF można zastąpić drugim akapitem TXT? Co zyskujesz, zachowując tekst surowy przed czyszczeniem?

Przejście do praktyki: R2 tworzy documents_extracted.json i kontrola_odczytu.json. Wątpliwości o utraconej treści rozstrzygnij przed R3.

Przygotowanie dokumentów i bazy wiedzy
ENHANCER+ · Politechnika Warszawska · materiał do samodzielnej nauki offline