Tagowanie POS za pomocą NLTK i dzielenie w NLP [PRZYKŁADY]
Oznaczanie punktów sprzedaży
Oznaczanie punktów sprzedaży (Znakowanie części mowy) to proces oznaczania słów w formacie tekstowym dla określonej części mowy w oparciu o jej definicję i kontekst. Odpowiada za odczytanie tekstu w danym języku i przypisanie każdemu słowu określonego tokenu (części mowy). Nazywa się to również tagowaniem gramatycznym.
Nauczmy się na przykładzie części mowy NLTK:
Wejście: Wszystko, co nam pozwoli.
Wyjście: [('Wszystko', NN),('do', TO), ('zezwolenie', VB), ('nas', PRP)]
Kroki w przykładzie tagowania POS
- Tokenizuj tekst (word_tokenize)
- zastosuj pos_tag do powyższego kroku, czyli nltk.pos_tag(tokenize_text)
Przykłady tagów NLTK POS są następujące:
Skrót | Znaczenie |
---|---|
CC | spójnik koordynacyjny |
CD | cyfra kardynalna |
DT | determinant |
EX | tam egzystencjalny |
FW | obce słowo |
IN | Przyimek/spójnik podrzędny |
JJ | Ten tag NLTK POS jest przymiotnikiem (duży) |
JJR | przymiotnik, porównawczy (większy) |
JJS | przymiotnik, stopień najwyższy (największy) |
LS | rynek list |
MD | modalny (może, będzie) |
NN | rzeczownik, liczba pojedyncza (kot, drzewo) |
NNS | rzeczownik w liczbie mnogiej (biurka) |
NNP | rzeczownik własny w liczbie pojedynczej (sara) |
NNPS | rzeczownik własny, liczba mnoga (Hindusi lub Amerykanie) |
PDT | predeterminer (wszystko, oba, połowa) |
POS | końcówka dzierżawcza (rodzica) |
PRP | zaimek osobowy (jej, ona, on, on sam) |
PRP $ | zaimek dzierżawczy (ona, jego, mój, mój, nasz) |
RB | przysłówek (czasami, szybko) |
rozszerzenie RBR | przysłówek, porównawczy (większy) |
RBS | przysłówek, stopień najwyższy (największy) |
RP | cząstka (około) |
DO | nieskończony znacznik (do) |
UH | wykrzyknik (do widzenia) |
VB | czasownik (pytać) |
GBV | czasownik gerund (sądzić) |
VBD | czasownik w czasie przeszłym (prosił) |
VBN | czasownik imiesłów bierny (zjednoczony) |
VBP | czasownik, czas teraźniejszy, a nie trzecia osoba liczby pojedynczej (wrap) |
VBZ | czasownik w czasie teraźniejszym z trzecią osobą liczby pojedynczej (podstawy) |
wdt | wh-determiner (to, co) |
WP | w- zaimek (kto) |
WRB | wh- przysłówek (jak) |
Powyższa lista tagów NLTK POS zawiera wszystkie tagi NLTK POS. Tagger NLTK POS służy do przypisywania informacji gramatycznych każdemu słowu w zdaniu. Instalacja, importowanie i pobieranie wszystkich pakietów POS NLTK zostało zakończone.
Czym jest fragmentacja w NLP?
Wydzielanie w NLP jest to proces polegający na wzięciu małych fragmentów informacji i grupowaniu ich w duże jednostki. Podstawowym zastosowaniem Chunkingu jest tworzenie grup „fraz rzeczownikowych”. Służy on do dodawania struktury do zdania poprzez stosowanie tagowania POS w połączeniu z wyrażeniami regularnymi. Powstała grupa słów nazywana jest „fragmentami”. Nazywa się to również płytkim analizowaniem składniowym.
W przypadku płytkiego analizowania istnieje maksymalnie jeden poziom pomiędzy korzeniami i liśćmi, podczas gdy głębokie analizowanie obejmuje więcej niż jeden poziom. Płytka analiza nazywana jest również analizą lekką lub fragmentacją.
Zasady dzielenia się
Nie ma żadnych z góry zdefiniowanych reguł, ale można je łączyć w zależności od potrzeb i wymagań.
Na przykład musisz oznaczyć w zdaniu rzeczownik, czasownik (czas przeszły), przymiotnik i skrzyżowanie koordynujące. Możesz skorzystać z poniższej reguły
kawałek:{ * * * ?}
Poniższa tabela przedstawia znaczenie poszczególnych symboli:
Nazwa symbolu | OPIS |
---|---|
. | Dowolny znak z wyjątkiem nowej linii |
* | Dopasuj 0 lub więcej powtórzeń |
? | Dopasuj 0 lub 1 powtórzeń |
Napiszmy teraz kod, aby lepiej zrozumieć regułę
from nltk import pos_tag from nltk import RegexpParser text ="learn php from guru99 and make study easy".split() print("After Split:",text) tokens_tag = pos_tag(text) print("After Token:",tokens_tag) patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}""" chunker = RegexpParser(patterns) print("After Regex:",chunker) output = chunker.parse(tokens_tag) print("After Chunking",output)
Wyjście:
After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy'] After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')] After Regex: chunk.RegexpParser with 1 stages: RegexpChunkParser with 1 rules: <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'> After Chunking (S (mychunk learn/JJ) (mychunk php/NN) from/IN (mychunk guru99/NN and/CC) make/VB (mychunk study/NN easy/JJ))
Wniosek z powyższej części tagowania mowy Python przykład: „make” jest czasownikiem, który nie jest uwzględniony w regule, więc nie jest oznaczony jako mychunk
Użyj przypadku fragmentowania
Do wykrywania jednostek używa się fragmentowania. Byt to ta część zdania, za pomocą której maszyna uzyskuje wartość dla dowolnego zamiaru.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Innymi słowy, fragmentacja służy do wybierania podzbiorów tokenów. Postępuj zgodnie z poniższym kodem, aby zrozumieć, w jaki sposób fragmentacja jest używana do wybierania tokenów. W tym przykładzie zobaczysz wykres odpowiadający fragmentowi frazy rzeczownikowej. Napiszemy kod i narysujemy wykres dla lepszego zrozumienia.
Kod demonstrujący przypadek użycia
import nltk text = "learn php from guru99" tokens = nltk.word_tokenize(text) print(tokens) tag = nltk.pos_tag(tokens) print(tag) grammar = "NP: {<DT>?<JJ>*<NN>}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking
Wyjście:
['learn', 'php', 'from', 'guru99'] -- These are the tokens [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')] -- These are the pos_tag (S (NP learn/JJ php/NN) from/IN (NP guru99/NN)) -- Noun Phrase Chunking
Wykres
Z wykresu możemy wywnioskować, że „ucz się” i „guru99” to dwa różne tokeny, ale są klasyfikowane jako wyrażenie rzeczownikowe, podczas gdy token „z” nie należy do wyrażenia rzeczownikowego.
Dzielenie na kawałki służy do kategoryzowania różnych tokenów w tę samą porcję. Wynik będzie zależał od wybranej gramatyki. Dalsze dzielenie na części NLTK służy do oznaczania wzorców i eksplorowania korpusów tekstowych.
ZLICZANIE TAGI POS
Omówiliśmy różne poz_tag w poprzedniej sekcji. W tym konkretnym samouczku dowiesz się, jak liczyć te tagi. Liczenie tagów jest kluczowe dla klasyfikacji tekstu, a także przygotowania funkcji dla operacji opartych na języku naturalnym. Omówię z Tobą podejście, które guru99 zastosował podczas przygotowywania kodu, a także omówię dane wyjściowe. Mam nadzieję, że to Ci pomoże.
Jak liczyć
Tutaj najpierw napiszemy działający kod, a następnie napiszemy różne kroki wyjaśniające kod.
from collections import Counter import nltk text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online." lower_case = text.lower() tokens = nltk.word_tokenize(lower_case) tags = nltk.pos_tag(tokens) counts = Counter( tag for word, tag in tags) print(counts)
Wyjście:
Licznik({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , „DT”: 1, „JJS”: 1, „JJ”: 1, „JJR”: 1, „IN”: 1, „VB”: 1, „RB”: 1})
Opracowanie kodu
- Aby policzyć tagi, możesz użyć pakietu Counter z modułu kolekcji. Licznik jest podklasą słownika, która działa na zasadzie operacji klucz-wartość. Jest to nieuporządkowana kolekcja, w której elementy są przechowywane jako klucz słownika, a liczba jest ich wartością.
- Zaimportuj nltk, który zawiera moduły do tokenizacji tekstu.
- Wpisz tekst, którego pos_tag chcesz policzyć.
- Niektóre słowa są pisane wielkimi, a inne małymi literami, dlatego przed zastosowaniem tokenizacji należy przekształcić wszystkie słowa pisane małymi literami.
- Przekaż słowa przez word_tokenize z nltk.
- Oblicz pos_tag każdego tokena
Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
- Teraz przychodzi rola licznika słownikowego. Zaimportowaliśmy pierwszą linię kodu. Słowa są kluczem, a znaczniki wartością, a licznik będzie zliczał każdy znacznik obecny w tekście.
Dystrybucja częstotliwości
Rozkład częstotliwości określa się jako liczbę wystąpień wyniku eksperymentu. Służy do znalezienia częstotliwości każdego słowa występującego w dokumencie. To używa Klasa FreqDistclass i określone przez prawdopodobieństwo nltk moduł.
Rozkład częstotliwości tworzy się zwykle poprzez zliczenie próbek pochodzących z wielokrotnie przeprowadzanego eksperymentu. Za każdym razem liczba zliczeń jest zwiększana o jeden. Np
freq_dist = FreqDist()
dla tokena w dokumencie:
freq_dist.inc(token.type())
Dla dowolnego słowa możemy sprawdzić, ile razy wystąpiło w danym dokumencie. Np
- Metoda liczenia: freq_dist.count('and') To wyrażenie zwraca liczbę wystąpień 'i'. Nazywa się to metodą zliczania.
- Metoda częstotliwości: freq_dist.freq('and') To wyrażenie zwraca częstotliwość danej próbki.
Napiszemy mały program i szczegółowo wyjaśnimy jego działanie. Napiszemy jakiś tekst i obliczymy rozkład częstotliwości każdego słowa w tekście.
import nltk a = "Guru99 is the site where you can find the best tutorials for Software Testing Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please visit the site guru99.com and much more." words = nltk.tokenize.word_tokenize(a) fd = nltk.FreqDist(words) fd.plot()
Wyjaśnienie kodu:
- Zaimportuj moduł nltk.
- Napisz tekst, którego rozkład słów chcesz znaleźć.
- Tokenizuj każde słowo w tekście, które jest podawane jako dane wejściowe do modułu FreqDist nltk.
- Zastosuj każde słowo do nlk.FreqDist w formie listy
- Narysuj słowa na wykresie za pomocą funkcji plot()
Proszę zwizualizować wykres, aby lepiej zrozumieć pisany tekst
UWAGA: Aby zobaczyć powyższy wykres, musisz mieć zainstalowany matplotlib
Zwróć uwagę na powyższy wykres. Odpowiada to zliczaniu występowania każdego słowa w tekście. Pomaga w badaniu tekstu i dalej we wdrażaniu opartej na tekście analizy sentymentalnej. W skrócie można stwierdzić, że nltk posiada moduł zliczający występowanie każdego słowa w tekście, który pomaga w przygotowaniu statystyk cech języka naturalnego. Odgrywa znaczącą rolę w odnajdywaniu słów kluczowych w tekście. Możesz także wyodrębnić tekst z pliku PDF za pomocą bibliotek takich jak ekstrakt, PyPDF2 i przekazać tekst do nlk.FreqDist.
Kluczowym terminem jest „tokenizacja”. Po tokenizacji sprawdza każde słowo w danym akapicie lub dokumencie tekstowym, aby określić liczbę jego wystąpień. Nie potrzebujesz do tego zestawu narzędzi NLTK. Możesz to również zrobić, korzystając z własnych umiejętności programowania w Pythonie. Zestaw narzędzi NLTK zapewnia jedynie gotowy do użycia kod dla różnych operacji.
Liczenie każdego słowa może nie być zbyt przydatne. Zamiast tego należy skupić się na kolokacjach i bigramach, które dotyczą wielu słów w parze. Te pary identyfikują przydatne słowa kluczowe, aby lepiej zrozumieć cechy języka naturalnego, które można przekazać maszynie. Zapoznaj się z ich szczegółami poniżej.
Kolokacje: Biggramy i Trigramy
Co to jest kolokacje?
Kolokacje to pary słów występujące razem wiele razy w dokumencie. Oblicza się ją na podstawie liczby tych par występujących razem w stosunku do całkowitej liczby słów w dokumencie.
Rozważ widmo elektromagnetyczne za pomocą słów takich jak promienie ultrafioletowe, promienie podczerwone.
Słowa ultrafiolet i promienie nie są używane osobno i dlatego można je traktować jako kolokację. Innym przykładem jest tomografia komputerowa. Nie mówimy osobno o tomografii komputerowej i skanowaniu, dlatego też są one również traktowane jako kolokacja.
Można powiedzieć, że znalezienie kolokacji wymaga obliczenia częstości występowania słów i ich wyglądu w kontekście innych słów. Te konkretne zbiory słów wymagają filtrowania w celu zachowania przydatnych terminów. Każdy gram słów można następnie ocenić zgodnie z pewną miarą asocjacji, aby określić względne prawdopodobieństwo, że każdy Ingram jest kolokacją.
Kolokację można podzielić na dwa typy:
- Biggramy cpołączenie dwóch słów
- Trygramykombinacja trzech słów
Biggramy i Trigramy zapewniają bardziej znaczące i przydatne funkcje na etapie ekstrakcji cech. Są one szczególnie przydatne w tekstowej analizie sentymentalnej.
Przykładowy kod Biggramsa
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Wyjście:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Przykładowy kod trygramów
Czasami ważne jest, aby zobaczyć parę trzech słów w zdaniu w celu analizy statystycznej i obliczenia częstotliwości. To znowu odgrywa kluczową rolę w formowaniu NLP (funkcje przetwarzania języka naturalnego), a także oparte na tekście przewidywanie sentymentalne.
Ten sam kod jest uruchamiany do obliczania trygramów.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Wyjście:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Tagowanie zdań
Tagowanie zdania w szerszym znaczeniu odnosi się do dodawania etykiet czasownika, rzeczownika itp. w kontekście zdania. Identyfikacja tagów POS to skomplikowany proces. Zatem ogólne tagowanie POS nie jest możliwe ręcznie, ponieważ niektóre słowa mogą mieć różne (niejednoznaczne) znaczenia w zależności od struktury zdania. Konwersja tekstu do postaci listy jest ważnym krokiem przed dodaniem tagu, ponieważ każde słowo na liście jest zapętlone i zliczane dla konkretnego tagu. Aby lepiej go zrozumieć, spójrz na poniższy kod
import nltk text = "Hello Guru99, You have to build a very good site, and I love visiting your site." sentence = nltk.sent_tokenize(text) for sent in sentence: print(nltk.pos_tag(nltk.word_tokenize(sent)))
Wyjście:
[('Witam', 'NNP'), ('Guru99', 'NNP'), (',', ','), („Ty”, „PRP”), („masz”, „VBP”) , („kompilacja”, „VBN”), („a”, „DT”), („bardzo”, „RB”), („dobry”, „JJ”), („strona”, „NN”) , („i”, „CC”), („ja”, „PRP”), („miłość”, „VBP”), („odwiedziny”, „VBG”), („twój”, „PRP$” ), („strona”, „NN”), („.”, „.”)]
Wyjaśnienie kodu:
- Kod do importowania nltk (Zestaw narzędzi języka naturalnego, który zawiera podmoduły, takie jak tokenizacja zdań i tokenizacja słów).
- Tekst, którego tagi mają zostać wydrukowane.
- Tokenizacja zdań
- Zaimplementowano pętlę for, w której słowa są tokenizowane ze zdania, a znacznik każdego słowa jest drukowany jako wynik.
W Corpus istnieją dwa rodzaje tagerów POS:
- Oparte na regułach
- Stochastyczne tagery POS
1. Tagger POS oparty na regułach: W przypadku słów o niejednoznacznym znaczeniu stosuje się podejście oparte na regułach na podstawie informacji kontekstowych. Odbywa się to poprzez sprawdzenie lub analizę znaczenia poprzedniego lub następnego słowa. Informacje są analizowane z otoczenia słowa lub z jego wnętrza. Dlatego słowa są oznaczane według reguł gramatycznych danego języka, takich jak kapitalizacja i interpunkcja. np. tagger Brilla.
2. Stochastyczny tag POS: W ramach tej metody stosowane są różne podejścia, takie jak częstotliwość lub prawdopodobieństwo. Jeśli słowo jest najczęściej oznaczone konkretnym znacznikiem w zestawie szkoleniowym, wówczas w zdaniu testowym przypisany jest mu ten konkretny znacznik. Znacznik słowa jest zależny nie tylko od własnego znacznika, ale także od poprzedniego znacznika. Ta metoda nie zawsze jest dokładna. Innym sposobem jest obliczenie prawdopodobieństwa wystąpienia określonego znacznika w zdaniu. Zatem ostateczny znacznik jest obliczany poprzez sprawdzenie największego prawdopodobieństwa wystąpienia słowa z określonym znacznikiem.
Tagowanie punktów sprzedaży za pomocą ukrytego modelu Markowa
Problemy ze znakowaniem można również modelować za pomocą HMM. Traktuje tokeny wejściowe jako obserwowalną sekwencję, podczas gdy znaczniki są uważane za stany ukryte, a celem jest określenie sekwencji stanów ukrytych. Na przykład x = x1,x2,…………,Xn gdzie x jest sekwencją tokenów while y = y1,y2,y3,y4………tnjest ukrytą sekwencją.
Jak działa ukryty model Markowa (HMM)?
HMM wykorzystuje rozkład łączenia, który wynosi P(x, y), gdzie x to sekwencja wejściowa/sekwencja tokena, a y to sekwencja znaczników.
Sekwencja znaczników dla x będzie argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Na podstawie tekstu podzieliliśmy tagi na kategorie, ale statystyki takich tagów są istotne. Następną częścią jest liczenie tych tagów do badań statystycznych.
Podsumowanie
- Tagowanie POS NLTK to proces oznaczania słów w formacie tekstowym dla określonej części mowy w oparciu o jej definicję i kontekst.
- Niektóre przykłady tagowania NLTK POS to: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO itp.
- Tagger POS służy do przypisywania informacji gramatycznych każdemu słowu w zdaniu. Instalacja, importowanie i pobieranie wszystkich pakietów tagowania części mowy za pomocą NLTK zostało zakończone.
- Dzielenie na kawałki w NLP to proces polegający na pobieraniu małych fragmentów informacji i grupowaniu ich w duże jednostki.
- Nie ma żadnych z góry zdefiniowanych reguł, ale można je łączyć w zależności od potrzeb i wymagań.
- Do wykrywania jednostek używa się fragmentowania. Byt to ta część zdania, za pomocą której maszyna uzyskuje wartość dla dowolnego zamiaru.
- Dzielenie na kawałki służy do kategoryzowania różnych tokenów w tę samą porcję.