tak.lol
05 февраль 2025
6
0
Не нравится 0 Нравится

Библиотека 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: Извлечение именованных сущностей
Напиши программу, которая извлекает именованные сущности из заданного текста. Например, используй текст о каком-либо известном событии или личности и выведи найденные имена, организации и места.
Комментарии к материалу
Комментировать
Ваш комментарий: