Instalace NLTK v systému Linux
Chcete-li nainstalovat NLTK v Ubuntu, spusťte následující příkaz:
$ sudo apt nainstalovat python3-nltkBalíčky NLTK jsou k dispozici ve všech hlavních distribucích Linuxu. Chcete-li nainstalovat balíčky, hledejte ve správci balíčků klíčové slovo „NLTK“. Pokud z nějakého důvodu NLTK není k dispozici v úložištích vaší distribuce, můžete jej nainstalovat ze správce balíčků pip spuštěním následujícího příkazu:
$ pip install --user -U nltkVšimněte si, že nejprve musíte nainstalovat pip ze správce balíčků, aby výše uvedený příkaz fungoval. U některých distribucí jej lze nazvat pip3. Můžete také postupovat podle podrobných pokynů k instalaci, které jsou k dispozici na webu oficiální webové stránky NLTK.
Extrahování vět z odstavce pomocí NLTK
U odstavců bez složitých interpunkčních znamének a mezer můžete použít vestavěný tokenizátor vět NLTK s názvem „Punkt tokenizer“, který je dodáván s předem vyškoleným modelem. K tokenizaci textu do vět můžete také použít své vlastní trénované datové modely. Vlastní trénované datové modely jsou mimo rozsah tohoto článku, takže níže uvedený kód použije integrovaný tokenizer Punkt English. Chcete-li stáhnout soubor prostředků Punkt, spusťte postupně následující tři příkazy a počkejte na dokončení stahování:
$ python3$ import nltk
$ nltk.stáhnout ('punkt')
V ukázce kódu níže bude použit odstavec z „Alice's Adventures in Wonderland“:
importovat nltkpara = „Buď byla studna velmi hluboká, nebo padala velmi pomalu, protože ano
spousta času, když šla dolů, aby se o ní rozhlédla a přemýšlela, co se děje
následovat. Nejprve se pokusila podívat dolů a rozeznat, k čemu jde,
ale bylo příliš tmavé na to, abych něco viděl; pak se podívala po stranách studny a
všimli si, že jsou plné skříní a polic na knihy; sem tam ona
viděl mapy a obrázky zavěšené na kolících. Sundala z jedné police sklenici
jak prošla; byl označen jako „ORANGE MARMALADE“, ale k jejímu velkému zklamání to udělal
byla prázdná: nerada odhodila nádobu ze strachu, že někoho zabije, tak se jí to povedlo
když ji propadla kolem, dát ji do jedné ze skříní."
tokeny = nltk.sent_tokenize (odstavec)
pro t v žetonech:
tisk (t, "\ n")
Spuštěním výše uvedeného kódu získáte následující výstup:
Buď byla studna velmi hluboká, nebo padala velmi pomalu, protože měla spoustu časusestoupila, aby se na ni podívala a přemýšlela, co se bude dít dál.
Nejprve se pokusila podívat se dolů a rozeznat, k čemu jde, ale bylo to příliš temné
vidět cokoli; potom se podívala na boky studny a všimla si, že jsou
naplněné skříněmi a policemi na knihy; sem tam viděla viset mapy a obrázky
na kolíky.
Když prošla, sundala z jedné police sklenici; byl označen jako „ORANGEMARMALADE“,
ale ke svému velkému zklamání byla prázdná: nerada odhodila nádobu ze strachu
někoho zabít, tak se to podařilo dát do jedné ze skříněk, když kolem ní spadla.
Integrovaný tokenizátor věty Punkt funguje dobře, pokud chcete tokenizovat jednoduché odstavce. Po importu modulu NLTK stačí použít metodu „sent_tokenize ()“ na velký textový korpus. Tokenizátor věty Punkt však nemusí správně detekovat věty, když existuje složitý odstavec, který obsahuje mnoho interpunkčních znamének, vykřičníků, zkratek nebo opakujících se symbolů. Není možné definovat standardní způsob, jak tyto problémy překonat. Budete muset napsat vlastní kód pro řešení těchto problémů pomocí regexu, manipulace s řetězci nebo trénováním vlastního datového modelu namísto použití integrovaného datového modelu Punkt.
Můžete také zkusit vylepšit stávající model Punkt, abyste opravili nesprávnou tokenizaci pomocí některých dalších parametrů. Postupujte podle oficiální dostupné dokumentace tokenizace Punkt tady. Chcete-li použít své vlastní vylepšení, je nutná mírná změna kódu:
od nltk.tokenizovat.punkt import PunktSentenceTokenizer, PunktParameterspara = „Buď byla studna velmi hluboká, nebo padala velmi pomalu, protože měla spoustu
času šla dolů, aby se o ní rozhlédla a přemýšlela, co se stane
další. Nejprve se pokusila podívat se dolů a rozeznat, na co přichází, ale bylo to tak
příliš tmavý, než aby něco viděl; pak se podívala po stranách studny a všimla si
že byly naplněny skříněmi a policemi na knihy; sem tam uviděla mapy
a obrázky zavěšené na kolících. Sundala z jedné police sklenici
prošel; byl označen jako „ORANGE MARMALADE“, ale k jejímu velkému zklamání tomu tak bylo
prázdná: nerada odhodila nádobu ze strachu, že někoho zabije, tak se jí to podařilo
položila ho do jedné ze skříněk, když kolem něj spadla."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizer.tokenizovat (para)
pro t v žetonech:
tisk (t, "\ n")
Výše uvedený kód provádí stejnou práci jako metoda „sent_tokenize ()“. Nyní však můžete definovat svá vlastní pravidla pomocí vestavěných metod a předat je jako argumenty, jak je popsáno v dokumentaci. Například do kódu výše byly přidány některé zkratky. Pokud za těmito zkratkami následuje interpunkce, nebudou rozděleny na novou větu. Normálním chováním je použití tečky nebo tečky jako indikace konce věty.
Závěr
NLTK a jeho metody tokenizace jsou docela efektivní při tokenizaci a zpracování textových dat. Předškolené modely však nemusí fungovat 100% s různými typy textů. Možná budete muset vylepšit stávající modely, trénovat a dodávat vlastní, nebo napsat svůj vlastní kód, abyste opravili anomálie.