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

Давай погрузимся в мир обработки естественного языка с помощью библиотеки NLTK. Это как швейцарский нож для программистов, которые хотят работать с текстами. Звучит интересно? Давай начнем!
Основные функции NLTK
1. Токенизация:
• nltk.word_tokenize(text) — разбивает текст на отдельные слова (токены).
• nltk.sent_tokenize(text) — разбивает текст на предложения.
2. Стоп-слова:
• nltk.corpus.stopwords.words('language') — позволяет получить список стоп-слов для указанного языка (например, английского, русского и т.д.).
3. Лемматизация:
• nltk.stem.WordNetLemmatizer() — класс для лемматизации слов, который приводит слова к их базовой форме.
4. Стемминг:
• nltk.stem.PorterStemmer() — класс для стемминга, который обрезает окончания слов для получения их корневой формы.
5. Часть речи (POS) теггинг:
• nltk.pos_tag(tokens) — присваивает каждой токенизированной единице часть речи.
6. Частотное распределение:
• nltk.FreqDist(tokens) — создает частотное распределение токенов, позволяя анализировать, как часто встречаются слова в тексте.
7. N-граммы:
• nltk.ngrams(tokens, n) — генерирует n-граммы из списка токенов, что полезно для анализа последовательностей слов.
8. Синтаксический разбор:
• nltk.ChartParser(grammar) — позволяет выполнять синтаксический разбор предложений на основе заданной грамматики.
9. Named Entity Recognition (NER):
• nltk.chunk.ne_chunk(tagged_tokens) — извлекает именованные сущности из текста (например, имена людей, организации и т.д.).
10. Корпус и ресурсы:
• nltk.corpus — доступ к различным корпусам текстов и лексическим ресурсам (например, WordNet).
11. Семантический анализ:
• nltk.sem — инструменты для выполнения семантического анализа текста.
12. Сравнение текстов:
• nltk.edit_distance(s1, s2) — вычисляет расстояние редактирования между двумя строками, что может быть полезно для сравнения текстов.
Токенизация: Разделяем текст на кусочки
Первое, что нам нужно сделать, это токенизация. Это процесс, когда мы разбиваем текст на отдельные слова или предложения. Представь, что ты разбираешь шоколадный торт на кусочки — точно так же мы разбираем текст!
Вот как это делается в NLTK:
import nltk
from nltk.tokenize import wordtokenize, senttokenize
text = "Привет, как дела? Надеюсь, у тебя все хорошо."
sentences = sent_tokenize(text)
words = word_tokenize(text)
print("Предложения:", sentences)
print("Слова:", words)
Теперь у нас есть список предложений и слов. Какой вкусный торт!
Стемминг и лемматизация: Приводим слова к норме
Следующий шаг — стемминг и лемматизация. Это звучит как магия, но на самом деле это просто способ привести слова к их базовым формам. Стемминг отсекает окончания слов, а лемматизация использует словари для нахождения правильной формы.
Пример стемминга:
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
print(stemmer.stem("running")) # run
print(stemmer.stem("better")) # better
А теперь лемматизация:
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("better", pos="a")) # good
Как видишь, стемминг может быть не таким точным, как лемматизация. Но иногда нам нужно просто "приблизиться" к сути!
Частеречная разметка: Кто есть кто?
Теперь давай поговорим о частеречной разметке (POS tagging). Это способ определить, какая часть речи у каждого слова в предложении. Это как раздать роли в театре — кто-то будет актером, кто-то — режиссером!
Вот пример:
from nltk import pos_tag
words = word_tokenize("Собака лает на прохожего.")
taggedwords = postag(words)
print("Частеречная разметка:", tagged_words)
Здесь мы видим, что "Собака" — это существительное, а "лает" — глагол. Теперь мы знаем, кто за что отвечает!
Синтаксический анализ: Строим деревья
Синтаксический анализ помогает нам понять структуру предложения. Представь себе дерево, где корень — это главное предложение, а ветви — его части.
Вот как это делается:
from nltk import CFG
from nltk.parse import ChartParser
grammar = CFG.fromstring("""
S -> NP VP
VP -> V NP
V -> "смотрит" | "лает"
NP -> "Собака" | "прохожий"
""")
parser = ChartParser(grammar)
for tree in parser.parse("Собака смотрит на прохожего".split()):
print(tree)
tree.pretty_print()
Теперь у нас есть дерево! Это помогает понять, как части предложения связаны друг с другом.
Извлечение именованных сущностей: Находим важное
Именованные сущности (NER) — это способ выявления имен людей, организаций и мест. Это как искать сокровища в тексте!
Пример использования NER:
from nltk import ne_chunk
sentence = "Барack Obama был президентом США."
entities = nechunk(postag(word_tokenize(sentence)))
print(entities)
Здесь мы видим, что "Barack Obama" — это человек, а "США" — это место. Мы нашли сокровища!
Корпуса и словари: Библиотека знаний
NLTK также предоставляет доступ к различным корпусам текстов и словарям. Это как библиотека, где ты можешь найти все необходимое для своих проектов.
Вот как получить текст из корпуса:
from nltk.corpus import gutenberg
text = gutenberg.raw('austen-emma.txt')
print(text[:1000]) # Печатаем первые 1000 символов
Ты можешь использовать эти тексты для анализа или обучения своих моделей!
Заключение: Время практиковаться!
Теперь ты знаешь основы работы с NLTK! Это мощный инструмент для обработки естественного языка. Попробуй поэкспериментировать с примерами и создавай свои собственные проекты. Помни: практика делает мастера!
И не забывай улыбаться, когда работаешь с текстами — ведь каждый текст может рассказать свою уникальную историю!
Задания для закрепления материала
Задача 1: Токенизация текста
Напиши программу, которая принимает на вход текст и разбивает его на предложения и слова. Выведи на экран количество предложений и слов в тексте.
Задача 2: Стемминг и лемматизация
Создай список из нескольких слов (например, "бег", "бегущий", "лучший"). Напиши функцию, которая применяет стемминг и лемматизацию к каждому слову и выводит результаты на экран.
Задача 3: Частеречная разметка
Напиши программу, которая принимает на вход предложение на русском языке и выводит каждое слово с его частью речи. Используй функцию частеречной разметки из библиотеки NLTK.
Задача 4: Синтаксический анализ
Создай грамматику для простого предложения (например, "Кошка ловит мышь") и реализуй синтаксический анализ этого предложения. Выведи дерево синтаксического разбора.
Задача 5: Извлечение именованных сущностей
Напиши программу, которая извлекает именованные сущности из заданного текста. Например, используй текст о каком-либо известном событии или личности и выведи найденные имена, организации и места.