IceNLPy 🐍
By Hinrik Hafsteinsson
Published or Updated on
🐍🐍🐍
Ég átti alltaf eftir að koma því út í heiminn að ég vann að svolítið skemmtilegu verkefni um daginn.
Og hér er það:
Hvað er þetta?
IceNLPy er Python pakki sem vefur sig utan um Java forritasafnið IceNLP. Þótt hann hafi upphaflega verið gerður til gamans er pakkinn fullkomlega nothæfur og er hægt að nota hann í ýmisleg verkefni.
>>> from icenlpy import icetagger, iceparser, tokenizer
>>> text = "Hann er mjög virtur málfræðingur að norðan. Hvað segirðu um það?"
>>> tokens = tokenizer.split_into_sentences(text)
>>> tokens
['Hann er mjög virtur málfræðingur að norðan .', 'Hvað segirðu um það ?']
>>> tagged = icetagger.tag_text(tokens)
>>> tagged
['Hann fpken er sfg3en mjög aa virtur lkensf málfræðingur nken að aa norðan aa . .\n',
'Hvað fshen segirðu sfg2en um ao það fpheo ? ?\n']
>>> parsed = iceparser.parse_text(tagged)
>>> parsed
[[[NP Hann fpken ] [VPb er sfg3en ] [NP [AP [AdvP mjög aa ] virtur lkensf ] málfræðingur nken ]
[AdvP að aa norðan aa ] . .], [[NP Hvað fshen ] [VP segirðu sfg2en ] [PP um ao [NP það fpheo ] ] ? ?]]Any further information is available on the package’s GitHub page.
Baksaga
Í desember síðastliðnum (2023) þurfti ég að nota nokkur af verkfærunum í IceNLP forritasafninu í verkefni sem ég var að vinna að.
IceNLP er verkfærakista full af máltæknitólum fyrir íslensku sem var skrifuð í Java og var lengi vel fullkomnasti hugbúnaðurinn í íslenskri máltækni. Jafnvel þó að tækninýjungar nútmans hafa tekið fram úr IceNLP í dag, þjónar það nokkurs konar grundvallartilgangi innan íslenskrar máltækni og er ennþá notað í ýmsu samhengi.
Á þeim tíma var ég að nota GreynirEngine Python pakkann mikið í tilteknu verkefni og mér datt í hug að það væri gaman að geta notað og inleitt IceNLP í Python umhverfi á svipaðan hátt.
Ég ákvað því að nýta jólafríið í að skrifa Python-wrapper fyrir IceNLP verkfærakistuna í formi Python pakka, sem ég kalla IceNLPy. Pakkinn eru fáanlegar á GitHub og PyPi og er hægt að setja upp í gegnum pip.
Ég fann síðar út að einhver hafði gert þetta fyrir nokkrum árum en á öðrum forsendum, með því að Dockerize-a IceNLP. Það er ekkert að því. 🤓
Þar sem „vandamálið“ við að IceNLP sé Java-forritasafn er varla vandamál í sjálfu sér, er þessi pakki í grunninn gerður til skemmtunar. Hins vegar er það gott dæmi um hvernig á að vefja Java bókasafn í Python með þunnu subprocess-lagi og sérsniðnum Python gagnatögum.
Fyrsta ítrún pakkans sem gefin var út inniheldur tókara, markara (IceTagger) og þáttara (IceParser). Það gæti farið svo að ég vinni meira í þessu á næstunni og bæti við fleiri verkfærum, eða að ég geri það ekki. Við sjáum til. 🤷♂️