Использование модуля «KoNLPy» для морфологического анализа и тегирования части речи

Прочитав эту статью, вы научитесь выполнять простые задачи обработки естественного языка, такие как морфологический анализ и тегирование частей речи для корейского языка в Python. Мы будем использовать модуль Python под названием KoNLPy. Основываясь на официальной документации, KoNLPy (произносится как ko en el PIE):

«… Это пакет Python для обработки естественного языка (NLP) корейского языка».

Этот модуль основан на следующих принципах:

  • Будь проще.
  • Делай проще. Для людей.
  • Демократия в Интернете работает, когда каждый может поделиться своими идеями и предложениями,

В этом руководстве есть 3 раздела:

  1. Настраивать
  2. Реализация
  3. Заключение

Переходим к следующему разделу и приступаем к установке необходимых модулей.

1. Настройка

Окна

Установка немного сложна, так как вам нужно убедиться, что вы установили Java версии 1.7. Перейдите по следующей ссылке, чтобы загрузить необходимый JDK для вашего компьютера.

JPype необходим для доступа к библиотекам классов Java из Python. Вам нужно будет установить правильный JPype в зависимости от вашей операционной системы и версии Python. Проверьте это с помощью следующего кода

python --version

Перейдите по следующей ссылке и скачайте соответствующий файл. Я буду использовать следующий файл, так как я запускаю Python3.7.4 на 64-разрядной машине Windows.

JPype1-0.7.2-cp37-cp37m-win_amd64.whl

Поместите файл в каталог и откройте терминал. Настоятельно рекомендуется заранее настроить виртуальную среду. Измените каталог на корневую папку, в которой находится файл колеса. Выполните следующую команду, чтобы установить его. Измените имя в соответствии с тем, что вы скачали.

pip install JPype1-0.5.7-cp27-none-win_amd64.whl

Продолжите установку koNLPy с помощью команды pip install.

pip install konlpy

Другие операционные системы

Если вы используете другие операционные системы, ознакомьтесь с официальной документацией, поскольку я лично ее не тестировал. Он поддерживает как Linux, так и MacOS, и установка намного проще.

Давайте перейдем к следующему разделу и начнем писать код Python.

2. Реализация

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

Я буду использовать Okt для этого урока, чтобы все было просто и легко. Начнем с добавления следующих объявлений импорта поверх вашего файла Python.

from konlpy.tag import Okt
from konlpy.utils import pprint

Я буду использовать следующий текст в качестве ввода. По-корейски это означает I am eating an apple. Надеюсь, я понял.

text = '나는 사과를 먹고있다'

Инициализировать класс как объект

okt = Okt()

После этого мы можем вызвать функции внутри него и распечатать результат с помощью класса pprint utils.

Имя существительное

Давайте попробуем извлечь существительные из предложений с помощью функции nouns

pprint(okt.nouns(text))

У вас должен получиться следующий результат.

['나', '사과']
  • — I
  • 사과 - яблоко

Морфы

Если вы хотите токенизировать предложения, вы можете использовать функцию morphs. Он принимает три входных параметра.

  • phrase - вводимый текст
  • norm - логическое значение указывает, следует ли нормализовать предложения
  • stem - логическое значение указывает, следует ли прекращать предложения. Основание - это процесс сокращения слов в предложении до их базовой или корневой формы.

Это можно назвать следующим образом:

pprint(okt.morphs(text, norm=True, stem=True))

Вы должны увидеть в консоли следующий вывод.

['나', '는', '사과', '를', '먹다']

Вы можете заметить, что слово 먹고있다 (есть) сокращается до 먹다 (есть).

  • — I
  • - частица
  • 사과 - яблоко
  • - частица
  • 먹다 - есть

Часть речевого тега

Функция pos полезна, если вы ищете часть речевого тега после процесса токенизации. В отличие от предыдущих функций, параметры внутри этой функции различаются в зависимости от используемого вами класса. Некоторые из классов имеют параметр flatten, который сохраняет eojeols, если установлено значение False. Класс Okt имеет следующие входные параметры.

  • phrase - вводимый текст
  • norm - логическое значение указывает, следует ли нормализовать предложения
  • stem - логическое значение указывает, следует ли прекращать предложения. Основание - это процесс сокращения слов в предложении до их базовой или корневой формы.
  • join - логическое значение указывает, следует ли возвращать объединенные наборы морфа и тега, разделенные знаком /.

Давайте проверим это с помощью следующего кода

pprint(okt.pos(text, norm=True, stem=True))

На консоли будет показан следующий результат.

[('나', 'Noun'), ('는', 'Josa'), ('사과', 'Noun'), ('를', 'Josa'), ('먹다', 'Verb')]

Измените предыдущую строку и установите для параметра join значение True.

pprint(okt.pos(text,norm=True, stem=True, join=True))

Теперь результат объединяется в один элемент, разделенный знаком /.

['나/Noun', '는/Josa', '사과/Noun', '를/Josa', '먹다/Verb']

3. Заключение

Подведем итоги тому, что мы узнали сегодня.

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

Затем мы подробно изучили функции, предоставляемые модулем koNLPy. Его можно использовать для извлечения существительных из входного предложения. Кроме того, вы также можете токенизировать его в отдельные слова. Вы можете настроить его так, чтобы на выходе была только основная форма слова.

Кроме того, мы также протестировали функцию pos, которая позволяет нам определять часть тега речи для корейского языка.

Спасибо, что прочитали эту статью. Надеюсь увидеть вас снова в следующей статье!

Ссылка

  1. KoNLP's Github
  2. Документация KoNLPy