Застосування Попередньої Обробки Тексту на Практиці
Свайпніть щоб показати меню
Документи
Перш ніж перейти до практичного прикладу попередньої обробки тексту, важливо зрозуміти ключові складові текстового корпусу: документи.
Документ — це окремий фрагмент тексту в межах корпусу, наприклад, електронний лист у корпусі листів.
Фактично, кожен текстовий корпус — це набір документів, тому попередня обробка корпусу означає попередню обробку кожного з документів.
Завантаження корпусу
Раніше наш текстовий корпус зберігався у вигляді рядкових змінних. Однак у реальних сценаріях текстовий корпус часто зберігається у файлах TXT для суто текстових даних або у файлах CSV з кількома стовпцями, якщо до тексту додаються додаткові дані.
У цьому курсі ми працюватимемо або з файлами CSV, або з файлами TXT, де кожен документ починається з нового рядка. Тому для завантаження текстового корпусу з файлу скористаємося функцією read_csv() з бібліотеки pandas.
123456import 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 документів (речень).
Передобробка корпусу
Щоб виконати передобробку корпусу, спочатку створимо функцію для передобробки кожного з документів:
123456789101112131415161718import 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
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 для кожного документа та створимо стовпець із очищеними документами:
123456789101112131415161718192021222324252627import 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)
Як бачимо, наш корпус успішно попередньо оброблений, тому надалі в курсі ми будемо використовувати саме цю версію корпусу.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат