[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
user:zeman:ukoly:geocaching [2012/09/26 17:30]
zeman Další kousek.
user:zeman:ukoly:geocaching [2013/10/08 07:59] (current)
zeman quest
Line 6: Line 6:
 Mnozí „kačeři“ (hráči geocachingu) používají k navigaci chytrý telefon, který jim přímo v terénu stáhne popisy nejbližších kešek na základě jejich aktuální polohy. Díky tomu si nemusejí popisy multikešek předem tisknout na papír, aby věděli, jaké indicie mají na kterém místě zjišťovat. Zjištěná čísla si ale stále musejí poznamenávat stranou. Stejně tak závěrečné dosazení do vzorce a výpočet souřadnic je na nich. Automatizace a programová podpora tohoto kroku je obtížná, protože každý autor zapíše vzorec do popisu kešky trochu jinak. Abychom mohli vzorec rozpoznat, musíme umět rozebrat text webové stránky, případně mu i částečně porozumět. Mnozí „kačeři“ (hráči geocachingu) používají k navigaci chytrý telefon, který jim přímo v terénu stáhne popisy nejbližších kešek na základě jejich aktuální polohy. Díky tomu si nemusejí popisy multikešek předem tisknout na papír, aby věděli, jaké indicie mají na kterém místě zjišťovat. Zjištěná čísla si ale stále musejí poznamenávat stranou. Stejně tak závěrečné dosazení do vzorce a výpočet souřadnic je na nich. Automatizace a programová podpora tohoto kroku je obtížná, protože každý autor zapíše vzorec do popisu kešky trochu jinak. Abychom mohli vzorec rozpoznat, musíme umět rozebrat text webové stránky, případně mu i částečně porozumět.
  
-Další možné komplikace:+Některé možné komplikace: 
 +  * Vzorce jsou na stránce uváděny různými způsoby. Někdy se jednotlivá písmena (proměnné) dosazují za jednotlivé číslice, jindy musíte provést početní operaci a dostanete tříciferné číslo, které celé dosadíte za desetinnou tečku u minut. Možností je nepřeberně.
   * Stránka může obsahovat několik vzorců. Některé body, kterými musí kačer projít, mohou mít souřadnice také vypočítané, místo aby jejich souřadnice byly uvedeny v popisu přímo.   * Stránka může obsahovat několik vzorců. Některé body, kterými musí kačer projít, mohou mít souřadnice také vypočítané, místo aby jejich souřadnice byly uvedeny v popisu přímo.
   * Cílový vzorec se může skládat z několika výpočtů, které na sebe navazují. Příkladem je keška [[http://coord.info/GCTY61|Metro = B =]].   * Cílový vzorec se může skládat z několika výpočtů, které na sebe navazují. Příkladem je keška [[http://coord.info/GCTY61|Metro = B =]].
Line 12: Line 13:
 ===== Zadání ===== ===== Zadání =====
  
-Vaším úkolem je napsat skript, který projde popis multikešky (HTML stažené ze serveru geocaching.com), rozpozná v něm vzorec pro výpočet souřadnic, zjistí názvy proměnných v tomto vzorci (typicky velká písmena anglické abecedy), pro každou proměnnou identifikuje pasáž textu, kde se říká, jak dané číslo získat, a vygeneruje (např. jako výraz v Perlu) kód, který po dodání hodnot proměnných souřadnice vypočítá.+Vaším úkolem je napsat skript, který projde popis multikešky (HTML stažené ze serveru geocaching.com), rozpozná v něm vzorec pro výpočet souřadnic, zjistí názvy proměnných v tomto vzorci (typicky velká písmena anglické abecedy), pro každou proměnnou identifikuje pasáž textu, kde se říká, jak dané číslo získat, a vygeneruje (např. jako výraz v Perlu) kód, který po dodání hodnot proměnných souřadnice vypočítá a vypíše ve standardním formátu //X dd° mm.mmm//, kde //dd// jsou stupně, //mm.mmm// jsou minuty s přesností na tři desetinná místa a //X// je určení světové strany, tj. ''N'' nebo ''S'' pro zeměpisnou šířku a ''E'' nebo ''W'' pro zeměpisnou délku. Příklad:
  
-Pokud chcete, umíte a máte na čem to předvést, můžete program vyrobit rovnou jako aplikaci pro Android nebo i-PhoneJinak standardně jako skript v&nbsp;Perlu. Pokud by váš skript obsahoval i stahování vstupního textu ze serveru, chovejte se slušně a opatrně, protože podmínky serveru zakazují stahování údajů roboty.+<code>N 50° 06.530 E 014° 34.550</code>
  
-===== TODO ===== +Tato úloha pochopitelně je jazykově závislá. Můžete edpokládat, že stránka obsahuje popis kešky v&nbsp;češtině, ale musíte se umět vyrovnat s&nbsp;tím, že stránka může obsahovat popisy v&nbsp;jiných jazycích (nejčastěji angličtina).
-===== Zadání ===== +
- +
-Vaším úkolem je napsat (v Perlu) robota, který dostane adresu internetového obchodu, projde stránky obchodu, najde na nich potřebné informace a přidá je do databáze. Hledejte následující údaje: +
- +
-  * Seznam zboží, které obchod nabízí. Nemusíte zachovat třídění zboží do kategorií. Některé obchody zboží třídí, jiné ne, ale kategorie beztak nebudou u dvou obchodů stejné. Měli byste však poznat, když dva obchody vedou totéž zboží pod lehce odlišnými názvy. Ke každé položce vás dále zajímá: +
-    * Cena, za kterou ji obchod nabízí. Zahrnuje cena DPH? Kolik je to s daní a bez daně+
-    * DostupnostJe zboží skladem? Může být k odeslání do N dnů? Je dlouhodobě nedostupné? +
-    * Adresa (URL) stránky, na které má daný obchod informace ímo o této položce. +
-  * Možnosti dodání (poštourůznými kurýrními službami, vyzvednutí v kamenné provozovně) +
-    * Jaká je dodací lhůta? To mívá obchod napsáno v obchodních podmínkách a může se to dále lišit i u jednotlivých druhů zboží. Případně můžete do databáze uložit alespoň URL stránky s obchodními podmínkami. +
-  * Možnosti placení (dobírka, předplatba na účet, platební karta, PayPal...) +
-  * Kontakt +
-    * Telefon, e-mail, popř. adresa webového kontaktního formuláře +
-    * Adresa, kde obchod sídlí, resp. odkud se bude odesílat zboží +
-      * Ještě více vás zajímají adresy případných kamenných provozoven. Na vašem hypotetickém serveru by se jistě hezky vyjímala mapa se značkamikde lze dotyčné zboží koupit, popř. seznam provozoven seřazený podle vzdálenosti od místa, které si uživatel určí. Nebude proto škodit, pokud adresu dokážete rozebrat na město, ulici, PSČ apod. Takové údaje se pak snadněji //geokódují//, tj. zjišťují se podle nich ze specializovaných databází zeměpisné souřadnice provozovny. +
-      * Jaké jsou otvírací hodiny v jednotlivých provozovnách? +
-      * Jaký je telefon nebo jiný kontakt do každé provozovny? +
- +
-Tato úloha pochopitelně je jazykově závislá. Předpokládejte, že stránky obchodu jsou v češtině. Samozřejmě vám bude sloužit ke cti, pokud robota dokážete napsat tak, aby přechod na jiný jazyk nebyl těžkýnapříklad že jazykově závislá pravidla nezadrátujete přímo do zdrojáku, ale místo toho je načtete ve stanoveném formátu ze souboru. Nicméně to není povinné. +
- +
-Asi můžete předpokládat, že ceny budou uvedené v českých korunách. Ale pozor! Adresa sídla obchodu už může být v cizině. Existují obchody, které komunikují česky, nechávají si platit kartou nebo dokonce v korunách na český účet, ale sídlí třeba v Paříži, odkud také rozesílají zboží. To je pro zákazníka pochopitelně zajímavá informace.+
  
-Neměli byste naopak edpokládat žádný konkrétní druh zboží. Pokud budete program testovat třeba na mobilech, nemělo by to znamenat, že nepůjde se srovnatelnou úspěšností pustit i na obchod s cédéčkyhrami, oblečením aj. Ignorujte méně obvyklé druhy zbožíkteré se běžně neposílají poštou (na jedné straně třeba nemovitosti autana druhé např. skladby a softwarekterý si po zakoupení registračního kódu ímo po síti stáhnete do počítače).+Pokud chcete, umíte a máte na čem to edvést, můžete program vyrobit rovnou jako aplikaci pro Android nebo i-Phone (v&nbsp;takovém případě by to nemuselo být v&nbsp;Perlu). Jinak standardně jako skript v&nbsp;Perlukterý čte stažené HTML ze standardního vstupu, případně (nepovinně) rovnou stáhne ze serveru keškujejíž kód dostane. Pokud by váš skript obsahoval stahování vstupního textu ze serveruchovejte se slušně a opatrně, protože podmínky serveru zakazují stahování údajů roboty. Na standardní výstup vypište vzorec, který jste v&nbsp;textu našli (nejlépe přímo přepsaný do Perlové syntaxe, aby bylo možné ho použít ve vašem programu), pod něj seznam proměnných příslušnou pasáž textukterá říká, jak hodnotu proměnné získatAlternativněpokud už uživatel hodnoty proměnných zná a zadá je jako volby na íkazovém řádku, rovnou vypište souřadnice. Příklady (písmeny ''GC'' začínají jednoznačné kódy kešek, jejich popisy lze najít na URL ''http://coord.info/GC...''):
  
-===== Databáze =====+<code bash>multi.pl < GC3R9BF.txt</code> 
 +nebo 
 +<code perl>multi.pl --download=GC3R9BF 
 +  N50° A(C+5).(D*E)(F-D-A)(G-B) 
 +  E014° B(C+2).(G-D+A)(D+E)(B+C) 
 +nebo lépe 
 +  sprintf("N 50° %d%d.%d%d%d", $a, $c+5, $d*$e, $f-$d-$a, $g-$b); 
 +  sprintf("E 14° %d%d.%d%d%d", $b, $c+2, $g-$d+$a, $d+$e, $b+$c); 
 +a pod tím 
 +  A = 
 +    Některé z Vás sem přivedla čísla AABC. 
 +  B = 
 +    Některé z Vás sem přivedla čísla AABC. 
 +  C = 
 +    Některé z Vás sem přivedla čísla AABC. 
 +  D = 
 +    Dělová koule Vám ukáže číslo popisné D (Postavíte-li se čelem ke zdi, dům vlevo pod). 
 +atd.</code>
  
-Je na vás, jakou zvolíte implementaci databáze, do které budete informace ukládat. Pro snadnější testování robota na libovolném stroji se však raději vyhněte užívání knihoven a softwaru, který by bylo potřeba doinstalovat (např. SQL server). Úplně postačí, když příslušná data dokážete vypsat do textových souborů, kde jsou hodnoty jednotlivých polí oddělené středníky.+==== Nápověda ====
  
-Databázi ovšem musíte umět také na začátku načístabyste mohli porovnávat názvy zbožíkteré v obchodě najdete, názvy zboží, které jste už dříve našli jiných obchodech.+Nepředpokládám, že kvůli této úloze naprogramujete kompletní morfologickou a syntaktickou analýzu češtinyi když by vám určitě pomohla k&nbsp;lepším výsledkům. Spíše půjde o porovnávání textů s&nbsp;regulárními výrazy a předem vybranými klíčovými slovy. Můžete si pomoci i strukturou stránky: např. souřadnice jednotlivých bodů multikešky bývají přiloženy i v&nbsp;přehledné tabulce na konci. Tím získáte přehled jednotlivých zastávek (často i v&nbsp;češtině označovaných anglickým slovem //stage//), které pak v&nbsp;textu hledáte.
  
-Databázi můžete číst a ukládat do souboru (složky), jehož výchozí jméno je uvedené přímo ve zdrojáku. V tom případě to ale nesmí být absolutní cesta (není přenositelnánapř. ''C:\Documents and Settings\blablabla'' nefunguje na Linuxu) a v podstatě by vůbec neměla opustit aktuální složku, pokud neumíte zajistit, že ípadné neexistující složky se vytvoříV&nbsp;každém případě ale uživatel musí mít možnost dodat cestu k databázi, kterou preferuje on, pomocí nějaké volby na íkazovém řádkunapř. ''dobyvatel.pl -db /home/user/obchody-db''.+Soustřeďte se nejdříve na nejjednodušší případ, kdy je popis kešky jednojazyčný (pouze česky)souřadnice jednotlivých zastávek jsou dané edem a hledáte jen jediný vzorecPotom podle možností řešení rozšiřujte na komplikovanější ípady (více jazykůvíce vzorců).
  
 ===== Další informace ===== ===== Další informace =====
  
-Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://ufal.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán).+Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://quest.ms.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán).
  
 Pokud se individuálně nedohodneme jinak, termín odevzdání je konec listopadu. Při některé prosincové přednášce program předvedete ostatním. Pokud se individuálně nedohodneme jinak, termín odevzdání je konec listopadu. Při některé prosincové přednášce program předvedete ostatním.
  

[ Back to the navigation ] [ Back to the content ]