Zestaw narzędzi języka naturalnego - analiza

Parsowanie i jego znaczenie w NLP

Słowo „Parsing”, które pochodzi od łacińskiego słowa ‘pars’ (co znaczy ‘part’), służy do wyrysowania z tekstu dokładnego znaczenia lub znaczenia słownikowego. Nazywa się to również analizą syntaktyczną lub analizą składniową. Porównując reguły gramatyki formalnej, analiza składniowa sprawdza tekst pod kątem sensowności. Na przykład zdanie typu „Daj mi gorące lody” zostanie odrzucone przez parser lub analizator składni.

W tym sensie możemy zdefiniować analizę składniową lub analizę składniową lub analizę składni w następujący sposób -

Można go zdefiniować jako proces analizy ciągów symboli w języku naturalnym zgodnie z regułami gramatyki formalnej.

Możemy zrozumieć znaczenie parsowania w NLP za pomocą następujących punktów -

  • Parser służy do zgłaszania wszelkich błędów składniowych.

  • Pomaga w naprawie po często występującym błędzie, dzięki czemu przetwarzanie pozostałej części programu może być kontynuowane.

  • Drzewo parsowania jest tworzone przy pomocy parsera.

  • Parser służy do tworzenia tablicy symboli, która odgrywa ważną rolę w NLP.

  • Parser jest również używany do tworzenia reprezentacji pośrednich (IR).

Analiza głęboka kontra płytka

Głębokie analizowanie Płytkie analizowanie
Podczas głębokiego analizowania strategia wyszukiwania nada zdaniu pełną strukturę składniową. Jest to zadanie polegające na przeanalizowaniu ograniczonej części informacji składniowych z danego zadania.
Nadaje się do złożonych aplikacji NLP. Może być używany do mniej złożonych aplikacji NLP.
Systemy dialogu i podsumowania to przykłady aplikacji NLP, w których stosuje się głębokie analizowanie. Ekstrakcja informacji i eksploracja tekstu to przykłady aplikacji NLP, w których stosuje się głębokie analizowanie.
Nazywa się to również pełnym analizowaniem. Nazywa się to również kruszeniem.

Różne typy parserów

Jak już wspomniano, parser jest w zasadzie proceduralną interpretacją gramatyki. Wyszukuje optymalne drzewo dla danego zdania po przeszukaniu przestrzeni różnych drzew. Zobaczmy poniżej niektóre z dostępnych parserów -

Parser zstępowania rekurencyjnego

Rekurencyjne analizowanie zstępujące jest jedną z najprostszych form analizowania. Oto kilka ważnych punktów dotyczących parsera zejścia rekurencyjnego:

  • Jest to proces odgórny.

  • Próbuje zweryfikować, czy składnia strumienia wejściowego jest poprawna, czy nie.

  • Odczytuje zdanie wejściowe od lewej do prawej.

  • Jedną konieczną operacją dla parsera zejścia rekurencyjnego jest odczytanie znaków ze strumienia wejściowego i dopasowanie ich do terminali z gramatyki.

Parser z redukcją zmiany biegów

Poniżej znajduje się kilka ważnych punktów dotyczących parsera redukcji przesunięcia -

  • Jest to prosty proces oddolny.

  • Próbuje znaleźć sekwencję słów i wyrażeń, które odpowiadają prawej stronie produkcji gramatycznej i zastępuje je lewą stroną produkcji.

  • Powyższa próba znalezienia sekwencji słów trwa aż do skrócenia całego zdania.

  • Innymi prostymi słowami, parser z przesunięciem i redukcją zaczyna od symbolu wejściowego i próbuje skonstruować drzewo parsera aż do symbolu początkowego.

Parser wykresów

Oto kilka ważnych punktów dotyczących parsera wykresów -

  • Przydaje się głównie lub nadaje się do niejednoznacznych gramatyk, w tym gramatyk języków naturalnych.

  • Stosuje programowanie dynamiczne do problemów z analizą.

  • Ze względu na programowanie dynamiczne, hipotetyczne wyniki częściowe są przechowywane w strukturze zwanej „wykresem”.

  • „Wykres” można również wykorzystać ponownie.

Parser Regexp

Analiza Regexp jest jedną z najczęściej używanych technik analizy. Oto kilka ważnych punktów dotyczących parsera Regexp -

  • Jak sama nazwa wskazuje, używa wyrażenia regularnego zdefiniowanego w formie gramatyki na napisie ze znacznikiem POS.

  • Zasadniczo używa tych wyrażeń regularnych do analizowania zdań wejściowych i generowania z tego drzewa parsowania.

Przykład

Poniżej znajduje się działający przykład parsera Regexp -

import nltk
sentence = [
   ("a", "DT"),
   ("clever", "JJ"),
   ("fox","NN"),
   ("was","VBP"),
   ("jumping","VBP"),
   ("over","IN"),
   ("the","DT"),
   ("wall","NN")
]
grammar = "NP:{<DT>?<JJ>*<NN>}" 
Reg_parser = nltk.RegexpParser(grammar)
Reg_parser.parse(sentence)
Output = Reg_parser.parse(sentence)
Output.draw()

Wynik

Analiza zależności

Analiza zależności (DP), nowoczesny mechanizm analizy, którego główną koncepcją jest to, że każda jednostka językowa, tj. Słowa, są ze sobą powiązane poprzez bezpośrednie łącze. Te bezpośrednie linki są w rzeczywistości‘dependencies’w języku. Na przykład poniższy diagram przedstawia gramatykę zależności dla zdania“John can hit the ball”.

Pakiet NLTK

Mamy dwa sposoby wykonywania analizy zależności za pomocą NLTK -

Parser zależności probabilistycznej, rzutowej

To pierwszy sposób, w jaki możemy przeprowadzić analizę zależności za pomocą NLTK. Ale ten parser ma ograniczenie uczenia się z ograniczonym zestawem danych uczących.

Parser Stanford

To kolejny sposób, w jaki możemy przeprowadzić analizę zależności za pomocą NLTK. Stanford parser to najnowocześniejszy parser zależności. NLTK ma otokę. Aby z niego skorzystać, musimy pobrać następujące dwie rzeczy -

Parser Stanford CoreNLP .

Model językowy dla żądanego języka. Na przykład model języka angielskiego.

Przykład

Po pobraniu modelu możemy go używać przez NLTK w następujący sposób -

from nltk.parse.stanford import StanfordDependencyParser
path_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dep_parser = StanfordDependencyParser(
   path_to_jar = path_jar, path_to_models_jar = path_models_jar
)
result = dep_parser.raw_parse('I shot an elephant in my sleep')
depndency = result.next()
list(dependency.triples())

Wynik

[
   ((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
   ((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
   ((u'elephant', u'NN'), u'det', (u'an', u'DT')),
   ((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
   ((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
   ((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))
]