mikalai-udodau/spell-be

Пытанне пра марфалогію, stemming, lemmatization

Opened this issue · 2 comments

ssvb commented
$ echo "Я бачу белую сабаку." | hunspell -m -d be_BY
Я  st:я

бачу  st:бачыць fl:m

белую  st:белы fl:V

сабаку  st:сабака fl:H

Базавыя формы словаў hunspell вызначае і гэта вельмі добра. Ці магчыма (або пажадана) было б таксама дадаць інфармацыю пра род, лік, склон? Такім чынам, каб можна было аўтаматычна вызначыць, што словы "белую" і "сабаку" не пасуюць адно да аднаго (для праверкі граматыкі)?

Усю неабходную інфармацыю @alex73 мае ў https://github.com/Belarus/GrammarDB і гэтую інфармацыю можна паспрабаваць дадаць да афіксаў hunspell з дапамогай аўтаматычнага скрыпта. Кампактны фармат spell-be вельмі зручны і важыць значна менш, чым XML. Таксама hunspell зʼяўляецца якім-ніякім дэ-факта стандартам.

Я мяркую, што @GooseOb мог бы з цягам часу нават дадаць праверку правапісу і граматыкі беларускай мовы ў https://gooseob.github.io/taraskevizatar/ ;-)

Правяраць граматыку, у прыватнасці, узгодненасць ускосных склонаў - гэта мая, можна сказаць, блакітная мара. Ёсць нейкія нарыхтоўкі, яны ў каментарыях і назвах файлаў. На жаль, не сустракаў дакументацыі, як дадаваць і дзе пабачыць, як працуе.

І ёсць яшчэ невялічкая праблемка, не прыкладзе таго ж сабакі: "сабаку" - гэта давальны ці вінавальны склон?

ssvb commented

На жаль, не сустракаў дакументацыі, як дадаваць і дзе пабачыць, як працуе.

Нейкая дакументацыя ёсць тут: https://manpages.ubuntu.com/manpages/bionic/man5/hunspell.5.html (Optional data fields).

Інфармацыя пра слова "сабака" з GrammarDB:

    <Paradigm pdgId="1022579" lemma="саба+ка" tag="NCAINM2">
        <Variant id="a" lemma="саба+ка" slouniki="piskunou2012:170215" pravapis="A1957,A2008">
            <Form tag="NS" slouniki="nazounik2008,sbm2012,tsblm1996,tsbm1984,krapivabr2012">саба+ка</Form>
            <Form tag="GS" slouniki="nazounik2008">саба+кі</Form>
            <Form tag="DS" slouniki="nazounik2008,sbm2012">саба+ку</Form>
            <Form tag="AS" slouniki="nazounik2008">саба+ку</Form>
            <Form tag="IS" slouniki="nazounik2008,sbm2012">саба+кам</Form>
            <Form tag="LS" slouniki="nazounik2008,sbm2012">саба+ку</Form>
            <Form tag="NP" slouniki="nazounik2008">саба+кі</Form>
            <Form tag="GP" slouniki="nazounik2008">саба+к</Form>
            <Form tag="DP" slouniki="nazounik2008">саба+кам</Form>
            <Form tag="AP" slouniki="nazounik2008">саба+к</Form>
            <Form tag="IP" slouniki="nazounik2008">саба+камі</Form>
            <Form tag="LP" slouniki="nazounik2008">саба+ках</Form>
        </Variant>
    </Paradigm>

Расшыфроўку тэгаў можна знайсці ў раздзеле "Будова Граматычнай базы". Тупая канвертацыя GrammarDB з XML у фармат Hunspell без афіксаў (~290MB без аптымізацыі) можа выглядаць так :

сабак st:сабака po:NCAINM2 is:AP
сабак st:сабака po:NCAINM2 is:GP
сабака st:сабака po:NCAINM2 is:NS
сабакам st:сабака po:NCAINM2 is:DP
сабакам st:сабака po:NCAINM2 is:IS
сабакамі st:сабака po:NCAINM2 is:IP
сабаках st:сабака po:NCAINM2 is:LP
сабаку st:сабака po:NCAINM2 is:AS
сабаку st:сабака po:NCAINM2 is:DS
сабаку st:сабака po:NCAINM2 is:LS
сабакі st:сабака po:NCAINM2 is:GS
сабакі st:сабака po:NCAINM2 is:NP

Марфалагічны аналіз з дапамогай hunspell і гэтым слоўнікам:

$ echo "Я бачу белую сабаку." | hunspell -m -d be_BY
Я  st:я po:NCIINN0 is:AP
Я  st:я po:NCIINN0 is:AS
Я  st:я po:NCIINN0 is:DP
Я  st:я po:NCIINN0 is:DS
Я  st:я po:NCIINN0 is:GP
Я  st:я po:NCIINN0 is:GS
Я  st:я po:NCIINN0 is:IP
Я  st:я po:NCIINN0 is:IS
Я  st:я po:NCIINN0 is:LP
Я  st:я po:NCIINN0 is:LS
Я  st:я po:NCIINN0 is:NP
Я  st:я po:NCIINN0 is:NS
Я  st:я po:SNP1 is:0NS

бачу  st:бачыць po:VTMN2 is:R1S

белую  st:белы po:AQP is:FAS

сабаку  st:сабака po:NCAINM2 is:AS
сабаку  st:сабака po:NCAINM2 is:DS
сабаку  st:сабака po:NCAINM2 is:LS

Давальны, вінавальны або месны склон. Але род "F" супраць "M". Тут інфармацыі ўжо дастаткова для прымітыўнай граматычнай праверкі з дапамогай нейкага запраграмаванага набору правілаў. Або можна проста сабраць статыстыку з корпуса вікіпедыі і пазначыць рознымі колерамі нетыповыя спалучэнні тэгаў ці словаў. Выглядаць гэта можа так:

grammar-check-preview