Open psekan opened 3 years ago
Klasifikace rozpoznaný typů entit s ukázkami pro verzi NameTag 2 vznikla na základě materiálů, které jsou součástí dokumentace k Czech Named Entity Corpus 2.0; k dispozici ke stažení zde.
Doplněná verze převodní tabulky mezi NameTagem 2 a TEI. Stále ještě nejde o definitivní reperotát značek a atributů (můžou se měnit názvy elementů i atributů, popř. jejich hodnot).
Nadtyp/typ | Popis | Příklad | TEI |
---|---|---|---|
a | ČÍSLA JAKO SOUČÁSTI ADRES | ||
ah | číslo popisné | ul. Šikmá <ah 356> |
<num><w>356</w></num> |
at | telefon, fax | tel. <at 256 458 588> |
<num type="phone"><w>256</w><w>458</w><w>588</w></num> |
az | PSČ | <az 180 00> Praha 8 |
<num type="zip"><w>180</w><w>00</w></num> |
C | Komplexní bibliografický údaj | <ne type="C"> ... </ne> |
<bibl> (pokud jde o jediný prvek v rámci <s> ) |
C | Komplexní bibliografický údaj | <ne type="C"> ... </ne> |
<objectName type="bibliography" ana="#nametag-C"> (pokud nejde o jediný prvek v rámci <s> ) |
g | GEOGRAFICKÉ NÁZVY | ||
gc | státní útvary | <gc Česká republika> , <gc Svatá říše římská> |
<placeName><country><w>Česká</w><w>republika</w></country></placeName> |
gh | vodní útvary | <gh Vltava> , <gh Balaton> |
<geogName type="water"><w>Vltava</w></geogName> |
gl | přírodní oblasti / útvary | <gl Sibiř> , <gl Apeninský poloostrov> , <gl Polabí> |
<geogName type="area"><w>Apeninský</w><w>poloostrov</w></geogName> |
gq | části obcí, pomístní názvy | <gq Smíchov> |
<placeName><settlement><w>Smíchov</w></settlement></placeName> |
gr | menší územní jednotky | <gr Morava> , <gr Rychnovsko> , <gr Badensko-Württembersko> |
<placeName><region><w>Morava</w></region></placeName> |
gs | ulice, náměstí | <gs ul. Šikmá> , <gs nám. Míru> |
<address><street><w>ul.</w><w>Šikmá</w></street></address> |
gt | kontinenty | <gt Jižní Amerika> |
<geogName type="continent"><w>Jižní</w><w>Amerika</w></geogName> |
gu | obce, hrady a zámky | <gu Praha> , <gu Opočno> |
<placeName><settlement><w>Praha</w></settlement></placeName> |
g_ | geografický název nespecifikovaného typu / nezařaditelný do ostatních typů | Učkuduk v <g Mojunkumech> |
<placeName><w>Mojunkumech</w></placeName> |
i | NÁZVY INSTITUCÍ | ||
ia | přednášky, konference, soutěže,... | <ia Stanley Cup> |
<objectName><w>Stanley</w><w>Cup</w></objectName> |
ic | kulturní, vzdělávací a vědecké instituce, sportovní kluby,... | kino <ic Dlabačov> , hokejisté <ic Sparty> |
<orgName><w>Dlabačov</w></orgName> |
if | firmy, koncerny, hotely,... | <if Unipetrol> , řetězec <if Edeka> |
<orgName><w>Unipetrol</w></orgName> |
io | státní a mezinárodní instituce, politické strany a hnutí, náboženské skupiny | <io Evropská komise> , <io Policie> , <io ODS> |
<orgName><w>Policie</w></orgName> |
i_ | instituce nespecifikovaného typu / nezařaditelné do ostatních typů | <i Studijní odd.> |
<orgName><w>Studijní</w><abbr><w>odd</w><pc>.</pc></abbr></orgName> |
m | NÁZVY MÉDIÍ | ||
me | e-mailové adresy | <me john@seznam.cz> |
<email>john@seznam.cz</email> |
mi | internetové odkazy | <mi www.cinestar.cz> |
<ref target="www.cinestar.cz">www.cinestar.cz</ref> |
mn | periodika, redakce, tiskové agentury | agentura <mn Interfax> |
<orgName><w>Interfax</w></orgName> |
ms | rozhlasové a televizní stanice | <mr Frekvence 1> , <mt ČT 2> |
<orgName><w>ČT</w><w>2</w></orgName> |
n | ČÍSLA SE SPECIFICKÝM VÝZNAMEM | ||
na | věk | je mu <na 18> |
<num><w>18</w></num> |
nc | číslo s významem počtu | s <nc 35miliardovým> deficitem, od <nc 8> do <nc 40> |
<num><w>35miliardovým</w></num> |
nb | číslo strany, kapitoly, oddílu, obrázku | podle paragrafu <nb 187> , tab na s. <nb 13> |
<num><w>187</w></num> |
no | číslo s významem pořadí | <no 154.> vydání, umění <no 20.> století |
<num type="ordinal"><w>20.</w></num> |
ns | sportovní skóre | vyhráli <ns 5:0> |
<num>5</num><pc>:</pc><num>0</num> |
ni | itemizátor | <ni 1)> DPH, <ni 2)> daň z příjmu |
<num><w>1</w><pc>)</pc></num> |
n_ | číslo se specifickým významem, jehož typ nebyl vyčleněn jako samostatný / nelze identifikovat | autobusová linka <n 158> |
<num>158</num> |
o | NÁZVY VĚCÍ | ||
oa | kulturní artefakty (knihy, filmy stavby,...) | Hugovi <oa Bídníci> |
<objectName type="artefact"><w>Bídníci</w></objectName> |
oe | měrné jednotky (zapsané zkratkou) | 200 <om MHz> |
<unit><w>MHz</w></unit> |
om | měny (zapsané zkratkou, symbolem) | 1000 <om Kč> , 30 <om $> |
<unit><w>Kč</w></unit> |
op | výrobky | mikroprocesory <op Intel Pentium> |
<objectName type="product"><w>Intel</w><w>Intel</w></objectName> |
or | předpisy, normy,..., jejich sbírky | ve <or Sbírce zákonů> |
<objectName type="rule"><w>Sbírce</w><w>zákonů</w></objectName> |
o_ | názvy nespecifikovaného typu / nezařaditelné do ostatních typů | čeleď <o Rubiaceae> , <o HIV> |
<objectName><w>HIV</w></objectName> |
p | JMÉNA OSOB | ||
pc | obyvatelská jména | <pc Afričan> , <pc Pražan> |
<name type="population"><w>Afričan</w></name> |
pd | titul (pouze zkratkou) | <pd Mgr.> J. Pola |
<abbr><w>Mgr</w><pc>.</pc></abbr> |
pf | křestní jméno | <pf David> Uhl, <pf J.> Drda |
<forename><w>David</w></forename> , <forename><w>J</w><pc>.</pc></forename> |
pm | druhé křestní jméno | Georg <pm Friedrich> Händel |
<forename type="middle"><w>Friedrich</w></forename> |
pp | náboženské postavy, pohádkové a mytické postavy, personifikované vlastnosti | <pp sv. Jakub> , <pp Prozřetelnost> |
<persName><w>sv</w><pc>.</pc><w>Jakub</w></persName> |
ps | příjmení | <ps Nováková> , <ps van Dyk> |
<surname>Nováková</surname> |
p_ | jméno osoby nespecifikovaného typu / nezařaditelné do ostatních typů | <p Slované> |
<name><w>Slované</w></name> |
t | ČASOVÉ ÚDAJE | ||
td | den | <td 1.> října 2005 |
<date><w>1</w><pc>.</pc></date> |
tf | svátky a významné dny | <tf Velikonoce> |
<date type="holiday"><w>Velikonoce</w></date> |
th | hodina | v <th 17> hodin |
<time><w>17</w></time> |
tm | měsíc | 1. <tm října> 2005 |
<date><w>října</w></date> |
ty | rok | od roku <ty 1555> |
<date><w>1555</w></date> |
První verze obsahuje minimum prvků v části pro samotný text (<text>
) i hlavičku dokumentu (<teiHeader>
). Elmenty, atributy, popř. jejich hodnoty bude potřeba ještě dále upřesňovat.
Přiložený zip obsahuje dokument ODD, schéma dokumentu ve formátu RNG a dokumentaci ve formátu HTML. Vše bylo vygenerováno nástrojem Roma - ODD Customization (Version 0.3.1).
Pokud by bylo potřeba definovat vlastní elementy nebo atributy, nanvrhuju jmenný prostor https://system-kramerius.cz/ns/dl4dh/1.0
.
Aktualizovaná verze ODD a souvisejících souborů včetně ukázkového dokumentu XML s příklady z převodní tabulky. Provedené změny: doplněny elementy address
, street
a unit
.
ODD.zip
Dobrý den, @daliboris,
děkujeme, kolega již zpracovává dodané tagy. Kompletní seznam elementů očekáváme v polovině června.
Dobrý den, @daliboris,
na základě výše dodaných TEI elementů jsme připravili první prototyp a z něj vygenerovaný TEI soubor.
Zdroj (3 strana dokumentu):
Vygenerovaný TEI (doporučení podívat se na stranu 3):
Dále bychom Vás rádi poprosili a vydefinování zbylých TEI elementů
Zdravím, přidávám sem diskusi s kolegy na konverze reprezentace pojmenovaných entit z NameTagu do TEITOKu. Nechám na vás, zda to stojí za nějakou úpravu.
Pavel Straňák 14:14 Can you have a look [at this issue], whether you see some problems, and of course, if it looks OK for possible later import into TEITOK?
Maarten Janssen 11:59 There is in principle nothing wrong with this - the only possible objection is the fact that it is both overly informative and underinformed; on the one hand, it does not keep the NameTag tag, and hence flattens all the numbers for instance; since those might be useful, it might make sense to keep the NameTag tag as either
@ana
or more explicitly@nertype
, so that the information does not get lost 12:04 and on the other hand, it uses many different tags for names, which might make it more cumbersome to deal with them afterwards, since you would need to process each type of tag; and there are types of NER in NameTag that do not easily translate to tags - which is why Mattyas in ParCzech keeps a single tag for all NER (if I am not mistaken); 12:05 The two things are related of course - if you keep an explicit @nertype
, you can use that to collect all NER instead of the individual tags 12:06 And the conversion to TEITOK is (from the things listed here - there might be other things) trivial, it is only the typical conversion for<w>
to<tok>
, which the teitok-tools scripts already do 12:08 The converter of the Stefan institute is a different issue; I used it a lot in the past and even had it in the recommended TEITOK workflow; but it the end, it is often too literal for data processing, and I like the output of pandoc better, so that is what is used in http://quest.ms.mff.cuni.cz/teitok-dev/teitok/tools/index.php?action=convert 12:08 but the output of the Stefan institute is perfectly usable in TEITOK, as said, it has been used quite a bit in the past…Matyáš Kopp 19:41 The current version of ParCzech 3.0 (I will release it tomorrow) basically distinguishes two types of name entities. Proper name are represented by
<name>
element and the rest have it's own element<num> ,<ref> ,<email> ,...
Each type have CNEC category stored in@ana
attribute. Furthermore, proper names havePER ,LOC ,ORG,MISC
stored in@type
attribute if they are not nested in other name entity. Proper names are usually targeted in search query and it make sense to add more features on them (normalized form, named entity linking, referencing them in text...). So we decide to store them in a common element<name>
...
Reakce na ukázku:
Upravil jsem Tabulku rozpoznávaných typů entit s odpovídajícími elementy podle TEI
Připomínky k samotnému XML:
<tei:w>
postrádám atribut @xml:id
+ chybí oddíl <fascimile>
, který vznikne konverzí ALTO2TEItei:w/@feats
>> tei:w/@msd
tei:w/@type
>> tei:w/@pos
<w lemma="Michael" msd="Animacy=Anim|Case=Gen|Gender=Masc|NameType=Giv|Number=Sing|Polarity=Pos" pos="PROPN">Michaela</w>
<group>
se používá pro skupinu textů, nikoli pro skupinu slov<group type"">
je potřeba převést na "jednodušší elementy TEINásleduje přehled doporučených změn. (Ukázka = značkování v první ukázce, NameTag = výstup z NameTagu, DL4DH = jak by to mělo vypadat.)
<group type="T">
<date>
<w lemma="16" msd="NumForm=Digit|NumType=Card" pos="NUM">16</w>
<pc join="left">.</pc>
</date>
<date>
<w lemma="duben" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos" pos="NOUN">dubna</w>
</date>
<date>
<w lemma="1898" msd="NumForm=Digit|NumType=Card" pos="NUM">1898</w>
</date>
</group>
<date when="1898-04-16">
<w lemma="16" msd="NumForm=Digit|NumType=Card" pos="NUM">16</w>
<pc join="left">.</pc>
<w lemma="duben" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos" pos="NOUN">dubna</w>
<w lemma="1898" msd="NumForm=Digit|NumType=Card" pos="NUM">1898</w>
</date>
<sentence>
<ne type="P">
<ne type="pf">
<token>Karel</token>
<token>princ</token>
<token>ze</token>
</ne>
<ne type="gu">
<token>Schwarzenbergů</token>
</ne>
</ne>
</sentence>
<group type="P">
<forename>
<w lemma="Karel" msd="Animacy=Anim|Case=Nom|Gender=Masc|NameType=Giv|Number=Sing|Polarity=Pos" pos="PROPN">Karel</w>
</forename>
<w lemma="princ" msd="Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing|Polarity=Pos" pos="NOUN">princ</w>
<w lemma="z" msd="AdpType=Voc|Case=Gen" pos="ADP">ze</w>
<placeName>
<settlement>
<w lemma="Schwarzenberg" msd="Animacy=Anim|Case=Gen|Gender=Masc|NameType=Sur|Number=Plur|Polarity=Pos" pos="PROPN">Schwarzenbergů</w>
</settlement>
</placeName>
</group>
<persName>
<forename>Edward</forename>
<forename>George</forename>
<surname type="linked">Bulwer-Lytton</surname>, <roleName>Baron Lytton of
<placeName>Knebworth</placeName>
</roleName>
</persName>
<persName>
<forename>
<w lemma="Karel" msd="Animacy=Anim|Case=Nom|Gender=Masc|NameType=Giv|Number=Sing|Polarity=Pos" pos="PROPN">Karel</w>
<w lemma="princ" msd="Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing|Polarity=Pos" pos="NOUN">princ</w>
<w lemma="z" msd="AdpType=Voc|Case=Gen" pos="ADP">ze</w>
</forename>
<placeName>
<w lemma="Schwarzenberg" msd="Animacy=Anim|Case=Gen|Gender=Masc|NameType=Sur|Number=Plur|Polarity=Pos" pos="PROPN">Schwarzenbergů</w>
</placeName>
</persName>
<group type="P">
<abbr>
<w lemma="Thlg" msd="Abbr=Yes|Animacy=Anim|Gender=Masc|Polarity=Pos" pos="NOUN">Thlg</w>
<pc join="left">.</pc>
</abbr>
<abbr>
<w lemma="doktor" msd="Abbr=Yes|Animacy=Anim|Gender=Masc|Polarity=Pos" pos="NOUN">Dr</w>
<pc join="left">.</pc>
</abbr>
<forename>
<w lemma="Frant" msd="Animacy=Anim|Case=Nom|Gender=Masc|NameType=Sur|Number=Sing|Polarity=Pos" pos="PROPN">Frant</w>
<pc join="left">.</pc>
</forename>
</group>
<persName>
<abbr>
<w lemma="Thlg" msd="Abbr=Yes|Animacy=Anim|Gender=Masc|Polarity=Pos" pos="NOUN">Thlg</w>
<pc join="left">.</pc>
</abbr>
<abbr>
<w lemma="doktor" msd="Abbr=Yes|Animacy=Anim|Gender=Masc|Polarity=Pos" pos="NOUN">Dr</w>
<pc join="left">.</pc>
</abbr>
<forename>
<w lemma="Frant" msd="Animacy=Anim|Case=Nom|Gender=Masc|NameType=Sur|Number=Sing|Polarity=Pos" pos="PROPN">Frant</w>
<pc join="left">.</pc>
</forename>
</persName>
<NameTag>
<sentence>
<ne type="pd">
<token>Dra</token>
<token>.</token>
</ne>
</sentence>
<sentence>
<ne type="ps">
<token>Michla</token>
</ne>
</sentence>
</NameTag>
<abbr>
<w lemma="droktor" msd="Abbr=Yes|Animacy=Anim|Gender=Masc|Polarity=Pos" pos="NOUN">Dra</w>
<pc join="left">.</pc>
<surname>
<w lemma="Michla" msd="Animacy=Anim|Case=Nom|Gender=Masc|NameType=Sur|Number=Sing|Polarity=Pos" pos="PROPN">Michla</w>
</surname>
</abbr>
<persName>
<abbr>
<w lemma="droktor" msd="Abbr=Yes|Animacy=Anim|Gender=Masc|Polarity=Pos" pos="NOUN">Dra</w>
<pc join="left">.</pc>
</abbr>
</persName>
<persName>
<surname>
<w lemma="Michla" msd="Animacy=Anim|Case=Nom|Gender=Masc|NameType=Sur|Number=Sing|Polarity=Pos" pos="PROPN">Michla</w>
</surname>
</persName>
<sentence>
<ne type="p_">
<token>Eminencí</token>
</ne>
<token>splnomocněn</token>
<token>,</token>
</sentence>
<date type="holiday">
<w lemma="eminence" msd="Case=Ins|Gender=Fem|Number=Sing|Polarity=Pos" pos="NOUN">Eminencí</w>
<w lemma="splnomocněný" msd="Gender=Masc|Number=Sing|Polarity=Pos|Variant=Short|VerbForm=Part|Voice=Pass" pos="ADJ">splnomocněn</w>
</date>
<persName>
<w lemma="eminence" msd="Case=Ins|Gender=Fem|Number=Sing|Polarity=Pos" pos="NOUN">Eminencí</w>
</persName>
<w lemma="splnomocněný" msd="Gender=Masc|Number=Sing|Polarity=Pos|Variant=Short|VerbForm=Part|Voice=Pass" pos="ADJ">splnomocněn</w>
Zahrnutí odkazu na původní klasifikaci NameTagu je dobrý nápad. K tomu by mělo sloužit následující řešení:
<teiHeader>
<profileDesc>
<textClass>
<classCode scheme="https://ufal.mff.cuni.cz/nametag/2/models">
<interpGrp>
<interp xml:id="nametag-ah">číslo popisné</interp>
<interp xml:id="nametag-at">telefon, fax</interp>
</interpGrp>
</classCode>
</textClass>
</profileDesc>
</teiHeader>
....
<text>
<body>
<p><num type="phone" ana="#nametag-at"><w>256</w><w>458</w><w>588</w></num></p>
</body>
</text>
Na úvod základní premisy:
Nástroje pro rozpoznávání entit definují svou vlastní taxonomii jednotlivých druhů rozpoznávaných entit; repertoár se může měnit i u téhož nástroje, např. u NameTagu mezi verzemi 1.0 a 2.0.
Při práci s TEI je vhodnější využívat prostředky (elementy), které nabízí tento standard, a nesnažit se přizpůsobit TEI takovému pojetí, které má software pro rozpoznávání entit. (Zachování původní klasifikace je však možné – a nejspíš i žádoucí, viz předchozí komentář.)
Standard TEI používá vlastní taxonomii (v podobě repertoáru elementů) pro zachycení entit (např. <address>
, <num>
, <date>
); tento repertoár se postupně specializuje: existují speciální značky pro jména osob, míst, organizací ap.; např. <objectName>
se objevil teprve v lednu 2019).
Obsah specifických elementů (např. u <persName>
) je obvykle identický s obecným elementem <name>
, tj. repertoár zanořených elementů bývá stejný.
Výhoda specifičtějších elementů spočívá v tom, že je lze pomocí atributu @type
blíže specifikovat, zatímco u obecnější elementu <name>
se tento atribut využije pro základní rozlišení pojmenování. Srov. např.:
<name type="person"><name type="forename" subtype="abbreviated">J.</name></name>
<persName><forename type="abbreviated">J.</forename></persName>
TEI se snaží pro entity (jak je rozpoznávají používané aplikace) definovat samostatné elementy, např. <num>
, <date>
, <street>
ap. Proto je potřeba při převodu z taxonomie programů pro rozpoznávání entit do standardu TEI vybírat nejvhodnější elementy: pokud používáme <num>
pro čísla, proč nepoužít <orgName>
pro názvy organizací?
Použití specifičtějších prvků má výhodu v tom, že jde o větší míru standardizace: zatímco názvy elementů se nemění, obsah atributu @type
obvykle není pevně stanoven. Lze to sice omezit pomocí vlastní úpravy TEI (s využitím ODD), vždy to ale bude méně standardizované než v případě elementů (můžeme se rozhodnout např. pro hodnoty @type
typu pers, org, nebo person, organisation; uživatel bude muset tuto konvenci znát).
Je velmi pravděpodobné, že pro označení křestního jména a příjmení budeme používat elementy <forename>
a <surname>
, nikoli <name type="forename">
a <name type="surname">
. Viděl bych v tom hlavní princip naší transpozice: pokud v TEI existuje pro entitu specifický element, použijme ho, teprve pokud neexistuje, rozlišme entity pomocí hodnot atributů.
Příklady dotazů XPath
s využitím obecnější a specifičtější transpozice:
//(name | foremane | surname) (: včetně zanořených :)
//(persName | placeName | geogName | objectName | orgName | foremane | surname)
//name[@type='place']
//placeName
//name[@type='place' or @type='geog']
//(placeName | geogName)
Pouze v případě dotazu na všechny názvy je první varianta kratší, v dalších případech bude varianta se specifičtější transpozicí úspornější.
Otázka pro badatele: budou se vyhledávat více všechny pojmenování (míst, osob ap.), nebo bude dotaz specifičtější (osoby a místa, nikoli věci)?
Soudím, že častěji se budou dotazy spíše specifické. Nebylo by ale relativně snadné mít nějaký separátní jednoslovný termín, který by byl zástupný pro všechny pojmenování (pouze proto, aby badatel nemusel jednotlivé kategorie vypisovat a náhodou na nějakou nezapomněl)?
Ještě vidím celkově zásadní problém u současného stavu OCR (jak bylo vidět i v ukázce a narážím na to neustále u vytvářeného usecase na biblické citace v prvorepublikovém tisku) - automatické rozpoznávání entit (a vše co z toho plyne) pak není dost dobře možné a tím pádem na to nebude spoleh a tedy se z toho nedají dělat skutečně relevantní statistické závěry... Myslím, že před konverzí do TEI je nutné OCR u většiny věcí zopakovat... je to vůbec v tomto objemu dat reálné, nebo se počítá spíše s postupným vylepšováním?
Nebylo by ale relativně snadné mít nějaký separátní jednoslovný termín, který by byl zástupný pro všechny pojmenování (pouze proto, aby badatel nemusel jednotlivé kategorie vypisovat a náhodou na nějakou nezapomněl)?
Jenom pro jistotu: týká se to hledání ve Feederu, nebo v TEI? Hledání ve Feederu bude nezávislé na výsledné podobě TEI.
Taky myslím, že ještě není zřejmé, co budeme považovat za pojmenování
: jde o jména osob/institucí/výrobků ap., nebo jde i o data, čísla, adresy - i to jsou rozpoznané entity.
Spíše Feederu - v podstatě jde o to, aby bylo hledání uživatelsky vstřícně nastavené (je nezávislé na výsledné podobě TEI, ale pracuje s ním, ne? Reagoval jsem jednoduše na "otázku pro badatele" - rád bych aby bylo snadné vyhledávat v obou "módech"). Pokud by badatelé chtěli pracovat přímo s dokumenty v TEI, pak se s jednotlivými entitami vypisovat musí (i tam mi ale přijde lepší varianta specifických entit).
S tím souvisí hned ten další bod, tedy kategorizace entit, která usnadní hledání (1. hledat všechny rozpoznané entity, 2. v rámci rozpoznaných entit hledat všechna pojmenování, hledat všechny časové údaje... 3. v rámci pojmenování hledat pouze jména osob, pouze geografická jména... 4. v rámci jmen osob hledat pouze křestní jména, příjmení, geografické tituly)
Tedy jsem pro použití specifických elementů (dle mého pohledu je to vstřícnější a přehlednější pro práci s TEI) a zároveň pro vytvoření kategorií pro Feeder, které jednotlivé elementy sdružují (což je např. v NameTag pouze částečně) - entity by pak mohly být zařazeny i do více kategorií (chtělo by to navíc i kategorizaci, která zohledňuje vnořování, jako např. u Schwarzenberga, kde je geografické pojmenování součástí jména osoby; to do toho ale možná vnáší až přílišnou variabilitu)
Případně též aby bylo snadné uživatelsky navolit jaké entity hledám (na základě seznamu rozpoznávaných entit), tedy vytvářet si vlastní kategorie (včetně možnosti vnořování - např. hledat pouze geografická pojmenování, která jsou součástí adres).
Mě přijde, že se nad tím @daliboris pečlivě zamyslel. Bohužel TEI není moje doména a nemohu to kriticky posoudit. Ale líbí se mi to zaměření na to, aby zvolený zápis v TEI předpokládal větší flexibilutu NameTagu (navíc teoreticky můžeme zvolit i jiný tagovací nástroj, takže univerzálnější řešení jsou lepší). Beru to tak, že když nechci TEI, stáhnu si TSV/JSON s kategoriemi aktuální verze NameTagu. @valekfrantisek Já počítám s tím, že v TEI Feeder hledat nebude, to už si každý badatel bude muset zařídit sám u sebe. Ale rozumím těm poznámkám a myslím, že důležité bude mít TEI model dobře a uživatelsky přívětivě zdokumentovaný.
V příloze TEI.zip najdete ukázku převodu publikace Vznik a uznání Československého státu z repozitáře MZK.
Výsledek vznikl pomocí aplikace napsané v XProc 3.0, k jejímu spouštění používám volně dostupnou implementaci v Javě MorganaXProc-III.
Aplikace zatím umí následující:
<teiHeader>
) a údajů v TEI pro jednotlivé strany (<text>
, resp. <body>
).Co zatím aplikace neumí:
Zjištěné problémy:
Je to podle mě dobrý základ pro to, abychom mohli stanovit, jaké elementy a atributy jsme schopni z dostupných dat získat a poskytnout uživatelům.
Ďakujeme @daliboris za doplnenie ďalších elementov a ukážky, ako správne formátovať rozpoznané entity P a T z NameTagu. Na adrese https://drive.google.com/drive/u/0/folders/1z2KeWwoZrAvFcvVhGObsMJBJiIS7Y8I8 je dostupná druhá verzia transformovaného dokumentu https://dnnt.mzk.cz/view/uuid:bd3b89f0-1396-11eb-a4cf-005056827e52?page=uuid:189d4d39-8862-4bb8-9e51-b7d914a4087a
Zapracovali sme:
p
pre odstavec a tagov s
pre vetyprofileDesc
publicationStmt.idno[uuid]
availability
ana
pre rozpoznané entity NameTagun
do tagu w
a tagu pc
pre označenie tokenu v rámci vetyw
sme zmenili pomenovanie atribútov type
na pos
a feats
na msd
Chýba nám zapracovať (sú označené ako TODO):
extent
publicationStmt
P
z NameTagu podľa špecifických prípadov v uvedených ukážkachGS
)Pokračujeme tak na zapracovaní týchto nedostatkov a budeme v blízkej dobe zasielať ďalšiu ukážku TEI. Máme ale jednu otázku k transformácií entity T
: Ako transformovať bloky, ktoré nie sú správne rozpoznané ako napríklad tento:
<group type="T" ana="#nametag-T">
<date ana="#nametag-td">
<w n="9" lemma="8" pos="NUM" msd="NumForm=Digit|NumType=Card">8</w>
</date>
<time ana="#nametag-th">
<w n="10" lemma="—" pos="SYM" msd="ConjType=Oper">—</w>
</time>
<time ana="#nametag-th">
<w n="11" lemma="38" pos="NUM" msd="NumForm=Digit|NumType=Card">38</w>
</time>
</group>
Ak v NameTag entite T
nie je entita td
, tm
aj ty
, tak nevieme previesť blok na format <date when="...">
. Čím nahradiť tag group
v takomto prípade? Pripadne, ako nestratiť informáciu o viacerých rozpoznaných entitách pri ich zlúčení do jedného tagu?
Doplňujúce informácie:
pc
sme nepoužili atribúty lemma
, pos
a msd
, nakoľko nepridávajú dodatočnú informáciu, ale využívame atribút join
, pre určenie medzier okolo znakuw
tagami pre označenie rozpoznanej entity z NameTagu využívame atribút ana="#nametag-..."
na vnorenom tagu, nie vonkajšom (napr. <placeName><settlement ana="#nametag-gu">...
vs <placeName ana="#nametag-gu"><settlement>
)T
z NameTagu z:
<group type="T" ana="#nametag-T">
<date ana="#nametag-td">
<w n="20" lemma="24" pos="NUM" msd="NumForm=Digit|NumType=Card">24</w>
<pc n="21" join="left">.</pc>
</date>
<date ana="#nametag-tm">
<w n="22" lemma="březen" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos">března</w>
</date>
<date ana="#nametag-ty">
<w n="23" lemma="1898" pos="NUM" msd="NumForm=Digit|NumType=Card">1898</w>
</date>
</group>
na
<date ana="#nametag-T" when="1898-03-24">
<w n="20" lemma="24" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-td">24</w>
<pc n="21" join="left" ana="#nametag-td">.</pc>
<w n="22" lemma="březen" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos" ana="#nametag-tm">března</w>
<w n="23" lemma="1898" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-ty">1898</w>
</date>
Na adrese https://drive.google.com/drive/u/0/folders/1z2KeWwoZrAvFcvVhGObsMJBJiIS7Y8I8 je dostupná tretia verzia transformovaného dokumentu https://dnnt.mzk.cz/view/uuid:bd3b89f0-1396-11eb-a4cf-005056827e52?page=uuid:189d4d39-8862-4bb8-9e51-b7d914a4087a
Zapracovali sme:
Zostáva zapracovať:
Väčšina group tagov už bola odstránená, zostávajú iba tagy group z rozpoznaných entit P z NameTagu (zapracujeme podľa ukážok vyššie od @daliboris ), časť tagov z entity T, ktoré boli pravdepodobne zle rozpoznané ako časový údaj a časť tagov z entity C (tieto nevieme ako upraviť). Ukážky:
Entita T:
<group type="T" ana="#nametag-T">
<date ana="#nametag-td">
<w n="9" lemma="8" pos="NUM" msd="NumForm=Digit|NumType=Card">8</w>
</date>
<time ana="#nametag-th">
<w n="10" lemma="—" pos="SYM" msd="ConjType=Oper">—</w>
</time>
<time ana="#nametag-th">
<w n="11" lemma="38" pos="NUM" msd="NumForm=Digit|NumType=Card">38</w>
</time>
</group>
Entita C
<group type="C" ana="#nametag-C">
<orgName ana="#nametag-mn">
<w n="10" lemma="Arcanum" pos="NOUN" msd="Case=Nom|Foreign=Yes|Gender=Neut|Number=Sing|Polarity=Pos">Arcanum</w>
</orgName>
<objectName type="artefact" ana="#nametag-oa">
<w n="11" lemma="divinae" pos="ADJ" msd="Degree=Pos|Foreign=Yes|Polarity=Pos">divinae</w>
</objectName>
</group>
Z ukázek je zřejmě, že např. NameTag nedokáže vždy správně rozpoznat záměr autora. Může to být chybou rozpoznání OCR, špatným rozčleněním textu na odstavce, stářím textu, tj. textem, na nějž nebyl NameTag natrénován.
Primárním cílem DL4DH není opravovat využívané nástroje, může jít o sekundární cíl, kterému poslouží vytvořená data.
Proto navrhuju ponechat chyby v rozpoznaných datech a pokusit se je převést do cílových formátů (TEI, CSV ap.), které by byl formálně validní, i když co do obsahu částečně chybové. Rozhodně by na to měl být upozorněn uživatel.
Uvažoval jsem, že by se uváděla jenom nejvyšší rozpoznaná entita (např. <date>
pro datum) a podřízené rozpoznané entity týkající se jednotlivých slov (elementů <w>
; např. dne, měsíce a roku pro části data) by se zrušily a analytická informace (hodnoty atribut @nana
přebírané z aplikace NameTag) se přesunula k podřízenému elementu <w>
. Tím by se ale pořadová čísla (kde jde o kombinaci <w>
a <pc>
) řešila jinak než např. označení měsíce názvem. V rámci jednotnosti tedy doporučuju zachovat vnořené entity jako samostatné obalující elementy.
Myslím, že rozčlenění do odstavců (pomocí elementů <p>
) nebude se současnými podklady (ALTO) možné, protože tam tato informace není obsažena. Ostatně když se v Krameriovu podíváte na textový přepis stránky (ikona T), text je slitý do jednoho odstavce.
Tady vidím dvě možnosti:
TextLine\@WIDTH
ve srovnání s předchozími elementy TextLine
TextLine\@HPOS
ve srovnání s předchozími elementy TextLine
<extent>
, <publicationStmt>
a <sourceDesc>
Uvedené prvky mají být podřízené elementu <fileDesc>
, nyní jsou přímým potomkem elementu <teiHeader>
.
@when
Pravidla TEI pro hodnotu atributu @when
říkají, že hodnoty pro měsíc a den musejí být dvoumístné, tj. v případě potřeby musejí být doplněny vodicí nulou, takže např.:
<date ana="#nametag-T" when="1897-04-1">
<w n="6" lemma="1" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-td">1</w>
<pc n="7" join="left" ana="#nametag-td">.</pc>
<w n="8" lemma="duben" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos" ana="#nametag-tm">dubna</w>
<w n="9" lemma="1897" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-ty">1897</w>
</date>
je potřeba upravit na
<date ana="#nametag-T" when="1897-04-01">
Pokud chybí rok, nahradí se pomlčkou, pokud chybí měsíc, údaj se vynechá, v obou případech se oddělovací pomlčky ponechají; zleva doprava se údaje vynechají včetně navazující pomlčky, takže např.
<date when="1962-10-01">1st October of 1962</date>
<date when=" --10-01">1st October</date>
<date when=" ---01">1st day in month</date>
<date when=" --10 ">October</date>
<date when="1962-10">October of 1962</date>
<date when="-0060">60 BC</date>
Příklad z ukázky:
<group type="T" ana="#nametag-T">
<date ana="#nametag-tm">
<w n="78" lemma="září" pos="NOUN" msd="Case=Gen|Gender=Neut|Number=Sing|Polarity=Pos">září</w>
</date>
<date ana="#nametag-ty">
<w n="79" lemma="1892" pos="NUM" msd="NumForm=Digit|NumType=Card">1892</w>
</date>
</group>
Je možné zachytit jako:
<date ana="#nametag-T" when="1892-09">
<date ana="#nametag-tm" when="--09">
<w n="78" lemma="září" pos="NOUN" msd="Case=Gen|Gender=Neut|Number=Sing|Polarity=Pos" ana="#nametag-tm">září</w>
</date>
<date ana="#nametag-ty" when="1892">
<w n="79" lemma="1892" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-ty">1892</w>
</date>
</date>
NameTag chybě interpretuje zápis a v rámci nadřazené entity nebo jedné z podřazených entit není možné je převést na validní zápis v TEI.
V tomto případě doporučuju ponechat maximum možných údajů a nevalidní údaje neuvádět. Je možné ponechat textovou podobu (elementy <date>
, popř. <time>
a <w>
) a vynechat atribut @when
, který by nebyl validní.
Takže příklad
<group type="T" ana="#nametag-T">
<date ana="#nametag-td">
<w n="9" lemma="8" pos="NUM" msd="NumForm=Digit|NumType=Card">8</w>
</date>
<time ana="#nametag-th">
<w n="10" lemma="—" pos="SYM" msd="ConjType=Oper">—</w>
</time>
<time ana="#nametag-th">
<w n="11" lemma="38" pos="NUM" msd="NumForm=Digit|NumType=Card">38</w>
</time>
</group>
by se zpracoval následovně:
<date ana="#nametag-T">
<date ana="#nametag-td" when="---08">
<w n="9" lemma="8" pos="NUM" msd="NumForm=Digit|NumType=Card">8</w>
</date>
<time ana="#nametag-th">
<w n="10" lemma="—" pos="SYM" msd="ConjType=Oper">—</w>
</time>
<time ana="#nametag-th">
<w n="11" lemma="38" pos="NUM" msd="NumForm=Digit|NumType=Card">38</w>
</time>
</date>
<pc>
Atributy @lemma
, @pos
a @msd
doporučuju u elementu <pc>
ponechat, a to kvůli jednotnému zpracování, a tedy i předvídatelným výsledkům u statistických analýz. Pokud bude uživatel dělat statistiku lemmat v textu na základě atributu @lemma
, interpunkce by se mu do přehledu nedostala.
Srov. např. dotaz XPath v případě, že @lemma
u <pc>
nebude:
distinct-values(//@lemma | //pc/.)
a když bude:
distinct-values(//@lemma)
Je také (spíš teoreticky) možné, že různá interpunkční znaménka budou mít stejné lemma, například znaky , (Comma) , (Fullwidth Comma) a ﹐ (Small Comma).
<group type='C'>
Jde o jeden z případů chybného rozpoznání. Skupina C
se používá pro bibliografické položky, čemuž v TEI odpovídá element <bibl>
. V textu ukázkové publikace se jedná o názvy encyklik, takže to svým způsobem bibliografické citace jsou.
V tomto případě navrhuju použít element <objectName>
s atributem @type="bibliography"
.
Nelze použít element <bibl>
, protože nadřízeným prvkem je zde <s>
, jehož nemůže být <bibl>
.
<objectName type="bibliography" ana="#nametag-C">
<orgName ana="#nametag-mn">
<w n="10" lemma="Arcanum" pos="NOUN" msd="Case=Nom|Foreign=Yes|Gender=Neut|Number=Sing|Polarity=Pos">Arcanum</w>
</orgName>
<objectName type="artefact" ana="#nametag-oa">
<w n="11" lemma="divinae" pos="ADJ" msd="Degree=Pos|Foreign=Yes|Polarity=Pos">divinae</w>
</objectName>
</objectName>
Pokud by byl prvek <group type="C" ana="#nametag-C">
jediným elementem podřízeným prvkům <p><s>
, pak bychom mohli hierarchii <p><s><group type="C" ana="#nametag-C">
převést na <p><bibl>
. Tj.
<p>
<bibl ana="#nametag-C">
<orgName ana="#nametag-mn">
<w n="1" lemma="Arcanum" pos="NOUN" msd="Case=Nom|Foreign=Yes|Gender=Neut|Number=Sing|Polarity=Pos">Arcanum</w>
</orgName>
<objectName type="artefact" ana="#nametag-oa">
<w n="2" lemma="divinae" pos="ADJ" msd="Degree=Pos|Foreign=Yes|Polarity=Pos">divinae</w>
</objectName>
</bibl>
</p>
@ana
O umístění atributu @ana
rozhoduje to, jestli element TEI věcně koresponduje s druhem rozpoznané entity.
Např. entitě typu gu
(obce, hrady a zámky) odpovídá TEI element <settlement>
(contains the name of a settlement such as a city, town, or village identified as a single geo-political or administrative unit), zatímco <placeName>
(contains an absolute or relative place name) je sémanticky o úroveň výš a může být dále rozděleno na menší části, které korespondují s rozpoznanými entitami.
V mé ukázce to bylo chybně, ve vaší je to v pořádku. Děkuju za opravu.
Upravil jsem své procedury XProc, abych se ve zpracování dostal na vaši úroveň. Příklad s entitou typu C
mi vyšel daleko strukturovanější, tj. už na straně rozpoznání v NameTagu se objevilo více úrovní a entit. Takto vypadá moje transformace na TEI:
<objectName type="bibliography" ana="#nametag-C">
<orgName ana="#nametag-mn">
<w n="10" lemma="Arcanum" pos="NOUN" msd="Case=Nom|Foreign=Yes|Gender=Neut|Number=Sing|Polarity=Pos">Arcanum</w>
</orgName>
<objectName type="artefact" ana="#nametag-oa">
<w n="11" lemma="divinae" pos="ADJ" msd="Degree=Pos|Foreign=Yes|Polarity=Pos">divinae</w>
<w n="12" lemma="z" pos="ADP" msd="AdpType=Voc|Case=Gen">ze</w>
<w n="13" lemma="den" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos">dne</w>
</objectName>
<date ana="#nametag-T" when="--02-10">
<date ana="#nametag-td" when="---10">
<w n="14" lemma="10" pos="NUM" msd="NumForm=Digit|NumType=Card">10</w>
<pc n="15" lemma="." pos="PUNCT" msd="_">.</pc>
</date>
<date ana="#nametag-tm" when="--02">
<w n="16" lemma="únor" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos">února</w>
</date>
</date>
</objectName>
Chtěl jsem se zeptat, odkud ve formátu TEI přebíráte údaj pro označení strany, tedy atribut @n
, např. <pb n="[1b]"/>
?
V dokumentu FOXML se mi ho nepodařilo najít.
Upravil jsem ODD pro DL4DH, aby odpovídalo aktuální dohodnuté podobě TEI a bylo možné dokumenty validovat pomocí RNG nebo XSD. ODD_v02.zip
Na získavanie označenia strany využíva kolega API endpoint https://kramerius.mzk.cz/search/api/v5.0/item/uuid:08229f06-e6e3-4686-af5e-382b63d9d86f a pre získanie plaintextu zas API endpoint https://kramerius.mzk.cz/search/api/v5.0/item/uuid:08229f06-e6e3-4686-af5e-382b63d9d86f/streams/TEXT_OCR (pre porovnanie, prečo NameTag spustený nad Vami zadaný text vracia iný výsledok ako nám).
Pripomienky z komentára ku 3. verzií zapracovávame a zajtra sa budeme prezentovať ďalšie zapracované zmeny.
Zvláštne je, že u Vás obalil NameTag entitou C dlhší úsek ale kvôli tomu zdá sa, že oddelilo rok od entity T. Naša ukážka tej pasáže:
<group type="C" ana="#nametag-C">
<orgName ana="#nametag-mn">
<w n="10" lemma="Arcanum" pos="NOUN" msd="Case=Nom|Foreign=Yes|Gender=Neut|Number=Sing|Polarity=Pos">Arcanum</w>
</orgName>
<objectName type="artefact" ana="#nametag-oa">
<w n="11" lemma="divinae" pos="ADJ" msd="Degree=Pos|Foreign=Yes|Polarity=Pos">divinae</w>
</objectName>
</group>
<w n="12" lemma="z" pos="ADP" msd="AdpType=Voc|Case=Gen">ze</w>
<w n="13" lemma="den" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos">dne</w>
<date ana="#nametag-T" when="1880-02-10">
<w n="14" lemma="10" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-td">10</w>
<pc n="15" join="left" ana="#nametag-td">.</pc>
<w n="16" lemma="únor" pos="NOUN" msd="Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing|Polarity=Pos" ana="#nametag-tm">února</w>
<w n="17" lemma="1880" pos="NUM" msd="NumForm=Digit|NumType=Card" ana="#nametag-ty">1880</w>
</date>
Už vím, v čem je rozdíl: pokud přebíráte text z endpointu pro OCR, text je rozdělen do řádků, tj. konkrétně takto:
poměru manželského. Často к tomuto předmětu se vrací
a zvláštní encykliku Arcanum divinae ze dne 10. února 1880
mu věnuje. Rodina jest svazkem logicky i historicky dřívějším
Při svém zpracování převedu nejdříve ALTO na TEI a následně TEI na prostý text, čímž zmizí rozdělení na řádky (i na odstavce). Takže můj textový vstup pro NameTag a UDPipe vypadá následovně:
poměru manželského. Často к tomuto předmětu se vrací a zvláštní encykliku Arcanum divinae ze dne 10. února 1880 mu věnuje. Rodina jest svazkem logicky i historicky dřívějším
Takové odlišné rozdělení slov (mezerou versus odstavcem) má pak vliv na rozpoznávací schopnosti zmíněných aplikací.
Text je určitě třeba brát z ALTO, jak to dělá @daliboris už proto, že tam je ošetřeno dělení slov, jen na této straně je to 11 slov, která jsou v plaintextu z OCR špatně (rozdělená natvrdo).
<String CONTENT="Sa" HEIGHT="44" WIDTH="67" VPOS="741" HPOS="1834" SUBS_TYPE="HypPart1" SUBS_CONTENT="Sapientiae"/>
...
</TextLine>
<TextLine BASELINE="842" HEIGHT="56" WIDTH="1661" VPOS="799" HPOS="266">
<String CONTENT="pientiae" HEIGHT="53" WIDTH="268" VPOS="799" HPOS="266" SUBS_TYPE="HypPart2" SUBS_CONTENT="Sapientiae"/>
tedy pokud je SUBS_TYPE="HypPart1" , pak forma = SUBS_CONTENT. Následně na dalším řádku 1. slovo, má mít SUBS_TYPE="HypPart2" a identickou hodnotu SUBS_CONTENT a pak toto slovo přeskočit.
Řeší TEI nejen semantiku textu, ale i formu? Tedy konce řádek, dělení slov...? Pokud ano, mělo by se to zachovat. Obzvláště pokud to souvisí, např. ty části sázené pro zdůraznění proloženě (s většími mezerami mezi znaky). Pokud ale TEI vzhled neřeší a chce jen semantiku, tak rozdělení zahodit (= formu slova brát z atributu: pokud je SUBS_TYPE="HypPart1" , pak forma = SUBS_CONTENT. Následně slovo, které má SUBS_TYPE="HypPart1" přeskočit ), ale nějak řešit třeba to proložení, něco jako <emph>
. Pak ale bych uživateli poskytl volitelně vedle TEI i to ALTO.
- novější nástroje pro OCR dokážou odstavce identifikovat a ve výstupu zachytit
Pokud by se měl použít novější nástroj, případně i jiný než Recognita Server užívaný dosud, musí se to rozhodnout nyní, protože výstup do ALTO se bude skoro určitě lišit ve více věcech.
- na základě analýzy formátu ALTO bychom se o nějakou identifikaci odstavce pokusili my (až pokud bude čas)
- na základě výrazně nízké hodnoty atributu TextLine\@WIDTH ve srovnání s předchozími elementy TextLine
- na základě výrazně odlišné hodnoty atributu TextLine\@HPOS ve srovnání s předchozími elementy TextLine
Analýza layoutu na základě těch grafických informací (souřadnice, velikosti, atd.) ve výstupu z OCR je nepochybně velmi žádoucí a co jsem hledal, nemá to hotové asi nikdo. Daly by se takto identifikovat sloupce textu, spojovat články, přiřazovat nadpisy, obrázky a jejich popisy, atd. Podle mě je to ale rozsahem a obtížností na samostatný projekt.
Ako bolo zmienené na meetingu 28.07.2021, prikladám sem raw vstup z aplikácie Kramerius+ do sluzby NameTag spolu s odosielanými parametrami:
data=
poměru
manželského
.
Často
к
tomuto
předmětu
se
vrací
a
zvláštní
encykliku
Arcanum
divinae
ze
dne
10
.
února
1880
mu
věnuje
.
Rodina
jest
svazkem
logicky
i
historicky
dřívějším
output=conll; input=vertical;
Na adrese https://drive.google.com/drive/u/0/folders/1z2KeWwoZrAvFcvVhGObsMJBJiIS7Y8I8 je dostupná štvrtá verzia transformovaného dokumentu https://dnnt.mzk.cz/view/uuid:bd3b89f0-1396-11eb-a4cf-005056827e52?page=uuid:189d4d39-8862-4bb8-9e51-b7d914a4087a
Zároveň sme vygenerovali TEI aj pre dokumenty https://dnnt.mzk.cz/view/uuid:84e676e0-a796-11e9-9209-005056827e51 a https://dnnt.mzk.cz/view/uuid:3c4c3540-3130-11ea-b0e3-005056827e52 pre kontrolu voči TEI, ktoré generovalo @daliboris a skúmanie špecifických prípadov na rozsiahlejšom diele.
Zapracovali sme:
Zostáva zapracovať:
Na adrese https://drive.google.com/drive/u/0/folders/1z2KeWwoZrAvFcvVhGObsMJBJiIS7Y8I8 je dostupná piata verzia transformovaného dokumentu https://dnnt.mzk.cz/view/uuid:bd3b89f0-1396-11eb-a4cf-005056827e52
Zapracovali sme:
s
ak obsahuje jediný element objectName
s atribútom type=bibliography
a sám je jediným potomkom elementu p, spolu s premenovaním elementu objectName
na element bibl
(v aktuálnom dokumente taká situácia nenastala, je to ale pripravené do budúcna)Konkrétne sme zapracovali prvé dve prípady pre entitu P z komentára https://github.com/LIBCAS/DL4DH-TEI-Converter/issues/2 podľa nasledujúceho pravidla: Ak rozpoznaná entita P obsahuje priamych potomkov iba elementy forename
, placename
, abbr
, w
a p
, je jej odstránený atribút type
a ana
a zmenený tag z group
na persName
.
Zvyšné dva prípady sú spôsobené nástrojom NameTag, ktorý nám vratil iný výsledok ako Vám. Konkrétne sa jedná o prípad zo stránky https://dnnt.mzk.cz/view/uuid:bd3b89f0-1396-11eb-a4cf-005056827e52?page=uuid:189d4d39-8862-4bb8-9e51-b7d914a4087a ktorej OCR spracujeme cez nástroj UDPipe a výsledok (dostupný na https://drive.google.com/file/d/1oS2gTbG4D1pLINdNiY0kFndujqNPM1E9/view?usp=sharing pre možnosť replikácie výsledky) vkladáme do nástroja NameTag s nastavením inputu na Vertical. Slová Eminencí splnomocněn
sú nespravné rozpoznané ako time expression a preto je v našom TEI element date
namiesto persName
. Toto je chyba nástroja NameTag (pre nás tretej strany) a nie chyba nášho konvertora.
Identifikace vět na základě prostého textu v rámci UDPipe a NameTag: identická.
Rozdíly v rozpoznaných entitách (ve formátu XML). Nejdříve se vstupem v podobě prostého textu, pak vertikály. (Bohužel neumím dostat v Markdownu dostat XML do tabulky a výsledky zarovnat.)
Z uvedených 12 rozdílů vyplývá, že rozpoznání pomocí prostého textu dává o něco lepší výsledky (7 z 12). (Pro ukázkovou stranu bylo celkově rozdílů víc, snažil jsem se vybrat reprezentativní/odlišné případy.)
Srovnávané výstupy (prostý text × vertikála): NameTag-PlainText2Xml-1sentence.zip × NameTag-Vertical2Xml.zip
Je ale s podivem, že různé vstupní formáty můžou vrátit tak rozdílné výsledky.
ps = příjmení
pf = křestní jméno
<ne type="oa">
<token>Jeho</token>
<token>Svatosti</token>
<token>papeže</token>
<ne type="P">
<ne type="pf">
<token>Lva</token>
</ne>
<ne type="ps">
<token>XIIL</token>
</ne>
</ne>
</ne>
pp = náboženské postavy, pohádkové a mytické postavy, personifikované vlastnosti
<ne type="oa">
<token>Jeho</token>
<token>Svatosti</token>
<token>papeže</token>
<ne type="pp">
<token>Lva</token>
<token>XIIL</token>
</ne>
</ne>
pm = druhé křestní jméno
io = státní a mezinárodní instituce, politické strany a hnutí, náboženské skupiny
<ne type="io">
<token>Veličenstva</token>
<token>císaře</token>
<token>a</token>
<token>krále</token>
<ne type="P">
<ne type="pf">
<token>Františka</token>
</ne>
</ne>
</ne>
<ne type="P">
<ne type="pm">
<token>Josefa</token>
</ne>
</ne>
<ne type="io">
<ne type="P">
<ne type="no">
<token>I</token>
</ne>
</ne>
</ne>
<ne type="P">
<ne type="no">
<token>.</token>
</ne>
</ne>
pm = druhé křestní jméno
<token>Veličenstva</token>
<token>císaře</token>
<token>a</token>
<token>krále</token>
<ne type="P">
<ne type="pf">
<token>Františka</token>
</ne>
<ne type="pm">
<token>Josefa</token>
</ne>
<ne type="no">
<token>I</token>
<token>.</token>
</ne>
</ne>
<ne type="p_">
<token>Eminencí</token>
</ne>
<token>nejdùst</token>
<token>.</token>
<ne type="p_">
<token>Eminencí</token>
<token>nejdùst</token>
<token>.</token>
</ne>
pm = druhé křestní jméno
<ne type="P">
<ne type="pf">
<token>Františka</token>
</ne>
<ne type="pm">
<token>de</token>
</ne>
<ne type="pm">
<token>Paula</token>
<token>hraběte</token>
<token>ze</token>
</ne>
<ne type="gu">
<token>Schonbornů</token>
</ne>
</ne>
ps = příjmení
<ne type="P">
<ne type="pf">
<token>Františka</token>
</ne>
<ne type="ps">
<token>de</token>
</ne>
<ne type="pm">
<token>Paula</token>
</ne>
<ne type="ps">
<token>hraběte</token>
<token>ze</token>
</ne>
<ne type="gu">
<token>Schonbornů</token>
</ne>
</ne>
<token>osvětlen</token>
<token>.</token>
<token>V</token>
<token>.</token>
<token>háji</token>
<token>osvětlen</token>
<token>.</token>
<ne type="pf">
<token>V</token>
<token>.</token>
</ne>
<token>háji</token>
p = jméno osoby nespecifikovaného typu / nezařaditelné do ostatních typů
<ne type="p_">
<token>Veličenstva</token>
</ne>
pp = náboženské postavy, pohádkové a mytické postavy, personifikované vlastnosti
<ne type="pp">
<token>Veličenstva</token>
</ne>
td = den
<ne type="td">
<token>7</token>
<token>.</token>
</ne>
<token>hodině</token>
th = hodina
<ne type="th">
<token>7</token>
</ne>
<token>.</token>
<token>hodině</token>
pf = křestní jméno
<token>Jeho</token>
<ne type="pf">
<token>Jasnost</token>
</ne>
oa = kulturní artefakty (knihy, filmy stavby,...)
<token>Jeho</token>
<ne type="oa">
<token>Jasnost</token>
</ne>
<ne type="P">
<ne type="pd">
<token>Thlg</token>
<token>.</token>
</ne>
<ne type="pd">
<token>Dr</token>
<token>.</token>
</ne>
<ne type="pd">
<token>Frant</token>
<token>.</token>
</ne>
</ne>
<ne type="ps">
<token>Hrádek</token>
</ne>
<ne type="P">
<ne type="pd">
<token>Thlg</token>
<token>.</token>
</ne>
<ne type="pd">
<token>Dr</token>
<token>.</token>
</ne>
<ne type="pf">
<token>Frant</token>
<token>.</token>
</ne>
<ne type="ps">
<token>Hrádek</token>
</ne>
</ne>
gu = obce, hrady a zámky
<ne type="gu">
<token>Králohradecko</token>
</ne>
gr = menší územní jednotky
<ne type="gr">
<token>Králohradecko</token>
</ne>
pp = náboženské postavy, pohádkové a mytické postavy, personifikované vlastnosti
<ne type="pp">
<token>Eminencí</token>
</ne>
<token>splnomocněn</token>
tf = svátky a významné dny
<ne type="tf">
<token>Eminencí</token>
<token>splnomocněn</token>
</ne>
no = číslo s významem pořadí
<token>Papež</token>
<ne type="P">
<ne type="pf">
<token>Lev</token>
</ne>
<ne type="no">
<token>XIII</token>
<token>.</token>
</ne>
</ne>
ps = příjmení
<token>Papež</token>
<ne type="P">
<ne type="pf">
<token>Lev</token>
</ne>
<ne type="ps">
<token>XIII</token>
<token>.</token>
</ne>
</ne>
Připomínky na základě schůzky 22. 9. 2021.
<pb xml:id="PB:uuid:ecf0ba80-a45d-11e3-b74a-5ef3fc9ae867" n="10"/>
value of attribute "xml:id" is invalid; must be an XML name without colons
;@xml:id
nemůže být dvojtečka; jako identifikátor navrhuju používat pouze GUID, tj. <pb xml:id="ecf0ba80-a45d-11e3-b74a-5ef3fc9ae867" n="10" />
@corresp
, který znamená, že určitý prvek nějakým způsobem koresponduje s tím, na nějž atribut @corresp
odkazuje; tj. na úrovni publikace (elementu <TEI>
) a strany (<pb>
) by byly atributy odkazující na zdrojové dokumenty; v případě potřeby by to sloužilo pro rychlý přechod k původnímu zdroji bez potřeby mít obrazová data nebo sestavovat URL, tj. např.
<TEI xmlns="http://www.tei-c.org/ns/1.0" corresp="https://dnnt.mzk.cz/view/uuid:57f3ff20-9ee3-11e3-8b69-005056825209 https://dnnt.mzk.cz/search/api/v5.0/item/uuid:57f3ff20-9ee3-11e3-8b69-005056825209/">
<pb xml:id="ecf0ba80-a45d-11e3-b74a-5ef3fc9ae867" n="10" corresp="https://dnnt.mzk.cz/view/uuid:57f3ff20-9ee3-11e3-8b69-005056825209?page=uuid:ecabc240-a45d-11e3-b74a-5ef3fc9ae867 https://dnnt.mzk.cz/search/api/v5.0/item/uuid:ecabc240-a45d-11e3-b74a-5ef3fc9ae867/"/>
https://dnnt.mzk.cz/view/uuid:...
) a na stránku s metadaty objektu (https://dnnt.mzk.cz/search/api/v5.0/item/uuid:...
)<group>
) na odpovídající elementy TEI
<group type="P" ana="#nametag-P">
>> <persName>
<group type="A" ana="#nametag-A">
>> <address>
<group type="T" ana="#nametag-T">
>> <date>
<encodingDesc>
<appInfo>
<application xml:id="NameTag" ident="NameTag" version="2" from="2021-09-23T22:20:00" to="2021-09-23T22:21:00">
<label>NameTag, model: czech-cnec2.0-200831</label>
</application>
</appInfo>
<appInfo>
<application xml:id="UDPipe" ident="UDPipe" version="2" from="2021-09-23T22:22:00" to="2021-09-23T22:23:00">
<label>UDPipe, model: czech-pdt-ud-2.6-200830</label>
</application>
</appInfo>
<appInfo>
<application xml:id="TEIConvertor" ident="TEIConvertor" version="0.5.6" when="2021-10-01T15:30:00" />
</appInfo>
</encodingDesc>
@daliboris
Zapracovali sme (zatial do TEI Convertora, Kramerius+ bude niektore informacie Convertoru poskytovat neskor):
source
pre page aj header, ktorý sa premietne do atribútu corresp
Potrebujeme upraviť ODD:
surface
a zone
, extent
date
nema povoleny atribut when
when
, from
, to
Očakávame:
Otvorené body:
fix atributu s uuid (nemohli sme použiť iba uuid, nakoľko niekedy začína číslom a to nie je validný NCName v XML)
Podle dokumentace FOXML je atribut @PID
jedinečný idnetifikátor. Digitální knihovna využívá textový řetězec ve formátu prefixu "uuid:" a jedinečného idntifikátoru typu GUID.
V dokumentu TEI se identifikátor odkazující na objekt FOXML objevuje jakožto obsah elementu <idno>
(např. <idno type="mods:uuid">57f3ff20-9ee3-11e3-8b69-005056825209</idno>
). Nepoužívá se nikde jako hodnota atributu @xml:id
.
V metadatech typu MODS se GUID objevuje jako samostatná hodnota, tj. bez prefixu, např. <mods:identifier type="uuid">57f3ff20-9ee3-11e3-8b69-005056825209</mods:identifier>
. Naproti tomu v metadatech typu Doublin Core se objevuje hodnota s prefixem, např. <dc:identifier>uuid:57f3ff20-9ee3-11e3-8b69-005056825209</dc:identifier>
.
Navrhuju v rámci DL4DH považovat GUID za identifikátor pro abstraktní objekt (tj. bez konkrétní realizace/serializace) typu publikace/periodikum ap. V rámci jednotlivých realizací výše zmíněného abstraktního objektu, tj. v rámci objektů reprezentovaných dokumentem/souborem typu FOXML, TEI ap. bude mít identifikátor prefix, který bude typický pro objekt konkrétního typu, tj. např. "uuid:" pro FOXML, "tei:" pro TEI.
@daliboris fix atributu s uuid súvisi s tagom pb, ktorému chceme uviesť aj uuid stránky, z ktorej vychádza. Uvádzali sme to v atribúte xml:id
, ktorý ale nesmie obsahovať znak :
ani nesmie začínať číslom, preto nie je možné v ňom uviesť uuid:57f3ff20-9ee3-11e3-8b69-005056825209
ani napríklad 57f3ff20-9ee3-11e3-8b69-005056825209
. preto tam aktuálne uvádzame uuid-57f3ff20-9ee3-11e3-8b69-005056825209
, čo ale nie je ideálne. Pokiaľ viete o inom lepšom riešení, dajte nám prosím vedieť. Ak by ste o inom riešení nevedeli, uzavrieme túto issue ako vyriešenú.
Děkuju za upozornění na mou chybu v úsudku. Máte pravdu.
Podle definice z XSD musí @xml:id
splňovat následující podmínky
_
)aAbB...
)1234567890
)_
)-
).
)Zachování identifikátorů původní strany považuju také za dobrý nápad. Proto navrhuju následující vzor:
<pb xml:id="pb.857f595f-f505-49d6-9c37-e81309a70c5b" corresp="uuid:857f595f-f505-49d6-9c37-e81309a70c5b" n="[1]"/>
Atribut @xml:id
strany bude začínat zkratkou pb
, následovat bude tečka .
a 32místný GUID původního identifikátoru objektu strany, tj. údaj za původním prefixem uuid:
.
Atribut @corresp
strany bude obsahovat kompletní původní identifikátor objektu strany.
Aby bylo snazší udržet korespondenci mezi původní stranou (objektem dostupným např. z Krameria) měl by být v hlavičce <teiHeader>
odkaz na původní zdroj, tj. minimálně, jestli to pochází z Krameria NKP, MZK ap.
Na základe dohody z online stretnutia zo 14. 5. prosíme o spísanie zoznamu TEI elementov, ktoré budú v projekte použité.
Na úvod, v priebehu týždňa prosíme o nástrel časti elementov, s ktorými môžeme pracovať a postupne dodávať ukážkový TEI výstup. Spísanie celého zoznamu by mal byť dodaný v polovici června.
Cieľom je mať spísané tagy, na základe ktorých sa vytvorí ODD pomocou nástroja https://romabeta.tei-c.org/, čím sa pre užívateľov systému a aj dodávateľa špecifikuje, užšia podčasť TEI formátu využívaného projektom.
Nástroj Roma umožnuje obmedziť aj Attribute a Model classes ako aj Datatypes. Ak ich viete @daliboris taktiež obmedziť, prosíme o spísanie, ktoré budú taktiež vylúčené.