Статьи

Представляем инструментарий естественного языка (NLTK)

Обработка естественного языка (NLP) — это автоматическая или полуавтоматическая обработка человеческого языка. НЛП тесно связана с лингвистикой и имеет связи с исследованиями в области когнитивных наук, психологии, физиологии и математики. В частности, в области компьютерных наук НЛП связан с методами компиляции, теорией формального языка, взаимодействием человека с компьютером, машинным обучением и доказательством теорем. Этот вопрос Quora показывает различные преимущества НЛП .

В этом уроке я познакомлю вас с интересной платформой Python для NLP, которая называется Natural Language Toolkit (NLTK). Прежде чем мы увидим, как работать с этой платформой, позвольте мне сначала рассказать вам, что такое NLTK.

Natural Language Toolkit (NLTK) — это платформа, используемая для создания программ для анализа текста. Изначально платформа была выпущена Стивеном Бердом и Эдвардом Лопером в сочетании с курсом компьютерной лингвистики в Университете Пенсильвании в 2001 году. Для платформы есть сопроводительная книга под названием « Обработка естественного языка с Python» .

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

Установка NLTK очень проста. Я использую Windows 10, поэтому в командной строке ( MS-DOS ) я набираю следующую команду:

1
pip install nltk

Если вы используете Ubuntu или macOS, вы запускаете команду из Terminal . Более подробную информацию об установке NLTK на разных платформах можно найти в документации .

Если вам интересно, что такое pip , это система управления пакетами, используемая для установки и управления программными пакетами, написанными на Python. Если вы используете Python 2> = 2.7.9 или Python 3> = 3.4, у вас уже установлен pip ! Чтобы проверить версию Python, просто введите в командной строке следующую команду:

1
python —version

Давайте проверим, успешно ли мы установили NLTK. Чтобы сделать это, откройте Python IDLE и введите две строки, показанные на рисунке ниже:

Проверьте, успешно ли мы установили NLTK

Если вы вернули версию вашего NLTK, то поздравляем, вы успешно установили NLTK!

Итак, что мы сделали на предыдущем шаге, так это то, что мы установили NLTK из индекса (pip) пакета Python локально в нашу виртуальную среду.

Обратите внимание, что у вас может быть другая версия NLTK в зависимости от того, когда вы установили платформу, но это не должно вызывать проблем.

Первое, что нам нужно сделать для работы с NLTK, это загрузить то, что называется NLTK corpora . Я собираюсь загрузить всю корпорацию. Я знаю, что он очень большой (10,9 ГБ), но мы собираемся сделать это только один раз. Если вы знаете, какие корпуса вам нужны, вам не нужно загружать все корпуса.

В IDLE вашего Python введите следующее:

1
2
import nltk
nltk.download()

В этом случае вы получите графический интерфейс, из которого вы можете указать место назначения и то, что загружать, как показано на рисунке ниже:

GUI, из которого вы можете указать пункт назначения

Я собираюсь загрузить все на этом этапе. Нажмите кнопку « Скачать» в левом нижнем углу окна и подождите некоторое время, пока все не будет загружено в каталог назначения.

Прежде чем двигаться вперед, вы можете спросить, что такое корпус (единственное число из корпусов). Корпус может быть определен следующим образом:

Корпус, множественное число корпусов; Коллекция лингвистических данных, составленная в виде письменных текстов или в виде транскрипции записанной речи. Основная цель корпуса — проверить гипотезу о языке — например, определить, как меняется использование конкретного звука, слова или синтаксической конструкции. Корпус лингвистики занимается принципами и практикой использования корпусов в изучении языка. Компьютерный корпус — это большое количество машиночитаемых текстов.

(Кристал, Дэвид. 1992. Энциклопедический словарь языка и языков. Оксфорд: Блэквелл.)

Таким образом, текстовый корпус — это просто любой большой объем текста.

Иногда нам нужно отфильтровать ненужные данные, чтобы сделать данные более понятными для компьютера. В обработке естественного языка (NLP) такие бесполезные данные (слова) называются стоп-словами . Итак, эти слова для нас не имеют смысла, и мы хотели бы их убрать.

NLTK дает нам несколько стоп-слов для начала. Чтобы увидеть эти слова, используйте следующий скрипт:

1
2
from nltk.corpus import stopwords
print(set(stopwords.words(‘English’)))

В этом случае вы получите следующий вывод:

Выход из НЛТК

Мы сделали то, что распечатали набор (неупорядоченный набор элементов) стоп-слов английского языка.

Как мы можем удалить стоп-слова из нашего собственного текста? Пример ниже показывает, как мы можем выполнить эту задачу:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
 
text = ‘In this tutorial, I\’m learning NLTK.
stop_words = set(stopwords.words(‘english’))
words = word_tokenize(text)
 
new_sentence = []
 
for word in words:
    if word not in stop_words:
        new_sentence.append(word)
 
print(new_sentence)

Вывод вышеприведенного скрипта:

Результирующий вывод скрипта

Токенизация, как определено в Википедии , это:

Процесс разбиения потока текста на слова, фразы, символы или другие значимые элементы, называемые токенами.

Итак, что word_tokenize() функция word_tokenize() :

Маркировать строку, чтобы отделить знаки препинания, кроме точек

Допустим, у нас есть следующий текстовый файл (загрузите текстовый файл из Dropbox ). Мы хотели бы искать (искать) слово language . Мы можем просто сделать это, используя платформу NLTK, следующим образом:

1
2
3
4
5
6
7
import nltk
 
file = open(‘NLTK.txt’, ‘r’)
read_file = file.read()
text = nltk.Text(nltk.word_tokenize(read_file))
 
match = text.concordance(‘language’)

В этом случае вы получите следующий вывод:

В поисках слова язык

Обратите внимание, что concordance() возвращает каждое вхождение слова language , в дополнение к некоторому контексту. Перед этим, как показано в приведенном выше сценарии, мы токенизируем прочитанный файл, а затем преобразуем его в объект nltk.Text .

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

1
2
3
4
5
6
7
8
9
File «test.py», line 7, in <module>
    match = text.concordance(‘language’).decode(‘utf-8’)
  File «C:\Python35\lib\site-packages\nltk\text.py», line 334, in concordance
    self._concordance_index.print_concordance(word, width, lines)
  File «C:\Python35\lib\site-packages\nltk\text.py», line 200, in print_concordance
    print(left, self._tokens[i], right)
  File «C:\Python35\lib\encodings\cp437.py», line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: ‘charmap’ codec can’t encode character ‘\u2014’ in position 11: character maps to <undefined>

Я просто решил эту проблему, выполнив эту команду в консоли перед запуском программы: chcp 65001 .

Как уже упоминалось в Википедии :

Project Gutenberg (PG) — это волонтерская работа по оцифровке и архивированию культурных произведений, чтобы «стимулировать создание и распространение электронных книг». Он был основан в 1971 году Майклом С. Хартом и является старейшей цифровой библиотекой. Большинство предметов в его коллекции — полные тексты книг общественного достояния. Проект пытается сделать их максимально свободными, в длительных открытых форматах, которые можно использовать практически на любом компьютере. По состоянию на 3 октября 2015 года Project Gutenberg насчитывал 50 000 предметов в своей коллекции.

NLTK содержит небольшую подборку текстов из проекта Гутенберга . Чтобы увидеть включенные файлы из Project Gutenberg, мы делаем следующее:

1
2
3
4
import nltk
 
gutenberg_files = nltk.corpus.gutenberg.fileids()
print(gutenberg_files)

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

Вывод вышеуказанного скрипта

Если мы хотим найти, например, количество слов для текстового файла bryant-stories.txt , мы можем сделать следующее:

1
2
3
4
import nltk
 
bryant_words = nltk.corpus.gutenberg.words(‘bryant-stories.txt’)
print(len(bryant_words))

Приведенный выше скрипт должен вернуть следующее количество слов: 55563 .

Как мы видели в этом руководстве, платформа NLTK предоставляет нам мощный инструмент для работы с обработкой естественного языка (NLP). Я только поцарапал поверхность в этом уроке. Если вы хотите углубиться в использование NLTK для различных задач NLP, вы можете обратиться к сопроводительной книге NLTK: Обработка естественного языка с Python .