Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Застосування Попередньої Обробки Тексту на Практиці | Основи Попередньої Обробки Тексту
Вступ до NLP з Python

Застосування Попередньої Обробки Тексту на Практиці

Свайпніть щоб показати меню

Документи

Перш ніж перейти до практичного прикладу попередньої обробки тексту, важливо зрозуміти ключові складові текстового корпусу: документи.

Note
Визначення

Документ — це окремий фрагмент тексту в межах корпусу, наприклад, електронний лист у корпусі листів.

Фактично, кожен текстовий корпус — це набір документів, тому попередня обробка корпусу означає попередню обробку кожного з документів.

Завантаження корпусу

Раніше наш текстовий корпус зберігався у вигляді рядкових змінних. Однак у реальних сценаріях текстовий корпус часто зберігається у файлах TXT для суто текстових даних або у файлах CSV з кількома стовпцями, якщо до тексту додаються додаткові дані.

У цьому курсі ми працюватимемо або з файлами CSV, або з файлами TXT, де кожен документ починається з нового рядка. Тому для завантаження текстового корпусу з файлу скористаємося функцією read_csv() з бібліотеки pandas.

123456
import pandas as pd corpus = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_1/chapter_8/example_corpus.txt', sep='\r', header=None, names=['Document']) print(corpus)

Тут ми зчитуємо цей TXT-файл у DataFrame. Ми встановлюємо sep='\r', щоб використовувати символ повернення каретки як роздільник, що означає початок кожного документа з нового рядка. Використовуємо header=None, щоб перший рядок не вважався заголовком, і вказуємо names=['Document'], щоб назвати єдиний стовпець 'Document'. У результаті отримаємо DataFrame з одним стовпцем 'Document', який містить 6 документів (речень).

Передобробка корпусу

Щоб виконати передобробку корпусу, спочатку створимо функцію для передобробки кожного з документів:

123456789101112131415161718
import re from nltk.tokenize import word_tokenize from nltk.corpus import stopwords import nltk nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) def preprocess_document(doc): doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A) doc = doc.lower() doc = doc.strip() tokens = word_tokenize(doc) filtered_tokens = [token for token in tokens if token not in stop_words] doc = ' '.join(filtered_tokens) return doc
Опис коду
expand arrow
def preprocess_document(doc):

Визначає функцію preprocess_document, яка приймає один рядок (документ) doc як вхідний параметр.

doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A)

Видаляє з doc всі символи, крім алфавітних символів та пробілів, роблячи операцію нечутливою до регістру та лише для ASCII.

doc = doc.lower()

Перетворює документ у нижній регістр для забезпечення однакового оброблення регістру.

doc = doc.strip()

Видаляє початкові та кінцеві пробіли з документа.

tokens = word_tokenize(doc)

Токенізує очищений, приведений до нижнього регістру документ на окремі слова (токени).

filtered_tokens = [token for token in tokens if token not in stop_words]

Видаляє стоп-слова.

doc = ' '.join(filtered_tokens)

Об'єднує відфільтровані токени назад у єдиний рядок, розділений пробілами.

return doc

Повертає передоброблений документ як один рядок.

Тепер застосуємо цю функцію до нашого DataFrame для кожного документа та створимо стовпець із очищеними документами:

123456789101112131415161718192021222324252627
import re from nltk.tokenize import word_tokenize from nltk.corpus import stopwords import nltk import pandas as pd nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) def preprocess_document(doc): doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A) doc = doc.lower() doc = doc.strip() tokens = word_tokenize(doc) filtered_tokens = [token for token in tokens if token not in stop_words] doc = ' '.join(filtered_tokens) return doc corpus = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_1/chapter_8/example_corpus.txt', sep='\r', header=None, names=['Document']) corpus['Cleaned_Document'] = corpus['Document'].apply(preprocess_document) print(corpus)

Як бачимо, наш корпус успішно попередньо оброблений, тому надалі в курсі ми будемо використовувати саме цю версію корпусу.

question mark

Виберіть правильний результат виконання наступного фрагмента коду.

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 9

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Застосування Попередньої Обробки Тексту на Практиці

Документи

Перш ніж перейти до практичного прикладу попередньої обробки тексту, важливо зрозуміти ключові складові текстового корпусу: документи.

Note
Визначення

Документ — це окремий фрагмент тексту в межах корпусу, наприклад, електронний лист у корпусі листів.

Фактично, кожен текстовий корпус — це набір документів, тому попередня обробка корпусу означає попередню обробку кожного з документів.

Завантаження корпусу

Раніше наш текстовий корпус зберігався у вигляді рядкових змінних. Однак у реальних сценаріях текстовий корпус часто зберігається у файлах TXT для суто текстових даних або у файлах CSV з кількома стовпцями, якщо до тексту додаються додаткові дані.

У цьому курсі ми працюватимемо або з файлами CSV, або з файлами TXT, де кожен документ починається з нового рядка. Тому для завантаження текстового корпусу з файлу скористаємося функцією read_csv() з бібліотеки pandas.

123456
import pandas as pd corpus = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_1/chapter_8/example_corpus.txt', sep='\r', header=None, names=['Document']) print(corpus)

Тут ми зчитуємо цей TXT-файл у DataFrame. Ми встановлюємо sep='\r', щоб використовувати символ повернення каретки як роздільник, що означає початок кожного документа з нового рядка. Використовуємо header=None, щоб перший рядок не вважався заголовком, і вказуємо names=['Document'], щоб назвати єдиний стовпець 'Document'. У результаті отримаємо DataFrame з одним стовпцем 'Document', який містить 6 документів (речень).

Передобробка корпусу

Щоб виконати передобробку корпусу, спочатку створимо функцію для передобробки кожного з документів:

123456789101112131415161718
import re from nltk.tokenize import word_tokenize from nltk.corpus import stopwords import nltk nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) def preprocess_document(doc): doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A) doc = doc.lower() doc = doc.strip() tokens = word_tokenize(doc) filtered_tokens = [token for token in tokens if token not in stop_words] doc = ' '.join(filtered_tokens) return doc
Опис коду
expand arrow
def preprocess_document(doc):

Визначає функцію preprocess_document, яка приймає один рядок (документ) doc як вхідний параметр.

doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A)

Видаляє з doc всі символи, крім алфавітних символів та пробілів, роблячи операцію нечутливою до регістру та лише для ASCII.

doc = doc.lower()

Перетворює документ у нижній регістр для забезпечення однакового оброблення регістру.

doc = doc.strip()

Видаляє початкові та кінцеві пробіли з документа.

tokens = word_tokenize(doc)

Токенізує очищений, приведений до нижнього регістру документ на окремі слова (токени).

filtered_tokens = [token for token in tokens if token not in stop_words]

Видаляє стоп-слова.

doc = ' '.join(filtered_tokens)

Об'єднує відфільтровані токени назад у єдиний рядок, розділений пробілами.

return doc

Повертає передоброблений документ як один рядок.

Тепер застосуємо цю функцію до нашого DataFrame для кожного документа та створимо стовпець із очищеними документами:

123456789101112131415161718192021222324252627
import re from nltk.tokenize import word_tokenize from nltk.corpus import stopwords import nltk import pandas as pd nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) def preprocess_document(doc): doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A) doc = doc.lower() doc = doc.strip() tokens = word_tokenize(doc) filtered_tokens = [token for token in tokens if token not in stop_words] doc = ' '.join(filtered_tokens) return doc corpus = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_1/chapter_8/example_corpus.txt', sep='\r', header=None, names=['Document']) corpus['Cleaned_Document'] = corpus['Document'].apply(preprocess_document) print(corpus)

Як бачимо, наш корпус успішно попередньо оброблений, тому надалі в курсі ми будемо використовувати саме цю версію корпусу.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 9
some-alt