Tok skilgreiningar
sigurdurb opened this issue · 3 comments
Hæ,
Ég var að spá í hvaða tilfellum er þessi listi ekki tómur:
GreynirCorrect/src/reynir_correct/main.py
Line 191 in deec51e
É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.