MorphoDiTa - představení
MorphoDiTa, plným názvem Morphological Dictionary and Tagger, je nástroj z dílny Ústavu formální a aplikované lingvistiky, který slouží k morfologické analýze přirozeného textu.
Pro mě nejzajímavější funkce je tagování jednotlivých slov a symbolů ve větách a generování tzv. lemma, což jsou základní tvary zadaných slov.
Ukázka
Vezměme si příklad na větě "Investor radí, jak na dvoucifernou inflaci.". Po otagování dostaneme následující výstup:
Token | Lemma | Tag |
---|---|---|
Investor | investor | NNMS1-----A---- |
radí | radit_:T | VB-S---3P-AA--- |
, | , | Z:------------- |
jak | jak-3 | Db------------- |
na | na-1 | RR--4---------- |
dvoucifernou | dvouciferný | AAFS4----1A---- |
inflaci | inflace | NNFS4-----A---- |
. | . | Z:------------- |
Věta je rozložena na jednotlivé tokeny a ke každému dostaneme základní tvar a doplňující informace, kterým se budu podrobněji věnovat později.
Využití
K čemu je to dobré? V mém případě jsem hledal způsob, jak si rozřazovat články podle klíčových slov v nadpisu. Z toho důvodu (a důvodu rozmanitosti české gramatiky) bylo potřeba nějak získat podstatná jména v základním tvaru, jelikož jsem chtěl články obsahující "investor" a "investoři" zařadit do stejné kategorie.
MorphoDiTu je možné vyzkoušet a používat třemi způsoby:
- webové rozhraní
- REST API
- spustitelná binárka
Webové rozhraní
Webové rozhraní nabízí nejrychlejší způsob, jak si vyzkoušet otagování prvních pár textů a seznámit se s chováním různých přepínačů a vstupů. Umožňuje formátovat výstup do přehledné tabulky a pro případy "debugování" se jedná o příjemnou vizualizaci.
Je však potřeba myslet na to, že texty zadané do formuláře mohou být zpracovány a použity pro další zdokonalování systému.
REST API
Pro první pokusy s programovým zpracováním může posloužit REST API. To nabízí stejné služby jako webové rozhraní, ale je možné ho použít i z terminálu nebo z kódu.
Nehodí se však na produkční nasazení, v takovém případě je potřeba se domluvit s autory a stejně jako u webového rozhraní mohou být zadaná data použita ke zkvalitnění služby.
Programové zpracování
Zbytek tohoto seriálu se však budu věnovat lokálnímu používání bez závislosti na cizí webové službě.
Knihovna jako taková je psána v C++ a jedním z možných výstupů je XML, které vypadá následovně:
<sentence>
<token lemma="investor" tag="NNMS1-----A----">Investor</token>
<token lemma="radit_:T" tag="VB-S---3P-AA---">radí</token>
<token lemma="," tag="Z:-------------">,</token>
<token lemma="jak-3" tag="Db-------------">jak</token>
<token lemma="na-1" tag="RR--4----------">na</token>
<token lemma="dvouciferný" tag="AAFS4----1A----">dvoucifernou</token>
<token lemma="inflace" tag="NNFS4-----A----">inflaci</token>
<token lemma="." tag="Z:-------------">.</token>
</sentence>
S tím už se dá pracovat. Pokud navíc vstup obsahuje více vět, jsou samozřejmě rozděleny do několika <sentence>
elementů.
Problém bylo napojení na Python, kde jsem měl problém se zprovozněním poskytované knihovny a chtěl jsem navíc něco uživatelsky přívětivějšího, abych mohl jednoduše volat například:
for noun in sentence.get_part_of_speech(POS.NOUN):
# zpracovani podstatnych jmen
Proto jsem se rozhodl se do problematiky více ponořit a vytvořit si Python knihovnu vlastní...