Topic on User talk:Matěj Suchánek

Jump to navigation Jump to search
JAn Dudík (talkcontribs)

Ahoj, prosím potřeboval bych poradit query, které mi vypíše všechny small monument (Q3370053) v Czech Republic (Q213), které ale nemají uvedeno Q213. Moje pokusy padají nebo musím jet po mnohem menších územních celcích a dostanu všechny, s i bez.

A následně bych chtěl přes pywikibota nebo Quickstatements toto chybějící Q213 přidat - a opět poradit, jak na to.

Matěj Suchánek (talkcontribs)

Ahoj, v tuto chvíli se mi nepodařilo najít žádné. On ten tvůj požadavek není moc dobře formulovaný, protože po mně chceš dotazovat se po údaji, který v datech chybí (abys ho doplnil).

Mluvíš o celcích, takže pokud bychom na to šli tak, že památka má uvedený nadřazený celek (located in the administrative territorial entity (P131)), o kterém víme, že je v Česku, vypadalo by to takto:

SELECT ?item WHERE {
  ?item wdt:P31/wdt:P279* wd:Q3370053 .
  ?item wdt:P131/wdt:P17 wd:Q213 .
  FILTER NOT EXISTS { ?item wdt:P17 [] } .
Try it!

}

Je víc možností, jak to zapsat:

  • Místo FILTER NOT EXISTS jde i MINUS, ale jejich performance se liší (pokud to chápu správně, tak MINUS je množinový rozdíl, zatímco NOT EXISTS se vykonává jako samostatné dotazy).
  • Místo wdt:P131 by šlo wdt:P131+, ale tyhle rekurzivní dotazy jsou pomalejší a ta první úroveň obvykle stačí (předpokádám, že infrastrukturu ČR už máme na Wikidatech vyplněnou dobře).
  • Místo [] by šlo wd:Q213, protože takhle to vybírá položky bez jakéhokoliv státu. Ale případy, kdy je uvedený jiný stát než Česko, je lepší řešit manuálně.

Když pak máš výsledek, tak přijdou na řadu buď QS, nebo ten Pywikibot.

  • QS
    • je potřeba prostý text, kde řádky jsou ve formátu QXXX\tP17\tQ213 (QXXX je položka, co chci upravit, \t je znak tabulátoru, jde i |), a na každý řádek je jedna položka
    • položky lze získat třeba tak, že si výsledek dotazu stáhnu jako TSV nebo zkopírováním tabulky do schránky, vložím ho do textového editoru (Notepad++/gedit) a pomocí najít a nahradit ho očistím, aby zůstaly jen prosté identifikátory (případně jde použít Excel/Calc)
    • pak se to vloží do , pustí a je hotovo
  • Pywikibot
    • skript claimit.py -file:"soubor.txt" P17 Q213 -exists:p, kde soubor.txt obsahuje výsledek toho "čištění", které se dělá pro QS
    • skript claimit.py -sparql:"SELECT ?item { ... }", ale dotaz se musí vložit bez zalomení, což je méně praktické a nepřehledné (na Linuxu nebo v nějakém lepším shellu by šlo něco jako $ cat | tr '\n' ' ' | python3 pwb.py claimit ...)
JAn Dudík (talkcontribs)

Aha, @Vojtěch Dostál: to právě včera všude hromadně doplnil, takže asi proto se nic nenajde. Takže založím pár nových a vyzkouším potom, zatím díky.

Vojtěch Dostál (talkcontribs)

Používám k tomu tento Petscan


https://petscan.wmflabs.org/?language=cs&project=wikipedia&ns%5B0%5D=1&sparql=select%20%3Fmisto%20where%20%7B%0D%0A%20%20%3Fmisto%20wdt%3AP131%2B%20wd%3AQ213%20.%0D%0A%20%20MINUS%20%7B%3Fmisto%20wdt%3AP17%20%3Fstat%20.%20%7D%0D%0A%20%20MINUS%20%7B%3Fmisto%20wdt%3AP31%20wd%3AQ13406463%20.%20%7D%0D%0A%20%20%7D&common_wiki=wikidata&interface_language=en&active_tab=tab_other_sources&doit=&al_commands=P17%3AQ213

Akorát aby to fungovalo, je třeba v druhém řádku přidat hvězdičku (URL to neukládá):

  ?misto wdt:P131* wd:Q213 .

JAn Dudík (talkcontribs)

@Vojtěch Dostál, Matěj Suchánek: Tak jsem založil deset památek a oboje query včera vyzkoušel, Matějův dotaz mi najde 4 moje položky (dnes už pět) Vojtův 12 včetně mých deseti a dvou nepamátek. Japato? ;-)

Vojtěch Dostál (talkcontribs)

Matějův dotaz hledá jen památky které jsou skutečně podtřídou položky drobná památka (možná používáš nějaké instance které nejsou drobné památky v ontologii Wikidat?). Můj dotaz je obecný, hledá všechny položky které jsou v Česku dle P131.

JAn Dudík (talkcontribs)

@Vojtěch Dostál: Založil jsem 10 památek běžných typů. V Matějově výpisu vidím 2x kříž, 2x boží muka a 1x obrázek. V tvém je navíc sídliště, tvrz, 2 pomníky, 2 kaple a kaplička.

A v tom to asi bude, pomník ani kaple nemají nadtřídu drobná památka, kaplička ale ano (o úroveň výš).

Každopádně díky oběma, Petscan je pro mne uživatelsky příznivější a dostat z něj vstup pro pywikibota je jednoduché.