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.

szavak

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.