Sophox servis

Vidi https://forum.openstreetmap.org/viewtopic.php?id=15687

Diskusija je obimna ali je treba pročitati od početka do kraja.

Hvala na brzom odgovorima! Ne znam da li si ispratio prethodnu temu, ali tamo sam već pisao o tome kako skripta radi. Definitivno ne radi ništa automatski, već te pita šta želiš da uradiš. Ima ovde više detalja. Uostalom, pogledaj izmene koje je bot pravio (tj. ja pod botom:)), ne bi trebalo da ima nekih grešaka. Diskusiju koju si naveo sam naravno pročitao, još pre nego što sam počeo da radim moju skriptu!

Jedino nisi bio konkretan kod name:en (u smislu da li treba tu ošišana latinica ili ne). Ne znam da li tu bot uopšte može da pomogne. Npr. jasno mi je šta bi bio name:en za “Nehruova”, ali nisam pametan šta bi bio name:en za “Улица Џорџа Вашингтона”. Jel “Ulica Džorža Vašingtona”, “Ulica Dzordza Vasingtona”, “Džordža Vašingtona street” ili “George Washington street”?:slight_smile: Mislim da bot ne sme da dira name:en, jer 1) već sam viđao svašta za name:en po Beogradu (bar), 2) ne znam koji bi algoritam bio i 3) treba istražiti šta se radilo po Evropi generalno za ovo pre nego što diramo name:en, nije ovo problem specifičan za Srbiju. Ako tu imamo neki konzensus, i bot to može da “izračuna”, mogu da ga uposlim, ali za sada “ne bih ja tu ništa dirao”:slight_smile:

Moje pitanje za ošišanu ćirilicu nije bilo toliko za name:en, koliko za podršku za alate. Gomila ljudi koristi Nominatim, GeoNames, OsmAnd+ (posredno ili neposredno) i očekuje (bar ja očekujem!) da kada uneseš “dzordza vasingtona” da ti nađe tu ulicu. Najtužniji primer je TomTom aplikacija za Android koja ne može da ukapira ni “Backa” da je “Bačka”, a kamoli primer sa Vašingtonom iznad. Ne želim da OSM to ne može da uradi. Pitanje je više dakle bilo:

  • Da li očekujemo/pretpostavljamo/ostavljamo teret aplikacijama da razlučuju naša slova i da li mislimo da najveći servisi i aplikacije to danas već rade (npr. šta koristi OsmAnd+ ispod, ili CycleMaps za naming servis, ja nemam pojma!)
  • Da li bismo teorijski mogli da im “pomognemo” ako bismo imali name:sr-Oshishana (nebitno je ime sad)? Ovde sad ja pretpostavljam da naming servisi (Nominatim, GeoNames) koriste sve dostupne name:* tagove da razluče ime? Možda grešim?

U prvom slučaju, nemamo šta da radimo, samo da imamo dobar name:sr-Latn. U drugom, treba da dobro razmislimo…

Бранко,

Да ли си знао да мапе Србије за OsmAnd генеришу хрвати (као и иначе за цео балкан). Ја сам им предлагао да користе наш плагин JOSM_transliterate за генерисање и ћириличне и латичничне верзије мапе, али није било интересовања са њихове стране.
Иначе, генерисање прилагођене мапе је релативно просто.

И додао бих да се за комерцијалне програме типа TomTom ја не бих узбуђивао.

Nisam znao, ali lepo za znati. Da li imaš neku referencu gde popričati sa njima/gde je source za generisanje mapa, možda je prosto kao dopisati im logiku u generisanje/normalizovanje?

Inače, ne bih rekao da je problem “njihov”, evo na primer probajte da tražite “djakovacka” i na nominatimu i na geonames - nema rezultata:( Štaviše, kad sam malo kopao, shvatio sam da nema name:sr-Latn dodat za naš jezik. Tako da mi sad više nije jasno ni ko consume-uje name:sr-Latn tag (osim što ga Nominatim uzima, pošto prosto uzime sve “name:*” tagove, a inače i “name:sr-Latn” bi mogao da se zove i “name:mali-perica”)? Sad se igram sa Nominatim normalizacijom, da vidim da li je lakše rešiti problem sa normalizovanjem “ђ” i “џ” u “dj” i “dz” u tom kodu ili da prosto dodajemo alt_name. Možda alt_name reši i OsmAnd, why not? Tako da - ja bih prvo da počistimo naše dvorište; ako Nominatim i GeoNames ne mogu da rade sa “djokovacka”, to je naš problem, ni OsmAnd-ov, ni hrvatski:) Tako da - trenutno pokušavam da vidim Nominatim da sredim. Nekako mi rešenja sa generisanjem custom mape (ako je OsmAnd, CycleMaps i sl. ne bi koristili!) nisu interesantna, pošto jednostavno ne rešavaju osnovni problem. Ako postoji opcija da OsmAnd koristi našu mapu, da se uglavimo u njihov deployment proces, recite.

Ne uzbuđujem se ni ja za TomTom, samo dajem primer lošeg user experience-a:)

Процес генерисања мапе и није нешто посебан:

  1. Скинеш pbf за Србију: https://download.geofabrik.de/europe/serbia.html
  2. Пресловиш како желиш
  3. Стартујеш генерисање мапе са OsmAndMapCreator https://wiki.openstreetmap.org/wiki/OsmAndMapCreator
  4. Видиш са OsmAnd да се твоје мапе нађу на серверу https://download.osmand.net/list.php

Цео процес се на мом старом рачунару (сем задње тачке) завршавао за 15так минута.

Све се лако да урадити кроз једну скрипту која би могла да се стартује једном недељно.

Pravila su vrlo jasna:

name=Карађорђева улица
name:sr=Карађорђева улица
name:sr-Latn=Karađorđeva ulica

i (po meni)

name:en=Karađorđeva ulica

Ko iz toga ne prikazuje ili ne nalazi nazive kako treba, to je njegov problem. Ne možemo menjati pravila da bi ih prilagodili nekome ko ih ionako ne poštuje.

Hvala @mpele, upravo to što mi je trebalo! Bacam se na to čim vidim ovo za Nominatim.

Ne shvatam baš šta si hteo da kažeš? Niko ne postavlja ovde pitanje “name”, “name:sr” i “name:sr-Latn” tagova i da li njih treba menjati (odgovor je naravno ne). Pitanje je sledeće - mali Perica hoće da pređe da koristi OSM, čuje da postoji neki tamo OsmAnd i otkuca “djakovacka” (kao ja juče) i ne nađe ništa. Šta će on da pomisli o OSM-u? Džabe sav trud svih ljudi, džabe što ta ulica postoji i što je mapirana, kad zbog “dj” on ima utisak da je OSM/OsmAnd neupotrebljiv. Ne kažem da treba da promenimo “name:sr” u “djakovacka”, da me ne razumeš pogrešno:) Samo smatram da je ovakav user experience loš za OSM i OSM Srbija. I da treba korisnicima da napravimo što ugodnije korišćenje, naročito ako se problem može svesti na tehnički problem. A može! I probaću da vidim šta može da se uradi u tom pravcu, pa javljam:)

Update: shvatio sam šta je problem sa nominatimom. Ispod se svi nazivi normalizuju u latinicu i kad se nešto pretražuje, to se isto normalizuje i onda se tako traže stvari. Problem uopšte nije veliki kao što sam mislio i dešava se samo u situacijama kada imamo i “đ” i “č/ć” u istoj reči (kao što je to bio primer sa đakovačkom). Napravio sam issue na githubu - pogledajte tamo normalizaciju, ali ne očekujem da to može tako lako da se promeni (jer nije srpski jedini koji koristi ta slova). Mislim da je bolje rešenje da dodamo alt_name sa našom normalizacijom na ulice koje imaju “đ” i “č/ć” (dakle alt_name:Djakovacka) - ne verujem da će biti mnogo ovakvih slučajeva, a ja ću ovaj bug ubaciti u bota da se proverava. Da objasnim sa druge strane pošto može da bude konfuzno - jedini razlog zašto ne vidimo još problema je što imamo i ćirilicu i latinicu i to dosta pomaže Nominatimu - da imamo samo ćirilicu ili samo latinicu, bilo bi mnogo više ulica i gradova koje ne bismo mogli da nađemo:) Ako pretpostavimo da imamo oba (a imamo i JOSM plugin i ovo moje čudo), onda se problem vidi samo kada su prisutni i “đ” i “č/ć”. Mislim da su nam braća “ugroženija”, pošto imaju samo latinicu i tamo svaki entitet sa “đ” ne može da se traži sa “dj”, tako da ću im javiti.

Kad wrap-ujem ovo, bacam se na OsmAnd generisanje

Nemoj me shvatiti kao matoro zakeralo :slight_smile:

Radi se o tome da mi editujemo BAZU. Princip je da se u bazu ne stavlja nešto što je izračunljivo.

Ošišana latinica je izračunljiva. Ćak i OSM ne preporučuje da se u bazu upisuju nazivi koji su samo preslovljeni (http://wiki.openstreetmap.org/wiki/Names#Avoid_transliteration), štaviše postoje alati koji umeju da rade preslovljavanje.

E sad, tako gledano ne bi trebalo da imamo ni name:sl-Latn u bazi jer je to takođe izračunljivo, tako da smo uvođenjem name:sl-Latn već prekršili princip. :slight_smile:

Slažem se da je preslovljavanje u ošišanu latinicu potrebno prilikom pretrage i tu je razlika u odnosu na name:sr-Latn koji je potreban i radi prikaza. U našu odbranu, razlika je i u tome što je preslovljavanje iz srpske ćiirilice u srpsku latinicu stvar samo srpskog jezika, naša interna potreba pa taj problem moramo da rešavamo sami.

Preslovljavanje u ošišanu latinicu je šira potreba i može se kao pravilo primeniti i na druge jezike, ali se slažem da je to i naš problem, jer zaista postoji realna potreba da neko ukuca naziv ošišanom latinicom i nađe to što je tražio i dobro bi bilo da to radi sa svakim alatom bez posebnog prilagođavanja (iz istog tog razloga mi i koristiomo name:sr-Latn za latiničnu verziju srpskog jezika).

Tako gledavši, ima smisla očekivati da alati za pretragu mape znaju da bilo koji naziv iz bilo kog jezika preslove u kako oni to zovu romanizovanu latinicu (a mi je zovemo ošišana latinica) i da se negde mogu podesiti pravila takvog preslovljavanja za svaki jezik. Nisu mi poznati detalji oko toga ali mislim da takvi alati postoje, tako da bih ja prvi tu gledao kako da se reši stvar, odnosno kako da se ti alati nauče da preslovljavaju srpski u ošišanu latinicu. Pogledaj http://blog.gegg.us/2013/09/ i https://github.com/giggls/mapnik-german-l10n.

U tom smislu to što prokušavaš da rešiš kroz Nominatum je verovatno bolji način, jer možda će i oni da ukapiraju (ako već nisu) da to nije samo problem srpskog jezike nego svakog jezika koji sadrži znakove koji nisu latinični ili su razičiti os skupa znakova latinskog jezika. Probaj da im to tako i predstaviš, da problem nije samo sa srpskim jezikom već širi i da ako već nisu, valjalo bi da negde postoji mogućnost da se definiše mapiranje iz bilo kog jezika u latinsku abecedu.

Kad smo to pomenuti, treba imati u vidu da verovatn postoji potreba i da se radi automatsko preslovljavanje u takozvani mašinski oblik. On je na primer primenjen u latinizovanju zapisa naziva u međunarodnim dokumentima, na rimer pasošima. Postupak je vrlo sličan “šišanju” latinice samo što pravila nisu ista i dobijeni rezultat nije namenjen za prikazivaje ljudima već da se svaki naziv po unapred jasno utvrđenim pravilima može prevesti u latinizovani oblik radi lakše računarske obrade (pretrage na primer).

Uzgred budi rečeno, postoji i potreba za obrnutim proceosm, da se latinični naziv preslove u druga pisma, jer kao što mi imamo problem što neko može da u pretrazi ukuca “djakovacka” isto takо neko može da ukuca “џорџ таун”. Problem je suštinski isti. Al da ne širimo temu pošto ga mi rešavamo pešačkim putem, preslovljavanjem i upisom u name:sr tag.

Ako se ne može postići da alati za pretragu automatski preslovljavaju u ošišanu latinicu, onda ne preostaje ništa drugo do da se ošišani oblik upiše u bazu. Najlogičniji način je da se uvede tag koji je upravo tome namenjen, ali je to i najmanje zgodno rešenje jer opet zahteva da se alati prialgode da znaju da korsite taj tag. Zgodnije je upotrebiti neki od postojećih tagova ali je pitanje koji.

Meni je na prvi pogled logično da se upotrebi int_name ali mi nije baš jasno da li je to pravi izbor. Sama namena taga nije baš nešto podrobno opisana i moguće je da ga negde neko upotrebi i za nešto drugo. Sklon sam da mislim da ako je neko upotrebio ovaj tag za nešto drugo, da je pogrešio. Ipak mogu da zamislim jednu problematičnu situaciju: da li u int_name upisati Beograd ili Belgrade?

Druga opcija je alt_name koji si pomenuo ali tu treba malo gimnastike, jer alt_name se može koristiti i za druge namene pa je moguće da neki naziv već ima alt_name iz svim drugog razloga. Međutim dobra stvar je što je u alt:name moguće upisati više varijanti, sa ‘;’ kao separatorom (otuda je potrebno malo gimansitke, ako alt_name već ima neki sadržaj, onda ošišanu latinicu treba dodati a ne prepisati preko postojećeg). Kažu da nije baš preporučljvo ali je dozvoljeno.

U svakom slučaju ako se ošišana latinica upiše u int_name ili alt_name verovatno će svi postojeći alati da to vide pa će pretraga da radi.

Nije loše istražiti kako su taj problem rešili sa drugim jezicima koji originalno ne koriste latinicu, grčkim, kineskim, japanskim, ruskim…

Samo da dodam da je za Београд (https://www.openstreetmap.org/relation/2728438) int:name Beograd a alt_name nije ni definisano i meni je to dovoljno da zaključim da je int_name prihvatljivo rešenje za ošišanu latinicu.

Jok, a moguće je i da sam stariji od tebe:)

Ne brinem se o izračunljivim stvarima. Za pola dana ih možemo dodati i izbrisati po potrebi:) Drugo, principi su uvek lepa stvar, ali kod baza (ako pričamo sad tehnički) postoji i nešto što se zove denormalizacija, gde namerno ostavljaš nešto duplirano zato što ti je lakše posle da ga vadiš. That being said, znajući sad kako Nominatim radi, mislim da, da nemamo name:sr-Latn, ne bi mogli više od 50% stvari da nađemo (zato što je “ч”, “ћ” i sl. stavljeno da budu “ch”, “tsh”, a i ostala slova su slična i imanje latinice nas ovde “vadi”). Tako da, ima razloga zašto želimo da ostavimo latinicu, čak iako je izračunljiva.

OK, nisam znao za ovo, ali ovo je upravo ono što radi Nominatim (a ja nisam umeo da objasnim najbolje:). “Č” postaje “C”, a “Ч” postaje “ch” i tu je uzrok problema sa pretragom.

Meni se sviđa predlog! Prodato!:slight_smile: alt_name i nije za ovo, ako ćemo pravo, bolje ga je koristiti stvarno za alternative (tu mislim “Jurija Gagarina”=>“Gagarinova” i ostale kreativne transformacije koje imamo na ovim prostorima>), int_name mi ima više smisla!

Samo još jednom da naglasim dve stvari:

  1. ovo bi stavljali samo tamo gde imamo kombinacije “đ” i “č/ć” u imenu, što pretpostavljam da je jako retko, tako da tag int_name treba da bude slabo popunjen (tj. samo tamo gde ima potrebe, ne bih svuda da stavljamo u njega romanizovanu latinicu!) Nemam još tačno brojke na koliko bismo ga mesta teorijski stavili, pošto trenutno pokušavam da stavim name:sr-Latn (dodam ga tamo gde ga nema i ispravim ga tamo gde je pogrešan) i to je baš zeznut i pipav posao (pravopisne greške, popunjeno ćirilicom, stara imena ulica…), tako da se javljam kada završim to.
  2. pošto planiram da ovu proveru za “int_name” (ako se dogovorimo za to) stavim u skriptu, onda imamo teorijski na dnevnom nivou provere koje skripta pljuje na sajtu (trenutno je đubre tamo pošto radim sad na tome:). To znači da odmah znamo ako se pojavi nova ulica sa “đ” i “č/ć” u imenu, kad nam neko izmeni int_name u nešto što nije romanizovana latinica od name i sl. da ne davim sad

Update: proverio sam jos jednom i problem je samo slovo Đ. Tako da bih ja sad krenuo i stavljao “int_name” da bude romanizovana latinica, tamo gde već nije postavljen, i to samo na one entitete koji imaju slovo Đ u name:sr-Latn tagu. Evo ga upit koji ih pronalazi i koji može čak i da predloži romanizovani int_name tag. Imamo da dodamo int_name na nekih 2300 entiteta.

Derite se ako neko ima nesto protiv! Bacam se na ovo ovih dana.

edit:reword

Može li ovaj tvoj program nekako da pomogne da se ubrza unošenje srpskih naziva na Kosovu i Metohiji?

Možda je pre za posebnu temu, ali nije ovaj program magičan - sve što može JOSM Transliterator, može i on. Ako treba da prespe iz šupljeg u prazno i algoritamski nešto unese/izmeni/izbriše, onda može. Ako ta informacija ne postoji, naravno da ne može on da je izmisli. Koliko ja znam, za Kosovo nemamo podatke ni na Wikiju ni na WikiDati, pa da prespemo bar odande imena (iako ne bi trebali). Ako imaš konkretno šta da se uradi, reci, lako se u ovom programu napiše novo pravilo koje se može poluautomatski primeniti, ali ne znam šta

Da li pomocu Sophoxa mogu jednostavno da pronadjem sve name tagove “name=Vrdnicka kula” i da ih promenim u “name=Врдничка кула”?

Ako moze, da li neko zna i hoce na dapise komandu? :slight_smile:

Komanda mi pronadje neispravne nazive:

SELECT * WHERE {
?osmId osmt:name ‘Vrdnicka Kula’
} LIMIT 50

Sta da dopisem da zamenim vrednost?

Probaj ovo:


#defaultView:Editor{ "comment":"Change Vrdnicka kula", "vote":false }
SELECT ?id ?loc ("name" AS ?tag_1) ("Врдничка кула" AS ?val_1)
WHERE {
   ?id osmt:name 'Vrdnicka Kula' .
  ?id osmm:loc ?loc .
}

Posto ima 8 entiteta, pretpostavljam da si ovo mogao i peske, a da samo zelis da naucis Sophox bolje. Pa, evo da ispricam i sta sam promenio.

  1. Dodao sam onaj header. On mora da stoji na pocetku, i odredjuje metastvari, kao sto su default editor i komentar changeset-a
  2. Bindovao sam ?loc. On je bitan da bi mapa znala gde da ga prikaze.
  3. Sophox nudi izmene tako sto u finalnom rezultatu trazi “tag_1”, “val_1”. To su tagovi koje ce da promeni. Moze da ih bude vise, pa tako mozes da dodas i “tag_2”, “val_2”… (ali moraju u parovima, tj. da “tag” ima “val” parnjaka)
  4. Ne znam zasto, ali ne radi kada se ostavi “osmId”, radi tek kad sam promenio na “id”. Ne znam zasto, ne pitaj me:)

To je to, nadam se da sam pomogao i objasnio malo:)

Hvala :slight_smile:

Nikada nisam napisao SQL upit. Ja sam koristio samo Basic, Turbo Pascal, Fortran, Cobol i Parezanovicev cudan masinski jezik :slight_smile:

Може ли на овај начин да се добију елементи који садрже римске броје у name или name:sr-Latn.
Или, може ли да се користи regex за упит?

Pogledaj po Serbian-OSM-Lint tool-u, ima tu svakakvih skripti koje sam pisao vremenom:
https://gitlab.com/osm-serbia/serbian-osm-lint/-/tree/master/sparql
Štaviše, često sam to radio (proveravam da li “name” ima latinična slova OSIM I, V, X…). I ima Sophox regex (koristim ga u tool-u).

I dalje mislim da, ukoliko samo želiš da nešto query-uješ (naspram toga da menjaš), onda je Overpass superiorniji (a isto ima regex).

Ukoliko imaš konkretniji upit, a ne možeš da ga sastaviš, cimaj ovde, pa ćemo pogledamo:)

edit: promena URL-a ka serbian osm lint repou

Nisam siguran da li je sintaksa dobra. :slight_smile: Medjutim radi…

#defaultView:Editor{ “comment”:“Change Kota”, “vote”:false }
SELECT ?id ?loc (“name” AS ?tag_1) (“” AS ?val_1) (“name:sr” AS ?tag_2) (“” AS ?val_2) (“name:sr-Latn” AS ?tag_3) (“” AS ?val_3)
WHERE {
?id osmt:name ‘Кота’ .
?id osmt:name:sr ‘Кота’ .
?id osmt:name:sr-Latn ‘Kota’ .
?id osmm:loc ?loc .
}

Obrisao sam sve kote :), tj. nazive. Naravno pre nego sto sam ih obrisao, rucno sam ih upisao.