Krajta

Jak extrahovat věty z textu pomocí modulu NLTK Python

Jak extrahovat věty z textu pomocí modulu NLTK Python
Sada Natural Language Toolkit (NLTK) je modul pro zpracování jazyka a textu pro Python. NLTK může analyzovat, zpracovávat a tokenizovat text dostupný v mnoha různých jazycích pomocí vestavěné knihovny korpusů a velké zásoby lexikálních dat. Python je jedním z nejpopulárnějších programovacích jazyků používaných ve vědě o datech a zpracování jazyků, a to hlavně díky univerzálnosti jazyka a dostupnosti užitečných modulů, jako je NLTK. Tento článek vysvětlí, jak extrahovat věty z textových odstavců pomocí NLTK. Kód v této příručce byl testován v Pythonu 3.8.2 a NLTK 3.4.5 na Ubuntu 20.04 LTS.

Instalace NLTK v systému Linux

Chcete-li nainstalovat NLTK v Ubuntu, spusťte následující příkaz:

$ sudo apt nainstalovat python3-nltk

Balíč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 nltk

Vš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 nltk
para = „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 času
sestoupila, 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, PunktParameters
para = „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.

Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...
Jak změnit velikost, barvu a schéma kurzoru myši a kurzoru v systému Windows 10
Ukazatel myši a kurzor ve Windows 10 jsou velmi důležité aspekty operačního systému. To lze říci i pro jiné operační systémy, takže ve skutečnosti nej...
Hry Zdarma a open source herní motory pro vývoj linuxových her
Zdarma a open source herní motory pro vývoj linuxových her
Tento článek pokryje seznam bezplatných a otevřených herních enginů, které lze použít pro vývoj 2D a 3D her v systému Linux. Existuje mnoho takových h...