Разделение на части и извлечение информации

Что такое дробление?

Разделение на части, один из важных процессов обработки естественного языка, используется для идентификации частей речи (POS) и коротких фраз. Другими простыми словами, разбивая на части, мы можем получить структуру предложения. Его еще называютpartial parsing.

Образцы чанков и щели

Chunk patternsпредставляют собой шаблоны тегов части речи (POS), которые определяют, какие слова составляют фрагмент. Мы можем определять шаблоны фрагментов с помощью модифицированных регулярных выражений.

Более того, мы также можем определить шаблоны того, какие слова не должны быть в блоке, и эти несвязанные слова известны как chinks.

Пример реализации

В приведенном ниже примере вместе с результатом синтаксического анализа предложения “the book has many chapters”, есть грамматика для словосочетаний существительных, которая сочетает в себе как фрагмент, так и образец фрагмента -

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()

Вывод

Как видно выше, шаблон для указания фрагмента заключается в использовании фигурных скобок следующим образом:

{<DT><NN>}

И чтобы указать щель, мы можем перевернуть фигурные скобки следующим образом:

}<VB>{.

Теперь для конкретного типа фразы эти правила можно объединить в грамматику.

Извлечение информации

Мы рассмотрели тегеры, а также парсеры, которые можно использовать для создания механизма извлечения информации. Давайте посмотрим на основной конвейер извлечения информации -

Извлечение информации имеет множество приложений, в том числе -

  • Бизнес-аналитика
  • Возобновить сбор урожая
  • Анализ СМИ
  • Обнаружение настроения
  • Патентный поиск
  • Сканирование электронной почты

Признание зарегистрированного лица (NER)

Распознавание именованных сущностей (NER) на самом деле является способом извлечения некоторых из наиболее распространенных сущностей, таких как имена, организации, местоположение и т.д. и следует конвейеру, показанному на рисунке выше.

пример

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)

Некоторые из модифицированных функций распознавания именованных сущностей (NER) также могут использоваться для извлечения таких сущностей, как названия продуктов, биомедицинские объекты, торговая марка и многое другое.

Извлечение отношений

Извлечение отношений, еще одна широко используемая операция извлечения информации, представляет собой процесс извлечения различных взаимосвязей между различными объектами. Могут быть разные отношения, такие как наследование, синонимы, аналогия и т. Д., Определение которых зависит от потребности в информации. Например, предположим, что если мы хотим найти написание книги, то авторство будет соотношением между именем автора и названием книги.

пример

В следующем примере мы используем тот же конвейер IE, как показано на приведенной выше диаграмме, который мы использовали до отношения именованных сущностей (NER), и расширяем его шаблоном отношения на основе тегов 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))

Вывод

[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']

В приведенном выше коде мы использовали встроенный корпус с именем ieer. В этом корпусе предложения помечены до отношения именованный объект (NER). Здесь нам нужно только указать шаблон отношения, который мы хотим, и тип NER, который мы хотим, чтобы отношение определяло. В нашем примере мы определили отношения между организацией и местоположением. Мы извлекли все комбинации этих паттернов.