Fragmenty i wyodrębnianie informacji

Co to jest Chunking?

Dzielenie, jeden z ważnych procesów w przetwarzaniu języka naturalnego, służy do identyfikacji części mowy (POS) i krótkich fraz. Innymi prostymi słowami, dzięki fragmentacji możemy uzyskać strukturę zdania. Nazywa się to równieżpartial parsing.

Wzory kawałków i szczeliny

Chunk patternsto wzorce znaczników części mowy (POS), które definiują, jakiego rodzaju słowa składają się na fragment. Możemy definiować wzorce porcji za pomocą zmodyfikowanych wyrażeń regularnych.

Co więcej, możemy również zdefiniować wzorce dla rodzaju słów, które nie powinny znajdować się w kawałku, a te nieposortowane słowa są znane jako chinks.

Przykład realizacji

W poniższym przykładzie, wraz z wynikiem analizy zdania “the book has many chapters”, istnieje gramatyka wyrażeń rzeczownikowych, która łączy w sobie zarówno fragment, jak i wzór szczeliny -

import nltk
sentence = [
   ("the", "DT"),
   ("book", "NN"),
   ("has","VBZ"),
   ("many","JJ"),
   ("chapters","NNS")
]
chunker = nltk.RegexpParser(
   r'''
   NP:{<DT><NN.*><.*>*<NN.*>}
   }<VB.*>{
   '''
)
chunker.parse(sentence)
Output = chunker.parse(sentence)
Output.draw()

Wynik

Jak widać powyżej, wzorzec określania fragmentu polega na użyciu nawiasów klamrowych w następujący sposób -

{<DT><NN>}

Aby określić szczelinę, możemy odwrócić klamry w następujący sposób -

}<VB>{.

Teraz, dla określonego typu frazy, reguły te można połączyć w jedną gramatykę.

Wydobywanie informacji

Przeszliśmy przez taggery i parsery, których można użyć do zbudowania silnika ekstrakcji informacji. Przyjrzyjmy się podstawowemu procesowi wydobywania informacji -

Ekstrakcja informacji ma wiele zastosowań, w tym -

  • Business Intelligence
  • Wznów zbiory
  • Analiza mediów
  • Wykrywanie nastrojów
  • Wyszukiwanie patentów
  • Skanowanie poczty e-mail

Rozpoznawanie nazwanych podmiotów (NER)

Rozpoznawanie nazwanych jednostek (NER) jest w rzeczywistości sposobem na wyodrębnienie niektórych z najbardziej powszechnych jednostek, takich jak nazwy, organizacje, lokalizacja itp. Zobaczmy przykład, który obejmował wszystkie etapy przetwarzania wstępnego, takie jak tokenizacja zdań, tagowanie POS, fragmentowanie, NER, i podąża za rurociągiem przedstawionym na powyższym rysunku.

Przykład

Import nltk
file = open (
   # provide here the absolute path for the file of text for which we want NER
)
data_text = file.read()
sentences = nltk.sent_tokenize(data_text)
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
for sent in tagged_sentences:
print nltk.ne_chunk(sent)

Niektóre ze zmodyfikowanych nazwanych jednostek rozpoznawania (NER) mogą być również używane do wyodrębniania jednostek, takich jak nazwy produktów, jednostki biomedyczne, marka i wiele innych.

Ekstrakcja relacji

Ekstrakcja relacji, inna powszechnie stosowana operacja wyodrębniania informacji, to proces wyodrębniania różnych relacji między różnymi podmiotami. Mogą istnieć różne relacje, takie jak dziedziczenie, synonimy, analogiczne itp., Których definicja zależy od potrzeb informacyjnych. Na przykład, przypuśćmy, że jeśli chcemy szukać zapisu książki, wówczas autorstwo będzie zależało od nazwiska autora i tytułu książki.

Przykład

W poniższym przykładzie używamy tego samego potoku IE, jak pokazano na powyższym diagramie, którego używaliśmy do relacji nazwanej jednostki (NER) i rozszerzamy go o wzorzec relacji oparty na tagach NER.

import nltk
import re
IN = re.compile(r'.*\bin\b(?!\b.+ing)')
for doc in nltk.corpus.ieer.parsed_docs('NYT_19980315'):
for rel in nltk.sem.extract_rels('ORG', 'LOC', doc, corpus = 'ieer',
pattern = IN):
print(nltk.sem.rtuple(rel))

Wynik

[ORG: 'WHYY'] 'in' [LOC: 'Philadelphia']
[ORG: 'McGlashan & Sarrail'] 'firm in' [LOC: 'San Mateo']
[ORG: 'Freedom Forum'] 'in' [LOC: 'Arlington']
[ORG: 'Brookings Institution'] ', the research group in' [LOC: 'Washington']
[ORG: 'Idealab'] ', a self-described business incubator based in' [LOC: 'Los Angeles']
[ORG: 'Open Text'] ', based in' [LOC: 'Waterloo']
[ORG: 'WGBH'] 'in' [LOC: 'Boston']
[ORG: 'Bastille Opera'] 'in' [LOC: 'Paris']
[ORG: 'Omnicom'] 'in' [LOC: 'New York']
[ORG: 'DDB Needham'] 'in' [LOC: 'New York']
[ORG: 'Kaplan Thaler Group'] 'in' [LOC: 'New York']
[ORG: 'BBDO South'] 'in' [LOC: 'Atlanta']
[ORG: 'Georgia-Pacific'] 'in' [LOC: 'Atlanta']

W powyższym kodzie użyliśmy wbudowanego korpusu o nazwie ieer. W tym korpusie zdania są tagowane do relacji nazwanych jednostek (NER). Tutaj musimy tylko określić wzorzec relacji, który chcemy, i rodzaj NER, który chcemy, aby relacja zdefiniowała. W naszym przykładzie zdefiniowaliśmy relację między organizacją a lokalizacją. Wyodrębniliśmy wszystkie kombinacje tych wzorów.