Natural Language Toolkit NLTK Stručná charakteristika lNLTK je sada knihoven pro Python a programů pro symbolické a statistické zpracování přirozeného jazyka lk dispozici jsou -zdrojové kódy -dokumentace -tutoriály -data (korpusy, seznamy slov, ...) NLTK je určeno lpro studenty zpracování přirozeného jazyka lpro podporu výzkumu souvisejících oblastí, například: -empirická ligvistika (korpusy) -kongitivní vědy -umělá inteligence, strojové učení -vyhledávání znalostí Motivační příklad 1 nltk.app.rdparser_app lUkázka rekurzivní sestupné analýzy shora dolů Motivační příklad 2 nltk.app.srparser_app lUkázka posuvně-redukční analýzy zdola nahoru Motivační příklad 3 nltk.app.chartparser_app lAnalýza zdola nahoru může najít jen jedno vyhodnocení, někdy nenalezne existující řešení lAnalýza shora dolů může být značně neefektivní (pro LR gramatiky může cyklit) lŘešíme znovuužitím výpočtů (dynamické programování) -> chart parsing Motivační příklad 3 nltk.app.chartparser_app lUkázka tabulková analýza Motivační příklad 3 nltk.app.chartparser_app lMůžeme uložit jakoukoli hypotézu kompatibilní s gramatikou (ale nemusíme ji potom využít) lKaždá hypotéza reprezentována hranou NLTK lvývoj: 2005 jako NLTK -Lite lod prosince 2005 je to jediná podporovaná verze lstejná funkčnost jako starší NLTK, avšak s nižšími nároky na programátora (používá standardní objekty Pythonu, atd.) lnyní ve verzi 2 Autoři a licence lautoři: Steven Bird, Edward Loper lmnoho přispěvatelů llicence: -projekt je open source bez záruky lGNU General Public License -dokumentace lCreative Commons Attribution-ShareAlike 2.5 License NLTK - zdroje lhttp://nltk.org/ lkniha Natural Language Processing with Python (http://nltk.org/book) l Instalace (1) lInstalace vyžaduje Python 2.6 a vyšší lPlatformy -Linux -Mac -Windows Instalace (2) 1) Python http://www.python.org/download/ 2) Numerical Python (Numarray) http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=32367 3) NLTK https://pypi.python.org/pypi/nltk Linux: packages: sudo apt-get install python-nltk Data: >>> import nltk >>> nltk.download() Python a NLP lPython je vhodný nástroj pro NLP -jednoduchý -snadno “debugovatelný” lvýjimky linterpretovaný jazyk -strukturovatelný lmoduly, OOP -výkonná práce nad (znakovými) řetězci Moduly a balíky lmoduly modules umožňují znovu použít kód lbalíky packages jsou hierarchické moduly lpříkazy pro práci -import -from ... import -reload Moduly a balíky import lPříkaz import načítá modul: # Load the regular expression module >>> import re lPoužití přístupu k metodám (pomocí tečkové notace) # Use the search method from the re module >>> re.search('\w+', str) lZobrazení obsahu modulu pomocí dir: >>> dir(re) ['DOTALL', 'I', 'IGNORECASE', ...] Moduly a balíky from .. import lPříkaz from...import načítá jednotlivé funkce: # Load the search function from the re module >>> from re import search >>> nltk.app.rdparser_app import * lPoté již může být příkaz použit přímo: # Use the search method from the re module >>> search('\w+', str) >>> demo() Moduly NLTK lnltk lnltk.chat lnltk.contrib lnltk.corpus lnltk.draw lnltk.misc lnltk.model lnltk.parse lnltk.tag lnltk.tokenize Tokenizace úvod lCo je slovo? -Shluk znaků oddělený mezerou? NE lKonce řádků lInterpunkce l… lRozdíl Type vs. Token -Type – to co je mnoha tokenům společné -Token - konkrétní realizace znaku "slovo" se vyskytuje dvakrát (dva tokeny), ale jde jen o jedno slovo (jeden type) Tokenizace text = sekvence tokenů Tokenizace stemming (hledání kořene) Tokenizace statistiky Počet slov Frekvenční distribuce Tokenizace statistiky nltk_lite.probability.FreqDist Jméno Příklad Popis Count fd.count('the') Kolikrát se daný vzorek vyskytl Frequency fd.freq('the') Frekvence daného vzorku N fd.N() Počet vzorků Samples fd.samples() Seznam různých zaznamenaných vzorků Max fd.max() Vzorek s nejvyšším počtem výskytů Tokenizace statistika pomocí tokenů Tokenizace podmíněná pravděpodobnost Tokenizace předpovídání slov (kolokace) lTrénovací korpus lConditionalFreqDist a max() lGenerování Tagování nástroje NLTK tag Word Class Label Brown Tag Word Class Det at Article N nn Noun V vb Verb Adj jj Adjective P in Preposition Card cd Number end Sentence-ending punctuation Tagování nástroje NLTK tag •Jednoduchý tagger –Přesnost cca. 20-30% –Používá se jako fallback solution Tagování nástroje NLTK tag •Tagger s regulárními výrazy –Vhodný pro slovní tvary s charakteristickou příponou/předponou –Vhodný pro čísla, mailové adresy, www stránky apod. –Používá se jako fallback solution Tagování nástroje NLTK tokenize •Unigramový tagger –Trénování: –Použití: Tagování nástroje NLTK tag •Kombinace •Brillův tagger Chunk parsing nástroje NLTK parse •Příklad –Shlukování tokenů do chunks •Tvořeny vedoucím slovem (např. podst. jm) a souvisejícími slovy (např. příd. jm.) –Chunks a uplynulé tokeny vytváří tzv. chunk structure •Dvojúrovňový strom obsahující celý text a obsahující jak chunks tak neparsované tokeny Chunk parsing nástroje NLTK parse •Chunk tree Shrnutí lNLTK je vhodný nástroj pro NLP: -Umožňuje rychlou a pohodlnou práci s textem -Mnoho obsažených výrazů Literatura lNLTK Book Steven Bird, Ewan Klein, Edward Loper, 2001-2009 -http://nltk.org/book lNLTK Guides http://nltk.googlecode.com/svn/trunk/doc/howto/index.html lnltk modules http://nltk.org/py-modindex.html