Python

Как извлечь предложения из текста с помощью модуля NLTK Python

Как извлечь предложения из текста с помощью модуля NLTK Python
The Natural Language Toolkit (NLTK) - это модуль языка и обработки текста для Python. NLTK может анализировать, обрабатывать и токенизировать текст, доступный на многих разных языках, используя встроенную библиотеку корпусов и большой пул лексических данных. Python - один из самых популярных языков программирования, используемых в науке о данных и обработке языков, в основном из-за универсальности языка и доступности полезных модулей, таких как NLTK. В этой статье объясняется, как извлекать предложения из абзацев текста с помощью NLTK. Код в этом руководстве был протестирован с Python 3.8.2 и НЛТК 3.4.5 в Ubuntu 20.04 LTS.

Установка NLTK в Linux

Чтобы установить NLTK в Ubuntu, выполните следующую команду:

$ sudo apt install python3-nltk

Пакеты NLTK доступны во всех основных дистрибутивах Linux. Найдите ключевое слово «NLTK» в диспетчере пакетов, чтобы установить пакеты. Если по какой-то причине NLTK недоступен в репозиториях вашего дистрибутива, вы можете установить его из диспетчера пакетов pip, выполнив следующую команду:

$ pip install --user -U nltk

Обратите внимание, что вам сначала нужно будет установить pip из диспетчера пакетов, чтобы указанная выше команда работала. В некоторых дистрибутивах он может называться pip3. Вы также можете следовать подробным инструкциям по установке, доступным на Официальный веб-сайт НЛТК.

Извлечение предложений из абзаца с помощью NLTK

Для абзацев без сложных знаков пунктуации и пробелов можно использовать встроенный токенизатор предложений NLTK, называемый «токенизатором пунктов», который поставляется с предварительно обученной моделью. Вы также можете использовать свои собственные обученные модели данных для токенизации текста в предложения. Пользовательские модели данных выходят за рамки этой статьи, поэтому в приведенном ниже коде будет использоваться встроенный токенизатор Punkt English. Чтобы загрузить файл ресурсов Punkt, выполните последовательно следующие три команды и дождитесь завершения загрузки:

$ python3
$ import nltk
$ nltk.скачать ('пункт')

В приведенном ниже примере кода будет использован абзац из «Приключений Алисы в стране чудес»:

импортировать nltk
para = "Либо колодец был очень глубоким, либо она падала очень медленно, так как она
много времени, когда она спускалась, чтобы осмотреться и задуматься, что происходит
случиться дальше. Сначала она попыталась посмотреть вниз и понять, к чему она приближается,
но было слишком темно, чтобы что-либо увидеть; затем она посмотрела на стены колодца и
заметил, что они заполнены шкафами и книжными полками; здесь и там она
видел карты и картинки, вешанные на колышки. Она сняла банку с одной из полок
как она прошла; на нем было написано «ОРАНЖЕВЫЙ МАРМАЛАД», но, к ее большому разочарованию, он
было пусто: она не любила ронять банку из боязни кого-то убить, поэтому умудрилась
положить его в один из шкафов, когда она упала мимо него."
токены = nltk.sent_tokenize (параграф)
для t в токенах:
print (t, "\ n")

Выполнение приведенного выше кода даст вам следующий результат:

Либо колодец был очень глубоким, либо она падала очень медленно, потому что у нее было достаточно времени, чтобы
она спустилась, чтобы осмотреться и задуматься, что же будет дальше.
Сначала она попыталась посмотреть вниз и разобрать, к чему идет, но было слишком темно
видеть что-нибудь; затем она посмотрела на стенки колодца и заметила, что они
заполнены шкафами и книжными полками; кое-где она видела карты и картинки висели
на колышках.
Проходя мимо, она сняла банку с одной из полок; он был помечен как "ORANGEMARMALADE",
но, к ее большому разочарованию, он был пуст: она не любила ронять кувшин из боязни
убил кого-то, поэтому ей удалось положить его в один из шкафов, когда она упала мимо него.

Встроенный токенизатор предложений Punkt хорошо работает, если вы хотите токенизировать простые абзацы. После импорта модуля NLTK все, что вам нужно сделать, это использовать метод sent_tokenize () для большого текстового корпуса. Однако токенизатор предложений Punkt может некорректно определять предложения, если есть сложный абзац, содержащий много знаков препинания, восклицательных знаков, сокращений или повторяющихся символов. Невозможно определить стандартный способ решения этих проблем. Вам нужно будет написать собственный код для решения этих проблем с использованием регулярных выражений, манипуляций со строками или путем обучения собственной модели данных вместо использования встроенной модели данных Punkt.

Вы также можете попробовать настроить существующую модель Punkt, чтобы исправить неправильную токенизацию, используя некоторые дополнительные параметры. Для этого следуйте официальной документации по токенизации Punkt здесь. Чтобы использовать свои собственные настройки, требуется небольшое изменение кода:

из НЛТК.токенизировать.punkt import PunktSentenceTokenizer, PunktParameters
para = "Либо колодец был очень глубоким, либо она падала очень медленно, потому что у нее было много
времени, когда она спускалась, чтобы осмотреться и задуматься о том, что должно было произойти
следующий. Сначала она попыталась посмотреть вниз и понять, к чему идет, но это было
слишком темно, чтобы что-либо увидеть; затем она посмотрела на стены колодца и заметила
что они были заполнены шкафами и книжными полками; кое-где она видела карты
и картинки висели на колышках. Она сняла банку с одной из полок, пока
прошедший; на нем было написано «ОРАНЖЕВЫЙ МАРМАЛАД», но, к ее большому разочарованию, это было
пустой: она не любила ронять банку из-за боязни кого-то убить, поэтому ей удалось
положила его в один из шкафов, когда она упала мимо него."
punkt_params = Параметры пункта ()
punkt_params.abbrev_types = set ([«Мистер», «Миссис», «ООО»])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizer.токенизировать (параграф)
для t в токенах:
print (t, "\ n")

Приведенный выше код выполняет ту же работу, что и метод sent_tokenize (). Однако теперь вы можете определять свои собственные правила с помощью встроенных методов и передавать их в качестве аргументов, как описано в документации. Например, в приведенный выше код были добавлены сокращения. Если после этих сокращений ставить знаки препинания, они не будут разбиты на новое предложение. Обычно точка или точка используются для обозначения конца предложения.

Заключение

NLTK и его методы токенизации достаточно эффективны при токенизации и обработке текстовых данных. Однако предварительно обученные модели могут не работать на 100% с разными типами текстов. Возможно, вам потребуется улучшить существующие модели, обучить и поставить свои собственные или написать собственный код для исправления аномалий.

SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...
0 А.D. Руководство
Из множества существующих стратегических игр 0 A.D. удается выделиться как всеобъемлющее название и очень глубокая тактическая игра, несмотря на то, ч...