Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
user:zeman:ukoly:hranice-slov-a-vet [2007/10/17 09:13] zeman vytvořeno |
user:zeman:ukoly:hranice-slov-a-vet [2013/10/08 08:06] (current) zeman quest |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Hranice slov a vět ====== | ====== Hranice slov a vět ====== | ||
- | //(úloha z počítačového zpracování přirozeného jazyka)// | + | {{template> |
- | + | ||
- | // | + | |
Napište programy, které najdou v textu hranice slov a vět. K testování dostanete data v konkrétním jazyku, váš program by však měl být v maximální možné míře jazykově nezávislý. Vše, co potřebuje o konkrétním jazyku vědět, by měl být schopen se naučit z dat. (Z toho plyne, že vy daný jazyk ovládat nemusíte.) | Napište programy, které najdou v textu hranice slov a vět. K testování dostanete data v konkrétním jazyku, váš program by však měl být v maximální možné míře jazykově nezávislý. Vše, co potřebuje o konkrétním jazyku vědět, by měl být schopen se naučit z dat. (Z toho plyne, že vy daný jazyk ovládat nemusíte.) | ||
Line 8: | Line 6: | ||
Úloha má tyto části: | Úloha má tyto části: | ||
- Tokenizátor. Čte text ze standardního vstupu, hledá a vyznačuje v něm hranice tokenů (slov), výsledek píše na standardní výstup. | - Tokenizátor. Čte text ze standardního vstupu, hledá a vyznačuje v něm hranice tokenů (slov), výsledek píše na standardní výstup. | ||
- | - Oddělovač vět. Čte ze standardního vstupu tokenizovaný text s vyznačenými hranicemi odstavců. | + | - Oddělovač vět. Čte ze standardního vstupu tokenizovaný text s vyznačenými hranicemi odstavců. |
- Program, který se z trénovacích dat, ve kterých jsou vyznačené věty, naučí statistiku, potřebnou pro zlepšení rozhodování o hranicích vět. | - Program, který se z trénovacích dat, ve kterých jsou vyznačené věty, naučí statistiku, potřebnou pro zlepšení rozhodování o hranicích vět. | ||
- | Programy pište v Perlu a snažte se vyvarovat obratů, které by omezily | + | ===== Tokenizátor ===== |
+ | |||
+ | //Token// je společný termín, který se někdy používá pro slova a další prvky věty (čísla, interpunkci). Pokud nebude řečeno na konkrétním místě něco jiného, my budeme používat výrazy //token// a //slovo// jako zaměnitelné. Tokenizátor je program, který má rozdělit vstupní text na tokeny. | ||
+ | |||
+ | Váš program se má jmenovat '' | ||
+ | |||
+ | Vstupní i výstupní text je v UTF-8 v libovolném jazyku. Na vstupu mohou být vyznačené hranice odstavců pomocí zalomení řádku (znak LF nebo dvojice CR LF). Tokenizátor nesmí ztratit informaci o tom, zda mezi dvěma slovy byl konec odstavce (řádku), má však mazat nadbytečné prázdné odstavce, ve kterých není žádné slovo. Na začátku a na konci řádku nemají zůstat žádné mezery, mezi dvěma tokeny má být právě jedna mezera (bez ohledu na to, kolik jich bylo na vstupu). Nejdůležitějším úkolem programu je přidat mezeru mezi tokeny, které na vstupu nebyly oddělené. Pravidla, podle čeho poznat hranici tokenu, následují. | ||
+ | |||
+ | **Upozornění: | ||
+ | |||
+ | - Slovo je neprázdné, | ||
+ | - Nepřerušený řetězec písmen, číslic a podtržítek je jedno slovo nebo jeho část. Pozor, tato část by měla být jazykově nezávislá a v některých jazycích jsou písmena, se kterými se v češtině nesetkáte. Obdobně číslice jsou i jiné, třeba arabské. Tip: Nemusíte kvůli jazykové nezávislosti procházet celý Unicode a vypisovat do zdrojáku, co je písmeno a co ne. To už někdo udělal za vás. Podívejte se do dokumentace | ||
+ | - Mezerové znaky (řídící znaky včetně TAB, CR a LF, mezera 32, asi i NBSP 160, případné mezery ve vyšších patrech Unicodu) netvoří slovo ani jeho část. Považují | ||
+ | - Zvláštní znaky (cokoliv, co není písmeno, číslice, podtržítko ani mezera) zpravidla netvoří jedno slovo s písmeny a číslicemi, | ||
+ | - Zvláštní znaky obklopené z obou stran číslicemi jsou spolu s číslicemi na obou stranách součástí jednoho slova. To se týká zejména desetinné čárky nebo tečky, ale i oddělovače řádů (tečka, čárka, apostrof). Oddělovačem řádů může být i mezera. Proto mezera | ||
+ | - Výjimkou z předcházejícího pravidla (tedy vlastně výjimkou z výjimky) jsou data. Pokud se pozná, že jde o datum, mělo by být rozděleno tak, aby den, měsíc a rok byly samostatnými slovy a případná interpunkce také. (Důvod: bude-li jinde uvedeno stejné datum, ale s měsícem vyjádřeným slovně ("1. července 2005" | ||
+ | - Sousedící, | ||
+ | - Znak dolaru může přiléhat zprava k posloupnosti písmen, v tom případě s nimi tvoří jedno slovo (např. US$, A$, C$, HK$). | ||
+ | - E-mailové adresy a URL jsou výjimky a tvoří vždy jedno slovo. (Pozor, pokud se vyskytnou na vhodném místě věty, může k nim být zprava přilepená interpunkce, | ||
+ | |||
+ | ===== Učení hranic vět ===== | ||
+ | |||
+ | Pomocný program '' | ||
+ | |||
+ | Vstupem programu je tokenizovaný text v UTF-8, ve kterém jsou hranice odstavců a vět vyznačené následovně: | ||
+ | |||
+ | * Každá věta leží na samostatném řádku. | ||
+ | * Mezi dvěma odstavci je jeden řádek vynechaný (prázdný). | ||
+ | |||
+ | Pokud je program zavolán bez argumentů, vstup se čte ze standardního vstupu. Pokud je zavolán s argumenty, ty se považují za cesty k souborům, které se mají načíst. | ||
+ | |||
+ | Program by měl vždy psát na standardní výstup, formát výstupu si však stanovte sami podle toho, jaké informace chcete sbírat. | ||
+ | |||
+ | |||
+ | ===== Hledání hranic vět ===== | ||
+ | |||
+ | Program '' | ||
+ | |||
+ | Veškerá pravidla závislá na // | ||
+ | |||
+ | Program může být zavolán s volbou (option) '' | ||
+ | |||
+ | Hlavní vstup (text k rozebrání) se čte ze standardního vstupu, pokud nebyl program zavolán s argumenty; potom tyto argumenty slouží jako cesty k souborům se vstupním textem. Text s vyznačenými hranicemi vět se píše (opět v UTF-8) na standardní výstup. | ||
+ | |||
+ | Kromě zkratek mějte na paměti i další věci (seznam samozřejmě není úplný): | ||
+ | - Některé jazyky neznají pojem velkého a malého písmena. Ta se rozlišují v latince, cyrilici, řecké a arménské abecedě. | ||
+ | - Kromě velkého písmena může věta začínat i číslem nebo interpunkcí (levá závorka, uvozovky). | ||
+ | - Věta nemusí končit jen tečkou, vykřičníkem a otazníkem. Opět můžou na konci ležet i různé druhy pravých závorek a uvozovek. Není ale předem jisté, zda bude tečka před závorkou nebo za ní: .) ). )." .") atd. | ||
+ | - Typografické uvozovky se nepoužívají ve všech jazycích stejně a stojí za zvážení, zda je neřešit rovněž učením z dat. Např. v češtině a němčině se za levou uvozovku považuje znak „ (" | ||
+ | - Tečka mezi dvěma číselnými tokeny může být součást data. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Další informace ===== | ||
+ | |||
+ | Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http:// | ||
+ | |||
+ | 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. | ||
+ | |||
+ | Další informace k úkolu najdete v http:// | ||
+ | |||
+ | V zimním semestru 2007-2008 jsou v nabídce němčina, švédština, | ||
+ | * {{user: | ||
+ | * {{user: | ||
+ | * {{user: | ||
+ | * {{user: |