[Talk-ro] Introducing Phobos
Manuel R. Ciosici
manuelrciosici at gmail.com
Wed Dec 30 15:13:15 GMT 2009
Salut!
*Intro*
Vreau să vă povestesc despre un proiect la care lucrez și care mă
obsedează de vreo două luni. E vorba despre un robot (bot) care să
proceseze datele de pe Open StreetMap și să încerce să completeze
marcajele de pe OSM cu date de pe Wikipedia și invers.
*Detalii tehnice*
În urmă cu vreo săptămână sau două am început să scriu cod pentru
roboțel. Nu am găsit niciun framework de boți care să îmi convină și
nici nu am reușit să obțin un bot satisfăcător (ori de Wikipedia ori de
OSM) pe care să-mi bazez propriul bot așa că am început de la 0.
Tot codul e scris în PHP, folosește Zend Framework (mai exact
Zend_Http_Client) și rulează din linie de comandă. Bot-ul l-am denumit
*Phobos*.
*Facilități*
Momentan Phobos ia de la OSM xml-uri cu datele pentru regiunea care i se
pasează. După ce obține datele începe să treacă prin fiecare nod și să
îl paseze modulelor de verificare. Dintre modulele de verificare cel mai
mare și mai important e cel de Wikipedia.
/
Modulul de Wikipedia/
Colectează toate marcajele nodurilor după care încearcă să găsească
nodul respectiv pe Wikipedia. În cazul în care reușește (sau nodul are
deja pusă o legătură către Wikipedia) urmează să stabilească ce date pot
fi schimbate între cele două. Spre OSM pot să vină următoarele date de
pe Wikipedia:
* codul poștal (nu se aplică la orașele mari, cu coduri poștale
pentru fiecare stradă)
* populația
* numele județului
* legătura la articol (dacă nu e prezentă deja)
* imagine panoramică
De pe OSM spre Wikipedia pot să vină următoarele date:
* cod poștal (nu se aplică la orașele mari, cu coduri poștale pentru
fiecare stradă)
* populația
* coordonatele geografice
* numele județului
/Modulul de regiuni/
Verifică toate marcajele nodurilor după marcajul de județ (is_in:county)
după care verifică ca numele județului să fie unul valid. În cazul în
care numele județului nu este unul valid atenționează și așteaptă
corectura umană. În cazul în care este prezent numele județului și este
valid, dar nu este prezent numele țării adaugă numele țării (is_in:country).
/Modulul de caractere/
Are o listă de marcaje OSM care trebuie să se încadreze ca și valori în
anumite tipuri de caractere (doar litere, doar numere, alfanumerice) și
alertează în cazul în care găsește erori. Modulul mai verifică și:
* caracterele românești (ș și ț în loc de cele greșite ş și ţ) și le
înlocuiește
* ghilimele românești („” în loc de "") și le înlocuiește
* erori în mijlocul cuvintelor (cuvinte de forma: Br%ândușei) și
alertează în cazul găsirii lor
*Dezvoltare continuă*
Momentan Phobos nu trimite niciun fel de date spre OSM sau spre
Wikipedia și nici nu o să trimită până nu sunt destul de sigur că
funcționează corect. Momentan mai am de lucru la multe dintre
facilitățile descrise mai sus și la testarea și completarea interfeței
spre API-urile Wikipedia și OSM.
*Viitor*
1. În cazul verificărilor care doar trag alarme aș vrea să
construiesc un site pe care echipa română să poată să vadă
alarmele și să corecteze corespunzător datele.
2. Aș vrea să găsesc un algoritm care să determine dacă un anumit nod
se află sau nu pe teritoriul unei țări (sau județ). În felul ăsta
marcajele „is_in:county”, „is_in:country” și „is_in” ar putea fi
adăugate aproape tuturor nodurilor din țară. Și în cazul nodurilor
care au atașate marcajele de adresă ar putea fi adăugat în mod
automat „addr:country”. Tot cu un asemenea algoritm aș putea
foarte ușor procesa toate nodurile din România și numai nodurile
din România (deci în cazul pasării de coordonate care includ și
teritorii ale altor țări nodurile din afara României ar fi lăsate
în pace).
3. O listă (tot pe site) a nodurilor care nu respectă regulile OSM
(marcaje adăugate în mod necorespunzător.
4. Aș vrea să extind modulul de Wikipedia și pentru „castle”,
„memorial”, „monument”, „ruins”, „wreck”, „museum” și altele.
5. Trebuie să îmbunătățesc și să testez mai mult regex-urile din cod.
De fapt tot bot-ul trebuie testat mai amănunțit.
*Exemple
*Formatul fișierului cu datele de ieșire din Phobos este:
=================================
<Nume localitate> <Județ (dacă există)>
Array
(
datele care vin dinstre Wikipedia
)
Array
(
datele care ar trebui adăugate pe Wikipedia
)
Ocazional aici apar alertele
=================================
La sfărșitul fișierului apare timpul pentru care a rulat Phobos. Timpii
relativ mari având în vedere că Phobos e scris în PHP și folosește
SimpleXML pentru a traversa fișierele XML. Dar, pentru domeniul de
utilizare al lui Phobos timpul mi se pare irelevant. (Eu mi-l imaginez
ca o sarcină programată în cron și care rulează o dată pe săptămână
pentru toată țara).
/Exemplul 1/
Vezi fișierul /rezultate_tara.txt/. Primele linii ale fișierului arată
argumentele pe care le-am pasat din linia de comandă. Le-am pus acolo ca
să pot să arăt coordonatele pentru care a rulat Phobos. Făcând
abstracție de mesajele de eroare de care o să trebuiască să mă ocup se
poate observa că shimbul de date între Wikipedia și OSM în cazul zonei
pe care am ales-o tinde să fie egal. De asemenea cantitatea de date care
ar fi de schimbat mi se pare destul de mare.
Locuri de remarcat:
* linia 2177: o alertă (poate falsă) de caractere ciudate
* liniile 854 până la 862 pentru un rezultat eronat datorat
denumirii greșite de pe OSM
/Exemplul 2
/Al doilea exemplu (vezi rezultatele în /rezultate_Arad_osm.txt/) nu se
conectează direct la OSM ci folosește un fișier .osm local (vezi
/Arad.osm/ din atașament). /Arad.osm/ este un fișier generat de jOSM. Am
pus aici al doilea exemplu pentru că poate să fie mai relevant pentru
Phobos deoarece poate fi consultat fișierul .osm. În exemplul acesta
coordonatele de la începutul fișierului sunt irelevante.
Locuri de remarcat:
* linia 52: o alertă corectă asupra unor caractere ciudate
*În loc de încheiere*
Nu m-am hotărât sub ce licență o să fie codul sursă, dar în mod sigur o
să fie sub una dintre cele open source (GPL, MIT, BSD, etc). Aș vrea
niște feedback de la voi asupra lui Phobos (eventual și niște idei) și
aș vrea să știu care sunt pașii pentru a obține permisiunea comunității
pentru rularea lui Phobos pe România.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/talk-ro/attachments/20091230/dba91661/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Arad.osm
Type: text/xml
Size: 4534689 bytes
Desc: not available
URL: <http://lists.openstreetmap.org/pipermail/talk-ro/attachments/20091230/dba91661/attachment.xml>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: rezultate_Arad_osm.txt
URL: <http://lists.openstreetmap.org/pipermail/talk-ro/attachments/20091230/dba91661/attachment.txt>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: rezultate_tara.txt
URL: <http://lists.openstreetmap.org/pipermail/talk-ro/attachments/20091230/dba91661/attachment-0001.txt>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: manuelrciosici.vcf
Type: text/x-vcard
Size: 264 bytes
Desc: not available
URL: <http://lists.openstreetmap.org/pipermail/talk-ro/attachments/20091230/dba91661/attachment.vcf>
More information about the Talk-ro
mailing list