Sakupljamo zvanične najave isključenja vode, struje i grejanja u Beogradu na jedno mesto i pretvaramo ih u pretraživu listu sa tačnim kućnim brojevima i mapom.
Na ovoj stranici otvoreno objašnjavamo svaki korak, od zvanične najave do tačke na mapi, i kako sprečavamo da se greške provuku u podatke.
Na svakih sat vremena automatski proverimo zvanične stranice komunalnih preduzeća i grada, pa svaku novu najavu pročitamo, lociramo i proverimo pre nego što je prikažemo.
Svakog sata povučemo najnovije najave sa devet zvaničnih stranica (vodovod, elektrodistribucija, toplane, gradski portal).
Najveći deo teksta obradimo algoritamski, po preciznim pravilima. Ono što pravila ne uhvate ide u drugi sloj, veštačku inteligenciju.
Ulice i raspone kućnih brojeva razrešavamo preko zvaničnog adresnog registra (RGZ), pa svaku tačku postavimo na mapu.
Periodično proveravamo tačnost: deo radi čovek, deo napredniji modeli koji pregledaju rad manje naprednih.
Sve se objedini u jednu pretraživu listu sa mapom, grupisanu po opštini i danu.
Svaki izvor piše drugačije, pa čitanje radimo u dva sloja. Ovaj redosled je nameran: deterministička pravila daju isti rezultat svaki put i lako se proveravaju, a slobodan tekst prepuštamo veštačkoj inteligenciji samo tamo gde pravila ne mogu.
Strukturirane najave (tabele elektrodistribucije, spiskovi vodovoda) čitamo preciznim pravilima i obrascima koji prepoznaju ulice, brojeve, vreme i razlog. Brzo, pouzdano i predvidivo.
Najave pisane kao rečenice, koje pravila ne uhvate čisto, prosleđujemo sloju veštačke inteligencije koji razume prirodni jezik i izvuče iste podatke.
Najteži deo je pretvoriti reči u tačne kućne brojeve. Najava retko nabroji svaki broj: češće kaže „od raskrsnice sa ulicom X do broja Y" ili „cela ulica". Za to koristimo RGZ Adresni registar, zvaničnu bazu sa koordinatama preko 330.000 beogradskih adresa.
1. Nađemo sve adrese ulice. Iz registra povučemo svaki kućni broj date ulice zajedno sa njegovom tačnom koordinatom.
2. Odredimo opisani potez. Za „od X do Y" pronađemo te dve granične tačke i geometrijski izračunamo koji brojevi padaju u potez između njih, umesto da nagađamo.
3. Pratimo stvarni oblik ulice. Ulice nisu prave linije. Umesto grubog pravougaonika oko dve tačke, pratimo stvarni pravac ulice i biramo brojeve duž njega. Tako ispravno pokrijemo i zakrivljene i „L" ulice, gde bi pravougaonik preskočio deo brojeva ili ubacio susednu ulicu.
4. Postavimo na mapu. Svaki razrešeni potez dobije tačku na mapi, pa se isključenje vidi i geografski, ne samo kao tekst.
Pravougaonik oko dve tačke uhvati i susednu ulicu koja slučajno upadne u okvir.
Prateći stvarni pravac ulice uzmemo tačno brojeve na potezu, a susednu ulicu preskočimo.
Zato pored brojeva vidite oznaku „📍 RGZ": ona znači da su brojevi i lokacija izvedeni iz adresnog registra, a ne samo prepisani iz teksta.
Tekst najava krije nekoliko stalnih zamki. Za svaku imamo konkretno pravilo, i u svim slučajevima radije ostavimo prazno nego da upišemo nešto pogrešno.
| Zamka u tekstu | Kako je rešavamo |
|---|---|
| Najava navodi dan, ali ne i godinu („u sredu, 30. marta"). | Godinu uzimamo iz zvaničnog datuma objave najave. Kada tekst kaže „sutra" ili „danas", datum pomerimo u skladu s tim. |
| Ista ulica postoji u više opština, a najava ne kaže koja. | Opštinu potvrđujemo iz adresnog registra. Kada je ulica i dalje višeznačna, preuzimamo opštinu od susednih ulica iz iste najave, ali samo ako se ta opština zaista poklapa sa registrom. |
| Raspon je opisan rečima („od ulice X do broja Y"), bez brojeva. | Prevodimo ga u stvarne kućne brojeve preko geometrije ulice u registru (postupak opisan iznad). |
| Slobodan tekst koji pravila ne hvataju čisto. | Prosleđujemo ga sloju veštačke inteligencije koji razume rečenice. |
| Isto isključenje najavljeno na dva izvora (npr. vodovod i gradski portal). | Prepoznamo da je reč o istom događaju i spojimo ga u jedan unos, sa oba izvora. |
Tačnost ne prepuštamo slučaju. Periodično poredimo obrađene najave sa originalnim tekstom. Deo pregleda radi čovek, a deo rade napredniji modeli veštačke inteligencije koji proveravaju rad manje naprednih, slično kao kada iskusniji kolega pregleda rad mlađeg. Svaki unos dobije jednu od tri ocene, a nalazi se vraćaju kao ispravke i podešavanja koja sistem čine sve boljim.
Prikazani udeli su približni i menjaju se kako pristižu nove najave i kako se pregled nastavlja. Cilj nije „savršeno", nego pošteno i sve preciznije, sa otvoreno prikazanim greškama i njihovim ispravkama.