Serbia/Sophox

From OpenStreetMap Wiki
Jump to navigation Jump to search

Zanimljivi Sophox SPARQL upiti koji treba da nađu greške/poboljšaju srpsku lokalizaciju kako u Srbiji, tako i van Srbije.


Svaka pomoć je dobrodošla! Da biste pomogli, treba da kliknete na link na neku od stavki ispod koja Vam je zanimljiva, budete ulogovani na OSM i da ispravljate stvari. Neke mogu polu-automatizovano (preuzimanje sa wikidata) i onda Vi potvrdite, a neke moraju ručno da se peglaju. Ne pokrećite upite sa "Run it", nego sa "Edit query" i dobićete editor koji kad pokrenete, pustite ga (kliknete Play dugme) i radiće edit. Ne zaboravite da zatvorite changeset na kraju!

Ako imate neku drugi interesantan upit, dodajte ga ovde.

Upiti u Srbiji

Ime ulice u Srbiji je na latinici

Ovo je jako pipav upit. Kao prvo, pokušava da prebaci sve što je na latinici u ćirilicu i onda da podesi "name" na to. Em to nekad nije precizno (zbog nj->њ i sl.), em imamo neke nazive koje treba ostaviti na latinici ("Kralja Petra I" -> "Краља Петра И"), em imamo nekad ošišanu latinicu koja ne može da se prebaci nikako automatizovano ("Cacak" -> "Цацак"). Zato ga koristiti uz veeeliki oprez. Dolenavedeni upit je podešen za centralnu Srbiju, ali u komentarima ćete naći kako da zahvatite i druge delove Srbije.

#defaultView:Editor{ "comment":"Automatsko prebacivanje u cirilicu", "vote":false }
SELECT ?id ?loc ('name' AS ?tag_1) (?fixed as ?val_1) WHERE {
  hint:Query hint:optimizer "Runtime" .

  SERVICE wikibase:tabular {
    bd:serviceParam wikibase:otQuery '[out:csv(::id, ::type)][timeout:60];area(3601741311)->.searchArea;(node["highway"](area.searchArea);way["highway"=](area.searchArea);rel["highway"](area.searchArea););out;' .
    ?stringId tabular:%40id 'string' .
    ?type tabular:%40type 'string' .
  } .
  BIND(URI(CONCAT("https://www.openstreetmap.org/", ?type, "/", ?stringId)) as ?id) .

  ?id osmt:name ?name .
  ?id osmm:loc ?loc .
  ?id osmt:highway ?highway . # Ovim se filtriraju samo ulice. Zakomentarisati za sve entitete

  # Ovako filtriramo samo latinicna imena. Primetiti da nedostaju slova "i" i "v". To je zato sto su cesta u rimskim brojevima, pa mozemo da ih izostavimo
  # Gubimo ovako detekciju latinicnih imena "iii", "vi", "viv", ali to je OK cena za platiti:)
  FILTER (regex(str(?name), "a|b|c|č|ć|d|đ|e|f|g|h|j|k|l|m|n|o|p|r|s|š|t|u|z|ž", "i")) .
  FILTER (!regex(str(?name), "x|y|w|q", "i")) . # Ovako filtriramo ocigledno engleska imena
  # FILTER (?mtype = 'w') . # Stavite 'n', 'w' ili 'r' ako zelite da filtrirate po tipu entiteta
  # Prvo duple
  BIND(
    REPLACE(REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (?name, "DŽ", "Џ"), "Dž", "Џ"), "NJ", "Њ"), "Nj", "Њ"), "LJ", "Љ"), "dž", "џ"), "nj", "њ"), "lj", "љ")
   AS ?dupla)
  # Mala slova
  BIND(
    REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (
    REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (
    REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (?dupla,
      "a", "а"), "b", "б"), "v", "в"), "g", "г"), "d", "д"), "đ", "ђ"), "e", "е"), "ž", "ж"), "z", "з"), "i", "и"),
      "j", "ј"), "k", "к"), "l", "л"), "m", "м"), "n", "н"), "o", "о"), "p", "п"), "r", "р"), "s", "с"), "t", "т"),
      "ć", "ћ"), "u", "у"), "f", "ф"), "h", "х"), "c", "ц"), "č", "ч"), "š", "ш")
  AS ?mala)
  # Velika slova
  BIND(
    REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (
    REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (
    REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (?mala,
    "A", "А"), "B", "Б"), "V", "В"), "G", "Г"), "D", "Д"), "Đ", "Ђ"), "E", "Е"), "Ž", "Ж"), "Z", "З"), "I", "И"),
    "J", "Ј"), "K", "К"), "L", "Л"), "M", "М"), "N", "Н"), "O", "О"), "P", "П"), "R", "Р"), "S", "С"), "T", "Т"),
    "Ć", "Ћ"), "U", "У"), "F", "Ф"), "H", "Х"), "C", "Ц"), "Č", "Ч"), "Š", "Ш")
  AS ?fixed)

}

Run it (edit query)

Fali ime ulice u Srbiji na latinici

Upit dodaje name:sr-Latn ako fali ili ga menja (ako zaključi da prebacivanje sa ćirilice na latinicu nije ispravno). Generalno je bezbedan da se ide okolo i prebacuju stvari. Dobro je komentarisan, ako želite da izmenite nešto (drugi grad, da ne gleda puteve nego nešto treće itd.). Idealno, ovaj upit treba da vraća 0 redova.

Domen upita: Beograd

#defaultView:Editor{ "comment":"Automatsko dodavanje name:sr-Latn", "vote":false }
SELECT
  ?id ?loc
  ('name:sr-Latn' AS ?tag_1) (?correctLatinName as ?val_1)
WHERE {
  ?id osmt:name ?name ;
      osmt:highway ?highway ; # Ovim se filtriraju samo ulice. Zakomentarisati za sve entitete
      osmm:type ?mtype .

  FILTER (regex(str(?name), "а|б|в|г|д|ђ|е|ж|з|и|ј|к|л|љ|м|н|њ|о|п|р|с|т|ћ|у|ф|х|ц|ч|џ|ш", "i")) . # Ovako filtriramo samo cirilicna imena

  BIND(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    ?name,
    # Mala slova
    'а', 'a'), 'б', 'b'), 'в', 'v'), 'г', 'g'), 'д', 'd'), 'ђ', 'đ'), 'е', 'e'), 'ж', 'ž'), 'з', 'z'), 'и', 'i'),
    'ј', 'j'), 'к', 'k'), 'л', 'l'), 'љ', 'lj'), 'м', 'm'), 'н', 'n'), 'њ', 'nj'), 'о', 'o'), 'п', 'p'), 'р', 'r'),
    'с', 's'), 'т', 't'), 'ћ', 'ć'), 'у', 'u'), 'ф', 'f'), 'х', 'h'), 'ц', 'c'), 'ч', 'č'), 'џ', 'dž'), 'ш', 'š'),
    # Velika slova
    'А', 'A'), 'Б', 'B'), 'В', 'V'), 'Г', 'G'), 'Д', 'D'), 'Ђ', 'Đ'), 'Е', 'E'), 'Ж', 'Ž'), 'З', 'Z'), 'И', 'I'),
    'Ј', 'J'), 'К', 'K'), 'Л', 'L'), 'Љ', 'Lj'), 'М', 'M'), 'Н', 'N'), 'Њ', 'Nj'), 'О', 'O'), 'П', 'P'), 'Р', 'R'),
    'С', 'S'), 'Т', 'T'), 'Ћ', 'Ć'), 'У', 'U'), 'Ф', 'F'), 'Х', 'H'), 'Ц', 'C'), 'Ч', 'Č'), 'Џ', 'Dž'), 'Ш', 'Š')
  as ?correctLatinName)

  SERVICE wikibase:around {
    ?id osmm:loc ?loc .
    # Koordinata centra Beograda, zameni da dobijes krug sa centrom u drugoj tacki
    bd:serviceParam wikibase:center "Point(20.45340 44.79338)"^^geo:wktLiteral.
    # Precnik kruga u kilometrima, povecaj/smanji po zelji
    bd:serviceParam wikibase:radius "15" .
  }

  OPTIONAL { ?id osmt:name:sr-Latn ?currentLatinName . } # Uzmi trenutno latinicno ime, ako postoji
  FILTER (NOT EXISTS { ?id osmt:name:sr-Latn ?namesrlatn . } || ?correctLatinName != ?currentLatinName) # Napravi ime ako ne postoji ili ako se ne slaze
  # FILTER (?mtype = 'w') . # Stavite 'n', 'w' ili 'r' ako zelite da filtrirate po tipu entiteta
}

Run it (edit query)

Upiti van Srbije

Pazite se kad izvršavate ove upite jer mora da se poštuje pravilo za transliteraciju imena. Ne koristiti bez preke potrebe, ovde su više radi reference. Poslednji put kad je moj bot probao ovo da koristi, izmene su bile revertovane i popio sam ban na 24h:)


Dodavanje name:sr na gradove van Srbije

Ovaj SPARQL upit vraća sve gradove sa preko 10.000 stanovnika koji imaju wikidata i wikipedia vezu i postoji interwiki link na srpsku wikipediju (tako da imamo i srpsko ime grada). Automatski predlaže i ime sa wikipedije, tako da samo treba da kliknete i da potvdite:) Dodavati samo ako je netransliterizovano ime odomaćeno/u upotrebi kod nas (npr. ne prevoditi "Seattle" -> "Сијетл", ali je OK prevoditi "Wien" -> "Беч").

Domen upita: ceo svet

#defaultView:Editor{ "comment":"add name:sr to place", "vote":false }
SELECT
  ?id ?name ?loc ?population ?wd ?label_foreign ('name:sr' AS ?tag_1) (?label_foreign as ?val_1)
WHERE {
  ?id osmt:name ?name ;
      osmt:place ?place ;
      osmt:wikidata ?wd ;
      osmt:wikipedia ?wpTag .
  FILTER(?place = 'city' || ?place = 'town') .

  FILTER NOT EXISTS { ?id osmt:name:sr ?name_foreign . } .

  SERVICE <https://query.wikidata.org/sparql> { 
    ?wd wdt:P1082 ?population .  
    FILTER(?population > 10000) .
    ?wd rdfs:label ?label_foreign . FILTER(LANG(?label_foreign) = "sr")
  }

  SERVICE wikibase:around {
    ?id osmm:loc ?loc .
    bd:serviceParam wikibase:center "Point(11 50)"^^geo:wktLiteral.
    bd:serviceParam wikibase:radius "50" .
  }
}

Run it (edit query)

Izmena name:sr da se poklapa sa Wikipedijom

Dešava se suprotna situacija - imamo name:sr, ali se name:sr razlikuje od imena sa Wikipedije. U tom slučaju, trebalo bi da se vidi koji je od dva naziva pravilniji. Ako je ispravniji onaj sa Wikipedije, onda ovaj upit može da se iskoristi da iskopira ime sa Wikipedije. Idealno, ovaj upit treba da vraća 0 redova.

Domen upita: ceo svet

#defaultView:Editor{ "comment":"fixing name:sr" }
SELECT
  ?id ?loc
  ('name:sr' AS ?tag_1) (?label as ?val_1)
WHERE {
  ?id osmt:place ?place;
      osmm:loc ?loc ;
      osmt:wikipedia ?wpTag ;
      osmt:wikidata ?wd ;
      osmt:name:sr ?namesr .

  ?wd rdfs:label ?label ;
      wdt:P1082 ?population .

  ?sitelink schema:isPartOf <https://sr.wikipedia.org/> ;
            schema:about ?wd .

  FILTER((?place = 'city' || ?place = 'town') &&
         lang(?label) = "sr" &&
         ?population > 0 &&
         STR(?namesr) != STR(?label))

  SERVICE wikibase:label { bd:serviceParam wikibase:language "sr". }
}

Run it (edit query)

Srpski naziv nije na ćirilici

Ovo skoro sigurno ne može biti ispravno:) Idealno, ovaj upit treba da vraća 0 redova. Nažalost, ovaj upit ne može da se automatizuje, čovek mora da oceni koji je ispravan naziv za dati OSM entitet.

Domen upita: ceo svet

#defaultView:Editor{ "comment":"fixing name:sr", "vote":false }
SELECT ?id ?loc ?namesr WHERE {
  ?id osmt:place ?place .
  FILTER(?place = 'city' || ?place = 'town')
  ?id osmm:loc ?loc .
  ?id osmt:name:sr ?namesr .
  FILTER (regex(str(?namesr), "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z", "i"))
}

Run it (edit query)