Meg kell találnia a releváns szavakat vagy kifejezéseket több száz vagy ezer szövegben? És spanyolul akarod csinálni? Ha igen, ez a cikk egy kicsit segíthet ebben.
Ehhez néhány természetes nyelvi feldolgozási technikát fogunk használni annak érdekében, hogy egy vagy több dokumentumból néhány releváns kifejezést keressünk - és remélhetőleg megtaláljunk.
Indulás előtt két pontosítást fogok tenni. Az első, hogy megközelítésem nyelvileg orientált lesz. Ez azt jelenti, hogy nagyobb súlyt fogok tulajdonítani az eredményeknek, mint a számítógépes technikáknak, és ezért megpróbálok kommunikációs szempontból értelmesebb stratégiákat használni, mint másokat, amelyek számítási szempontból hatékonyabbak. A második pontossága az, hogy a vonatkozó kifejezések a szöveghez és a megfogalmazott célhoz viszonyított kérdés, amint később - remélem - később kiderül.
Ha viszont nem érdekli a releváns szavak kibontása, de csökkenteni kívánja a szövegben szereplő szavak számát, akkor felkérem, hogy nézzen meg egy másik cikkemet: Csökkentse a szavak számát egy szöveg: származtatás és radikalizálódás (visszahúzás) a pythonnal.
A szövegben releváns kifejezések megtalálásához támaszkodunk az azt alkotó mondatok nyelvtani elemzésére. Kétféle módon lehet kihasználni a mondat szerkezetét: látni, hogy mely szavak vannak egymás mellett elrendezve egyre tágabb mondatok kialakításáért (elemzés alkotóelemekben), vagy annak megfigyelése, hogy egyes szavak megkövetelik vagy támogatják másokat (függőségek elemzése) ).
Ebben a cikkben a második típusú elemzést fogjuk használni, mert átláthatóbbá teszi, hogy mely szavak elengedhetetlenek és melyek nem. És mivel ez is segít megtalálni a releváns szavakat, amelyek egyetlen csoportként működnek (ennek hasznosságát később meglátja).
Ezt a feladatot egy szinte a sütőből friss könyvtárral fogjuk elvégezni: a StanfordNLP-vel.
A StanfordNLP egy Python-ban készült természetes nyelv elemző csomag. Ideális egy szöveg mondatokra és szavakra bontására, valamint e szavak kategóriákba sorolására, például főnevekre, melléknevekre stb. Ez lehetővé teszi a függőség elemzését több mint 70 különböző nyelven.
Ha többet szeretne tudni erről a nagy teljesítményű Python könyvtárról, akkor keresse fel a projekt főoldalát.
Ezen a linken érdemes megismerkedni a könyvtár oszlopait alkotó nyelvi előírásokkal is. Ez segít abban, hogy megtudja, milyen szavakkal kell konzultálnia a célkitűzés megvalósításához.
Könyvtár telepítése
A StanfordNLP könyvtár a PyPI könyvtárban található, így a terminálról pip segítségével telepíthetjük:
$ pip install stanfordnlp
Ehhez a könyvtárhoz le kell tölteni azokat a nyelvi modelleket is, amelyekkel dolgozni kíván. Ezen modellek listáját megtalálja a projekt hivatalos oldalán.
A nyelvi modellek telepítése
Kezdjük azzal, hogy importáljuk a könyvtárat, és letöltjük a spanyol modelleket a Python konzolról:
Azt javaslom, hogy töltse le a modellfájlokat az alapértelmezett elérési útvonalra, amely megkönnyíti és olvashatóbbá teszi a kódot. A spanyol modellek letöltését csak egyszer kell elvégeznie. Ezután a modellek telepítve vannak a számítógépre.
StanfordNLP komponens szekvencia konfiguráció
A StanfordNLP egymás után több komponenst használ a nyelvi input feldolgozásához. Ez a komponenssor (vagy csővezeték) kibővíthetővé, rugalmassá és méretezhetővé teszi a könyvtárat. Így csak azokat a komponenseket használhatjuk, amelyek szükségesek a feladathoz, vagy helyettesíthetünk egyet megfelelőbbel. A StanfordNLP megköveteli, hogy érvként adjuk át azt a nyelvi modellt, amelyet használni fogunk (ebben az esetben a lang = 'is' volt az a modell, amelyet egy perccel ezelőtt telepítettünk).
Ha végrehajtjuk az alapértelmezett komponenssorozatot, képet kaphatunk arról, hogy ez a könyvtár mit tehet:
Az alapértelmezett összetevők a következők:
- tokenize: Tokenizer. Válasszon egy szöveget mondatokra, a mondatokat pedig szavakra.
- mwt: Összetett szó tokenizer. Felismeri az olyan szavakat, mint a nyomon követés vagy a virtuális asszisztens.
- pozíció: Szóosztály osztályozó. Rendeljen kategóriákat, például melléknevet vagy igét egy szóhoz.
- lemma: Lematizer. Vesz egy szót, és átalakítja szótár alakúra. Például ismerje el, hogy az énekelt szótár formája az éneklés.
- lepárolja: Függőségelemző. Mutasson egy szó funkciójára, és jelölje meg annak kapcsolatát más szavakkal ugyanabban a mondatban. Jelölheti például, hogy az I love chocolate mondatban a csokoládé kifejezés az a tárgy, amelyet a beszélő szeret.
Ha nem akarjuk az összes összetevőt használni, akkor a következő módon határozhatjuk meg, melyikekre lesz szükségünk:
Mindenesetre azt javaslom, hogy az alapértelmezett összetevőket használja. Ez megkönnyíti számodra a cikkben szereplő példák követését.
Egy egyszerű példával teszteljük a könyvtárat. Ehhez létrehozunk egy objektumot a Document osztályból nlp objektumból (a Pipeline osztályba tartozik), amelyet korábban építettünk. Ez a doc objektum tárolja az nlp elemzésének eredményét.
Ezzel a pár sorral dolgoztunk fel egy pár mondatból álló húrt. Az objektum a karaktersorozatot alkotó mondatok listája. Ha Ön még nem ismeri a Python-t vagy általában a programozást, mindez azt jelenti, hogy az összes elemzett karakterláncunkat a doc tárolja, és hogy a megfelelő módszerek segítségével hozzáférhetünk az összes információhoz.
Például az első mondat (a Pythonban a 0. pozícióban lévő - első pozíció - függőségeit látom):
- („Macskák”, „4”, „nsubj”)
- („Was”, „4”, „zsaru”)
- („Egy”, „4”, „det”)
- („Film”, „0”, „gyökér”)
- („Tényleg”, „6”, „advmod”)
- (’Borzalmas’, ’4’, ’amod’)
- (’.’, ’4’, ’punct’)
Mit jelent mindez? Leírja, mi történik ebben a mondatban, számmal jelöli azt a szót, amelytől a másik függ, és elmondja a szó funkcionális osztályát. Például ennél a példánál „lefordíthatnánk" a következő:
- („Macskák”, a 4. szótól függök, és én vagyok az, akit felelősnek tartok azért, amit mondani fogok, mert alany vagyok)
- ('Volt', a 4. szótól függök, és egy kopulatív ige vagyok - csak azért vagyok itt, hogy összerakjam a dolgokat -)
- („Egy”, a 4. szótól függök, és meghatározó vagyok - ezért ne figyelj rám túlságosan -)
- (’Film’, itt vagyok a legfontosabb szó, és nem függök senkitől - 0 vagyok, és én vagyok ennek a mondatnak a gyökere vagy magja)
- („Valóban”, a 6. szótól függök - a „szörnyűtől” -, és módosító határozószó vagyok)
- (’Rettenetes’, a 4. szótól függök, és melléknév vagyok, amely módosítja ezt a szót)
- (’.’, 4-től függök, és pont vagyok - senki sem törődik velem -)
Ezek a kapcsolatok a következő grafikonon is láthatók:
A mag egy mondat olyan szó, amely körül a többiek közvetlenül vagy közvetve forognak (vegye figyelembe, hogy minden út ott végződik). A magok tárgyakkal egészítik ki jelentését: entitások (jellemzően főnevek), amelyek aktívan vagy passzívan vesznek részt a műveletekben, vagy kiegészítik egy másik szó szemantikáját.
Ebben a példában a „film” szó önmagában nem mond semmit. Akkor kezd értelmes lenni, amikor egy tárgy mellett van, ebben az esetben Macskákkal. Ezt a filmalany által definiált tárgyat hívjuk (angol tantárgyban). De spanyolul nem mondhatjuk, hogy Macskák film, de a mag és az objektum közötti kapcsolatot ebben a mondatban a következő igével jelöljük: A macskák film volt. Az értelem akkor fejeződik be, amikor hozzáadunk egy módosítót (A Macskák szörnyű film volt). És végül ehhez a szörnyűséghez hozzáadunk egy másik módosítót, ebben az esetben opcionálisat, ami azt jelzi, mennyire biztosak vagyunk a szörnyűségben: igazán szörnyűséggel azt mondjuk, hogy nagyon biztosak vagyunk a filmről alkotott véleményünkben.
A grafikon azt mutatja, hogy ami igazán érdekel minket, azok a magok, az objektumok és a módosítók. A többit elvethetjük ebben a példában, mert ebben a konkrét esetben nem túl fontosak.
Figyeljük meg, hogy itt két szintet választhatunk szét. Az első valami technikásabb dologhoz kapcsolódik, és abból áll, hogy a StanfordNLP segítségével elemezzük a szöveg függőségeit (függőségi elemzés). A második szint az elemzés eredményeként a kategóriák fontosságának értelmezésével függ össze. Ha releváns kifejezéseket és szavakat fogunk keresni a spanyol szövegekben, akkor el kell döntenünk a szöveg típusa alapján, hogy mi érdekel minket a legjobban: ha a magok, az objektumok, egy bizonyos típusú módosítók vagy mások. És hangsúlyozom a szöveg típusát, mivel ezek mindegyike feltételezi, hogy vannak olyan szóosztályok, amelyek fontosabbak, mint mások. Például az érzelmek elemzésében a legátlátszóbbak a módosítók lennének. De ha tweetekkel dolgozol, akkor talán az objektumokat és a magokat kell kinyerned. Az egyes szövegtípusok és minden célunk befolyásolja, mire kell törekednünk.
Nézzük meg, hogy működik ez hosszabb szöveg esetén.
Ahhoz, hogy egy kicsit mélyebben belemélyedjünk a témába, a Rob Zombie Halloween II áttekintésének egy részét használjuk szövegként. Ez a szegmens az Espinof portál jóvoltából származik.
Gyorsan megtalálhatjuk a legfontosabb mondatokat ezekben a bekezdésekben? Természetesen igen. Csak el kell döntenünk, hogy mit keressünk, és írjunk néhány sor kódot. Mivel recenzióról van szó, érdekel bennünket a szerző véleménye a filmről: ha jónak tűnt, akkor unalmasnak stb.
Általában egy ilyen típusú áttekintés során ezeknek az információknak közvetett módon kell elhelyezkedniük a film különböző aspektusainak értékelésében: hogy ha egy ilyen színész elfogadható, akkor ha a cselekménynek nincs értelme, akkor ha a fénykép gyönyörű volt. . Tehát keressünk módosítókat és módosított objektumokat (a módosító önmagában nem fogja megmondani, hogy a film melyik elemét értékelik).
Ezzel a kóddal a következő eredményt kapjuk:
- lendületes visszatérés
- rezgő impulzus
- telek el
- mind kiszámítható
- harmadik másodperc
- Párhuzamos összeszerelés
- késleltetett visszatérés
- Kiszámítható unalmas
- nyájas ismétlés
- kreatív jelenetek
- kettős játék
- nyilvánvaló hiány
- nevetséges konvencionális
- angyali anya
- fehér Ló
- túlzott hangsúly
- kínos jelenlét
- utolsó szakasz
- hosszú visszatérés
- kezdeti ragyogás
- remek lehetőség
E dolgok némelyike pozitív, némelyik negatív, mások pedig csak semlegesek. De találtunk elég leíró kifejezéseket: pimasz visszatérés, elnémított cselekmény, minden kiszámítható, halk ismétlés, kreatív jelenetek, kezdeti ragyogás. Ezek a kifejezések ebben a sorrendben mintha azt jeleznék, hogy a film jól indul, majd paff, szétesik.
Ne feledje, hogy a Python néhány sorával kiemelhetjük a releváns információkat egy szövegből. Ha ezt a kódot egy film több tucatjában vagy több száz recenziójában használjuk (és néhány hangulatelemzésben), akkor jó képet kaphatunk arról, hogy a kritika hogyan fogadta a filmet. Minden abban rejlik, hogy tudjuk, mit fogunk keresni, és a megfelelő eszköz használatában.
Elmagyarázom a kódot
Igen, a kód nagyon szép és hasznos, de mit jelent? Ehhez egy kicsit vissza fogunk térni, és megnézzük, hogy a függőségek attribútum mit csinál az egyes mondatokból.
Ezután megmutatom a lista első két elemét, amelyek függőségek következményei (az első két szó eredményei: Macskák és volt).
A dependencies attribútummal három elemből álló listák jelennek meg: az első információt tartalmaz arról a szóról, amelyen függ (kísérőszó); a második elem a szó funkcionális osztályát képviseli; a harmadik elem jelzi az elemezni kívánt szó információit. Aláírással hozzáférhetünk minden elemhez, amely az egyik ilyen sorból áll.
De hogyan szerezzük meg a szavakat mint ilyeneket ezekből az információkból? Ehhez a szöveg attribútumot használjuk az első és a harmadik elem kiválasztása után (0. és 2. index).
Láthattuk a lemma attribútummal rendelkező lemmákat is vagy a szó nyelvtani jellemzői a tulajdonságokkal együtt, egyéb tulajdonságok között többet.
A StanfordNLP egy egyszerű könyvtár, de tele van lehetőségekkel. Egyszerűségében rengeteg lehetőséget rejt magában a természetes nyelv feldolgozásában. A lehető legtöbb kihasználása nem azt jelenti, hogy órákon át kell elolvasni a dokumentációt, hanem inkább előre gondolkodni, ami érdekel minket a szövegekben, és egy kicsit reflektálni arra, hogyan érjük el célkitűzéseinket az általunk nyújtott nyelvtani kategóriák előnyeinek kihasználásával.
Ha érdekel, hogy többet tudjon meg erről a témáról, itt talál egy Jupyter jegyzetfüzetet, amelyet erre a célra készítettem. Nem kell semmit telepítenie, mert a Google Colab nevű nagyszerű online együttműködési eszközzel készült. Másolatot készíthet a jegyzetfüzetből, és megtanulhatja azt a kódot, amelyet ott bemutatok Önnek.