Anvendelse af Tekstforbehandling i Praksis
Dokumenter
Først, inden vi går videre med et praktisk eksempel på tekstforbehandling, er det vigtigt at forstå de centrale komponenter i et tekstkorpus: dokumenter.
Et dokument er et separat tekststykke inden for et korpus, for eksempel en e-mail i et korpus af e-mails.
Grundlæggende er hvert tekstkorpus et sæt af dokumenter, så forbehandling af korpuset betyder forbehandling af hver af dokumenterne.
Indlæsning af korpus
Tidligere havde vi vores tekstkorpus som strengvariabler. I virkelige scenarier er et tekstkorpus dog ofte gemt i TXT-filer for rent tekstbaserede data eller i CSV-filer med flere kolonner, når der er tilknyttet yderligere data til teksten.
I dette kursus arbejder vi enten med CSV-filer eller TXT-filer, hvor hvert dokument starter på en ny linje. Derfor anvender vi funktionen read_csv() fra pandas-biblioteket til at indlæse et tekstkorpus fra en fil.
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)
Her læser vi denne TXT-fil ind i en DataFrame. Vi sætter sep='\r' for at bruge carriage return-symbolet som separator, hvilket angiver, at hvert dokument starter på en ny linje. Vi bruger header=None, så den første linje ikke betragtes som en header, og vi angiver names=['Document'] for at navngive den enkelte kolonne 'Document'. Resultatet er en DataFrame med én kolonne kaldet 'Document', der indeholder 6 dokumenter (sætninger).
Forbehandling af korpus
For at forbehandle korpus, lad os først oprette en funktion til forbehandling af hvert enkelt dokument:
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
Lad os nu anvende denne funktion på vores DataFrame for hvert dokument og oprette en kolonne med rensede dokumenter:
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)
Som du kan se, er vores korpus blevet forbehandlet med succes, så vi vil anvende den forbehandlede version af dette korpus senere i kurset.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you explain what each step in the preprocessing function does?
What are stop words and why are they removed?
How can I customize the preprocessing steps for my own dataset?
Awesome!
Completion rate improved to 3.45
Anvendelse af Tekstforbehandling i Praksis
Stryg for at vise menuen
Dokumenter
Først, inden vi går videre med et praktisk eksempel på tekstforbehandling, er det vigtigt at forstå de centrale komponenter i et tekstkorpus: dokumenter.
Et dokument er et separat tekststykke inden for et korpus, for eksempel en e-mail i et korpus af e-mails.
Grundlæggende er hvert tekstkorpus et sæt af dokumenter, så forbehandling af korpuset betyder forbehandling af hver af dokumenterne.
Indlæsning af korpus
Tidligere havde vi vores tekstkorpus som strengvariabler. I virkelige scenarier er et tekstkorpus dog ofte gemt i TXT-filer for rent tekstbaserede data eller i CSV-filer med flere kolonner, når der er tilknyttet yderligere data til teksten.
I dette kursus arbejder vi enten med CSV-filer eller TXT-filer, hvor hvert dokument starter på en ny linje. Derfor anvender vi funktionen read_csv() fra pandas-biblioteket til at indlæse et tekstkorpus fra en fil.
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)
Her læser vi denne TXT-fil ind i en DataFrame. Vi sætter sep='\r' for at bruge carriage return-symbolet som separator, hvilket angiver, at hvert dokument starter på en ny linje. Vi bruger header=None, så den første linje ikke betragtes som en header, og vi angiver names=['Document'] for at navngive den enkelte kolonne 'Document'. Resultatet er en DataFrame med én kolonne kaldet 'Document', der indeholder 6 dokumenter (sætninger).
Forbehandling af korpus
For at forbehandle korpus, lad os først oprette en funktion til forbehandling af hvert enkelt dokument:
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
Lad os nu anvende denne funktion på vores DataFrame for hvert dokument og oprette en kolonne med rensede dokumenter:
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)
Som du kan se, er vores korpus blevet forbehandlet med succes, så vi vil anvende den forbehandlede version af dette korpus senere i kurset.
Tak for dine kommentarer!