DESIGN: OSHB parsování morfologického tagu (rozvržení funkcí)

I. Obecné ustanovení návrhu programu na parsování OSHB morfollogických tagů

Zde je návrh funkcí pro parsování tagů OSHB:

  1. parseMorphologicalTag(tag: str) -> dict:

    • Tato funkce přijímá celý morfologický tag jako vstup.
    • Prvním krokem je odříznutí znaku jazyka a uložení informace o jazyce (lang) do slovníku.
    • Následně se volají další pomocné funkce pro parsování jednotlivých morfologických oblastí.
    • Výstupem je slovník obsahující rozparsované informace o tagu.
  2. parsePartOfSpeech(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující část řeči (Part of Speech).
    • Provádí parsování části řeči a ukládá ji do slovníku.
    • Vrací slovník obsahující rozparsované informace o části řeči.
  3. parseVerbStemsHebrew(morph: str) -> dict: (nebo použít univerzální funkci parseVerbStem(morph: str, language: str, stem: str) -> dict:)

    • Tato funkce přijímá morfologickou část označující hebrejské verbální kmene (Verb stems).
    • Provádí parsování hebrejských verbálních kmenů a ukládá je do slovníku.
    • V případě potřeby může volat další pomocné funkce pro podrobnější parsování.
  4. parseVerbStemsAramaic(morph: str) -> dict: (nebo použít univerzální funkci parseVerbStem(morph: str, language: str, stem: str) -> dict:)

    • Tato funkce přijímá morfologickou část označující aramejské verbální kmene (Verb stems).
    • Provádí parsování aramejských verbálních kmenů a ukládá je do slovníku.
    • V případě potřeby může volat další pomocné funkce pro podrobnější parsování.
  5. parseVerbConjugationTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy slovesných konjugací (Verb conjugation types).
    • Provádí parsování typů konjugace sloves a ukládá je do slovníku.
  6. parseAdjectiveTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy přídavných jmen (Adjective types).
    • Provádí parsování typů přídavných jmen a ukládá je do slovníku.
  7. parseNounTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy podstatných jmen (Noun types).
    • Provádí parsování typů podstatných jmen a ukládá je do slovníku.
  8. parsePronounTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy zájmen (Pronoun types).
    • Provádí parsování typů zájmen a ukládá je do slovníku.
  9. parsePrepositionTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy předložek (Preposition types).
    • Provádí parsování typů předložek a ukládá je do slovníku.
  10. parseSuffixTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy přípon (Suffix types).
    • Provádí parsování typů přípon a ukládá je do slovníku.
  11. parseParticleTypes(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující typy částic (Particle types).
    • Provádí parsování typů částic a ukládá je do slovníku.
  12. parsePerson(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující osobu (Person).
    • Provádí parsování informace o osobě a ukládá ji do slovníku.
  13. parseGender(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující rod (Gender).
    • Provádí parsování informace o rodu a ukládá ji do slovníku.
  14. parseNumber(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující číslo (Number).
    • Provádí parsování informace o čísle a ukládá ji do slovníku.
  15. parseState(morph: str) -> dict:

    • Tato funkce přijímá morfologickou část označující stav (State).
    • Provádí parsování informace o stavu a ukládá ji do slovníku.

Při parsování tagu se nejprve volá funkce parseMorphologicalTag(), která využívá další pomocné funkce pro parsování jednotlivých oblastí morfologie. Každá z těchto funkcí přijímá relevantní morfologickou část, provádí její parsování a ukládá rozparsované informace do slovníku.

II.  Ustanovení ohledně parsování verbálního stemu - lépší je univerzální funkce

User note: "Informace obsažené v tagu OSHB jsou pro všechny stemy shodného typu, tzn. parsování by mělo probíhat stejným způsobem ať je stem jakýkoliv, ať je jazyk H nebo A."

Informace obsažené v tagu OSHB jsou pro všechny stemy stejného typu (např. všechny hebrejské verbální kmeny "qal" mají stejné informace) a není třeba provádět další parsování na základě písmene verbálního kmene.

V takovém případě by mohla existovat jediná univerzální funkce pro parsování verbálních kmenů, která by extrahovala požadované informace na základě celé morfologické části tagu. Písmeno verbálního kmene by se v této funkci pouze použilo pro identifikaci typu kmene a rozhodnutí, jaké informace jsou s ním spojeny.

Například:

  • parseVerbStem(morph: str, language: str, stem: str) -> dict:
    • Tato univerzální funkce by přijímala morfologickou část, jazyk a typ verbálního kmene jako vstupy a vrátila by slovník obsahující informace o verbálním kmenu.
    • Na základě písmene verbálního kmene a jazyka by se v této funkci rozhodlo, jaké informace mají být extrahovány a vráceny.
    • Funkce by mohla obsahovat podmínky nebo přepínače (IF/SWITCH) pro různé kombinace písmen kmene a jazyka a na jejich základě by vrátila požadované informace.

III.  Možná pole pro ukládání dat ve skriptovacích jazycích

Navrhuji následující strukturu pro asociativní pole nebo objekt, která by umožnila uložení naparsovaných informací z tagu OSHB:

  1. Python:
python
parsed_data = { 'lang': '', 'verb_stem_hebrew': '', 'verb_stem_aramaic': '', 'conjugation_type': '', 'adjective_type': '', 'noun_type': '', 'pronoun_type': '', 'preposition_type': '', 'suffix_type': '', 'particle_type': '', 'person': '', 'gender': '', 'number': '', 'state': '' }
  1. Perl:
perl
my %parsed_data = ( 'lang' => '', 'verb_stem_hebrew' => '', 'verb_stem_aramaic' => '', 'conjugation_type' => '', 'adjective_type' => '', 'noun_type' => '', 'pronoun_type' => '', 'preposition_type' => '', 'suffix_type' => '', 'particle_type' => '', 'person' => '', 'gender' => '', 'number' => '', 'state' => '' );
  1. Bash:
bash
declare -A parsed_data=( ['lang']='' ['verb_stem_hebrew']='' ['verb_stem_aramaic']='' ['conjugation_type']='' ['adjective_type']='' ['noun_type']='' ['pronoun_type']='' ['preposition_type']='' ['suffix_type']='' ['particle_type']='' ['person']='' ['gender']='' ['number']='' ['state']='' )
  1. AWK:
awk
parsed_data["lang"] = "" parsed_data["verb_stem_hebrew"] = "" parsed_data["verb_stem_aramaic"] = "" parsed_data["conjugation_type"] = "" parsed_data["adjective_type"] = "" parsed_data["noun_type"] = "" parsed_data["pronoun_type"] = "" parsed_data["preposition_type"] = "" parsed_data["suffix_type"] = "" parsed_data["particle_type"] = "" parsed_data["person"] = "" parsed_data["gender"] = "" parsed_data["number"] = "" parsed_data["state"] = ""
  1. JavaScript:
javascript
let parsed_data = { 'lang': '', 'verb_stem_hebrew': '', 'verb_stem_aramaic': '', 'conjugation_type': '', 'adjective_type': '', 'noun_type': '', 'pronoun_type': '', 'preposition_type': '', 'suffix_type': '', 'particle_type': '', 'person': '', 'gender': '', 'number': '', 'state': '' };

Tato struktura umožňuje uložit naparsované informace z tagu OSHB na příslušné klíče nebo vlastnosti. Každý klíč nebo vlastnost odpovídá určitému typu informace z tagu OSHB. Před použitím stačí přiřadit hodnoty těmto klíčům nebo vlastnostem na základě provedeného parsování.

IV.  Možná pole pro ukládání dat ve Delphi 7 nebo C++ (Visual Studio 2010)

Delphi 7:

delphi
var parsed_data: TStringList; begin parsed_data := TStringList.Create; parsed_data.Values['lang'] := ''; parsed_data.Values['verb_stem_hebrew'] := ''; parsed_data.Values['verb_stem_aramaic'] := ''; parsed_data.Values['conjugation_type'] := ''; parsed_data.Values['adjective_type'] := ''; parsed_data.Values['noun_type'] := ''; parsed_data.Values['pronoun_type'] := ''; parsed_data.Values['preposition_type'] := ''; parsed_data.Values['suffix_type'] := ''; parsed_data.Values['particle_type'] := ''; parsed_data.Values['person'] := ''; parsed_data.Values['gender'] := ''; parsed_data.Values['number'] := ''; parsed_data.Values['state'] := ''; end;

C++ (Visual Studio 2010):

cpp
#include <map> #include <string> std::map<std::string, std::string> parsed_data; parsed_data["lang"] = ""; parsed_data["verb_stem_hebrew"] = ""; parsed_data["verb_stem_aramaic"] = ""; parsed_data["conjugation_type"] = ""; parsed_data["adjective_type"] = ""; parsed_data["noun_type"] = ""; parsed_data["pronoun_type"] = ""; parsed_data["preposition_type"] = ""; parsed_data["suffix_type"] = ""; parsed_data["particle_type"] = ""; parsed_data["person"] = ""; parsed_data["gender"] = ""; parsed_data["number"] = ""; parsed_data["state"] = "";

Toto jsou upravené verze kódu, které by měly být kompatibilní s Delphi 7 a C++ ve Visual Studio 2010.

Komentáře

Oblíbené příspěvky