mideind/GreynirCorrect

Tok skilgreiningar

sigurdurb opened this issue · 3 comments

Hæ,
Ég var að spá í hvaða tilfellum er þessi listi ekki tómur:

Ég er reyndar að vinna með þetta án þess að nota gen fallið heldur vinnur bara með textan beint sem streng.

Ég var líka að prenta út TOK.END og fæ frozenset({10000, 12001, 10002, 11002}), í hvaða charactera er verið að vísa hérna?
Ef ég geri t.d. print(chr(10000)) fæ ég bara mjög skrítin tákn.

Þetta er aðallega "allur er varinn góður" forritun (defensive programming); undir venjulegum kringumstæðum endar tókalistinn alltaf á tóka sem er í TOK.END menginu (TOK.S_END, TOK.P_END, TOK.X_END, TOK.S_SPLIT, sbr. tokenizer.py í Tokenizer pakkanum) og þá er curr_sent = [] í lokin.

Tok.kind svæðið inniheldur ekki stafi heldur heiltölu (integer) sem gefur til kynna hvers konar tóka um er að ræða. Gildin eru m.a. TOK.WORD (=6) og TOK.S_END (=11002). Þessar tölur eru valdar nánast af handahófi og hafa enga sérstaka merkingu. Sjálfur textinn sem tókinn inniheldur er í Tok.txt. Þetta er nánar útskýrt í README í Tokenizer pakkanum.

Sæll, Já einmitt. Ég var aðeins búinn að skoða kóðann í tokenizer. Þannig þetta er einskonar möppun frá tölu í tóka? Þú nefndir Tok.txt, ég er ekki að finna það á git. Er það í tokenizer pakkanum?

Tjah, strangt til tekið er GreynirCorrect að beita smá Python trixi: Hann tekur inn Tok hluti, þ.e. tóka sem koma úr Tokenizer pakkanum og eru skilgreindir sem NamedTuple("kind", "txt", "val"), en hann skilar út CorrectToken hlutum, þar sem CorrectToken er klasi sem er skilgreindur í errtokenizer.py (lína 160). CorrectToken hegðar sér hins vegar alveg eins og Tok ("duck typing"). Þannig að ef þú ert með tóka t í höndunum geturðu skoðað t.kind til að sjá hvers konar tóki þetta er (t.d. TOK.WORD), t.txt til að fá texta tókans, og t.val til að fá ýmsar aukaupplýsingar um tókann. Þetta er allt skjalað í README skránni í Tokenizer, sem ég hlekkjaði á hér fyrir ofan.