AplikaceAplikace
Nastavení

Anotační nástroje a formát souboru

Základním formátem pro anotovaná data v UD je formát CoNLL-U, což je v podstatě textový formát, ve kterém každý token má svůj řádek a na tomto řádku je deset tabulátorem oddělených sloupců s předepsanými hodnotami. Nebýt toho, že na začátku a konci věty jsou řádky, které neodpovídají žádnému tokenu a vypadají jinak, šlo by vlastně o velkou tabulku. Pro účely ruční anotace morfologie si tento formát ještě dále upravujeme, aby opravdu fungoval jako tabulka (ale s mnohem větším počtem sloupců) a bylo možné ho otevřít v tabulkových programech (např. LibreOffice Calc nebo Microsoft Excel). Po skončení anotace použijeme skript, kterým anotovaná data převedeme zpět do formátu CoNLL-U.

Momentálně platí, že upravené tabulkové soubory, připravené k anotaci, mají příponu .tsv („tab-separated values“); v budoucnosti možná budeme připravovat rovnou soubory ve formátu .xlsx, ale zatím to neumíme. Anotátor si každopádně může po načtení souboru do Excelu uložit tento soubor jako .xlsx, aby se mu uchovala další nastavení, třeba jím zvolená šířka sloupců. Až bude anotace hotová, Dan nebo Ondra z toho zase udělají soubor .tsv, který půjde zpracovat skriptem a převést do požadovaného .conllu.

Při načítání souboru .tsv Excel zobrazí několik oken, ve kterých se zeptá na podrobnosti vstupního formátu. Snímky obrazovky níže ukazují, co v těchto oknech nastavit. Např. v prvním okně je třeba Excelu říct, že text používá kódování UTF-8, jinak budou české znaky zobrazeny špatně. Poslední okno naznačuje, že u všech sloupců chceme spíše formát Text než Obecný – tohle není úplně nezbytné a vzhledem k počtu sloupců, které máme, by bylo nepříjemné to pokaždé všude nastavovat; nicméně se to může občas hodit, kdyby v některé buňce tabulky bylo něco, co bude chtít Excel interpretovat třeba jako datum a obsah buňky nám pokazit.

Ani Excel, ani LibreOffice nebo jiný podobný program není ušitý na míru jako anotační nástroj. Proto je třeba vyvarovat se některých úkonů, které by nám znemožnily na konci data převzít a zpracovat skriptem. Co se tedy smí a co se nesmí?

  • První řádek obsahuje záhlaví sloupců. Je možné a doporučuje se v Excelu ukotvit první řádek, aby záhlaví bylo vidět i po posunu v souboru dolů. Text záhlaví ale v žádném případě neměnit!
  • Je možné v Excelu podle potřeby měnit šířku sloupců a je možné dokonce sloupce přeskládat v jiném pořadí. Pokud žádný sloupec nebude zcela smazán a pokud všem sloupcům zůstane jejich původní záhlaví, bude možné taková data převzít a zpracovat.
  • Není možné přidávat ani mazat řádky. Pokud anotátor odhalí chybnou tokenizaci nebo hranici vět, musí tento problém vyznačit dohodnutým způsobem (viz níže) na již existujících řádcích.
  • Je možné dočasně řádky seřadit jinak, např. podle slovního tvaru, aby všechny výskyty téhož tvaru byly vidět za sebou. Poté je ale nutné uvést řádky do původního pořadí. Za tím účelem je v prvním sloupci každého souboru číslo řádku, takže stačí Excelu říct, aby řádky seřadil podle hodnot v prvním sloupci.
  • Není možné měnit id věty (sloupec SENTENCE), slova (sloupec ID) ani tvar slova (sloupec FORM). Počítá se s tím, že při přebírání dat bude skript podle těchto sloupců kontrolovat, že se mu nerozjela synchronizace se vstupním souborem; pokud najde nesrovnalost, tak oznámí chybu a odmítne soubor zpracovat.

Jak hlásit změny ve větné segmentaci a v tokenizaci

Vstupní soubory obsahují několik prázdných sloupců, ve kterých lze předem stanoveným způsobem říct, že je potřeba opravit hranice vět nebo tokenů.

  • Sloupec RESEGMENT:
    • V tomto sloupci bude neprázdná hodnota v případě, že je potřeba opravit segmentaci textu na věty. Povolené hodnoty:
      • spojit … Má smysl pouze u prvního tokenu existující věty a říká, že tato věta se má spojit s větou předcházející. (Tj. ta hodnota se nemůže objevit v první větě dokumentu a asi ani odstavce.)
      • rozdělit … Má smysl pouze u jiného než prvního tokenu existující věty a říká, že tato věta se má rozdělit a toto má být první token nové věty.
    • Jednu větu lze rozdělit i na více než dva kusy. Lze také začátek věty spojit s předchozí větou, ale později větu rozdělit.
  • Sloupec RETOKENIZE:
    • V tomto sloupci bude neprázdná hodnota v případě, že je potřeba opravit tokenizaci (resp. segmentaci na slova). Povolené hodnoty:
      • spojit … Tento token má být součástí předcházejícího tokenu. Pokud je předcházející token v jiné větě, je třeba současně signalizovat i spojení vět (viz výše). Správná morfologická anotace je uvedena u předcházejícího tokenu (pokud nebyl předcházející token současně dělen, viz níže).
      • rozdělit … Tento token má být rozdělen na dva nebo více nových tokenů. Tato hodnota sama neříká, jak a na kolik dílů se má token rozdělit, ani jaká je morfologická anotace jednotlivých dílů.
        • Pokud je alespoň na jedné straně od nové hranice tokenů interpunkční znak, výsledkem dělení jsou dva podřetězce původního tokenu, přičemž u toho prvního přibude v MISC atribut SpaceAfter=No (Dan zařídí později skriptem).
        • Pokud je nová hranice vedena mezi dvěma písmeny, bude výsledkem „multiword token“ (MWT, agregát). Danův skript vloží nový řádek pro rozsah MWT, jednotlivé části pak nemusí být nutně podřetězce povrchového tokenu, např. „bylas“ se rozloží na „byla“ a „jsi“.
      • obojí … Token se má rozdělit a jeho první část se má spojit s předcházejícím tokenem. Jde o komplexní (a snad nepravděpodobnou) situaci, která se bude muset dořešit ručně.
  • Sloupec SUBTOKENS:
    • Vyplňuje se právě tehdy, když ve sloupci RETOKENIZE je hodnota „rozdělit“ nebo „obojí“. Obsahuje hodnoty pole FORM nových tokenů, oddělené mezerou (např. pro „bylas“ zde bude „byla jsi“). Ani toto není úplná informace, protože nemáme prostor na oddělenou morfologickou anotaci každého nového tokenu zvlášť. Pokud se ukáže, že jde o častý jev, vymyslíme dodatečně, jak ho řešit systematicky; pokud to bude jen pár případů, tak je vyřešíme ad hoc při přebírání anotací.