Работа с обработкой естественного языка (NLP) и анализ текста произвольной формы требует наличия правильного набора инструментов. Это введение в основные инструменты Python Natural Language Toolkit (NLTK).

Понимая, как работают чат-боты и как NLP является частью этого, давайте рассмотрим примеры с Python NLTK.

Код, с которым мы будем работать, находится здесь.

Токенизация

Наш первый шаг в работе с текстом произвольной формы - это токенизация предложений в слова.

10 ['Jim', 'is', 'bringing', 'his', 'bulldog', 'to', 'eat', 'at', 'Friendlys', '?']

Затем полезно удалить стоп-слова, например «является», «его» и т. Д.

6 ['Jim', 'bringing', 'bulldog', 'eat', 'Friendlys', '?']

Вы можете легко удалить знаки препинания с помощью аналогичного подхода.

Стемминг

Наш следующий шаг - корень каждого слова.

jim
bring
bulldog
eat
friend

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

Пометка части речи

Наш следующий инструмент, который мы попробуем, - это часть речи (pos) tagger.

[('Jim', 'NNP'), ('bringing', 'VBG'), ('bulldog', 'JJ'), ('eat', 'NN'), ('Friendlys', 'NNP'), ('?', '.')] Nouns: [('eat', 'NN')]

Стандартный теггер для NLTK использует набор тегов Penn Treebank. Хотите знать, почему это называется Берег деревьев? Посмотреть здесь".

Теги, например. NNP, VBG перечислены и объяснены здесь.

Разбивка

Еще несколько сложных инструментов - это chunker и entity-extractor.

[('Jim', 'NNP', 'B-PERSON'), ('is', 'VBZ', 'O'), ('bringing', 'VBG', 'O'), ('his', 'PRP$', 'O'), ('bulldog', 'NN', 'O'), ('to', 'TO', 'O'), ('eat', 'VB', 'O'), ('at', 'IN', 'O'), ('Friendlys', 'NNP', 'B-ORGANIZATION'), ('?', '.', 'O')]
[('Friendlys', 'NNP', 'B-ORGANIZATION')]

Он правильно определил «бульдог» как существительное, «Джим» как личность и «Friendlys» как организацию.

Так же, как и с тегами части речи (pos), вам нужно обучить блокировку именованных сущностей. Это важно понимать: если вы извлекаете сущности, например, из юридического языка, вам необходимо обучить модель на юридическом корпусе (коллекции документов).

Данные обучения именованных сущностей должны соответствовать типу текста, который вы будете анализировать.

WordNet интерфейс

В состав НЛТК входит интерфейс к WordNet. Это предоставляет очень удобные утилиты, включая слова определения, синонимы и многое другое.

Мы можем легко найти определение существительного в нашем предложении: «бульдог»

('bulldog', 'NN', 'O')
a sturdy thickset short-haired breed with a large head and strong undershot lower jaw; developed originally in England for bull baiting

Мы можем использовать synset similarity (), чтобы узнать о корреляции между словами в общем смысле.

0.8387096774193549      # bulldog -> poodle
0.36363636363636365     # bulldog -> car
0.13333333333333333     # bulldog -> space

Обратите внимание, что «пудель» очень похож на «бульдога», а «автомобиль» - в гораздо меньшей степени. Очень непохожее слово - «пространство». Очевидно, что в большинстве случаев написания на английском языке эти два термина не встречаются вместе!

Мы можем использовать оценки сходства в подходах к классификации текстов мешком слов. При классификации текста с помощью нейронных сетей каждый входной нейрон несет матрицу NxM значений с плавающей запятой по отношению к каждому слову в сумке. Окончательная оценка сходства - ноль (0) или один (1), но часто полезны промежуточные значения: бульдог не совсем то же самое, что пудель, но в большинстве случаев он чертовски близок (не ноль).

Мы также можем искать списки синонимов и антонимов.

{'bulldog', 'English_bulldog'}      # synonymous to 'bulldog'
set()                               # no antonyms
{'rich', 'deep', 'ample', 'full-bodied', 'robust', 'plenteous', 'rich_people', 'fertile', 'productive', 'racy', 'copious', 'plentiful', 'fat'}                              # synonyms for 'rich'
{'poor_people', 'poor', 'lean'}     # antonyms for 'rich'

WordNet знает, что «английский бульдог» является синонимом «бульдога», и знает, что «бедный» является антонимом «богатому». Обратите внимание, что в нем нет антонима для нашего существительного, поскольку это не имело бы смысла.

Используя эти важные инструменты, вы можете анализировать текст произвольной формы и начинать разбирать его. Это отправная точка для аналитики, классификации и т. Д.

Для дальнейшего изучения обратитесь к Книге НЛТК.

Для более глубокого погружения в классификацию текста с помощью Наивного Байеса см. Здесь, для нейронных сетей см. Здесь, обе с использованием NLTK.

Наслаждайтесь!