Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Anvendelse af Tekstforbehandling i Praksis | Grundlæggende Tekstforbehandling
Introduktion til NLP med Python

Anvendelse af Tekstforbehandling i Praksis

Stryg for at vise menuen

Dokumenter

Før du går videre med et praktisk eksempel på tekstforbehandling, er det vigtigt at forstå de centrale komponenter i et tekstkorpus: dokumenter.

Note
Definition

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 bruger vi funktionen read_csv() fra biblioteket pandas til at indlæse et tekstkorpus fra en fil.

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)

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 eneste kolonne 'Document'. Resultatet er en DataFrame med én kolonne kaldet 'Document', som indeholder 6 dokumenter (sætninger).

Forbehandling af korpuset

For at forbehandle korpuset, lad os først oprette en funktion til forbehandling af hvert af dokumenterne:

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
Kodebeskrivelse
expand arrow
def preprocess_document(doc):

Definerer funktionen preprocess_document, som tager en enkelt streng (dokument) doc som input.

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

Fjerner alle tegn fra doc undtagen alfabetiske tegn og mellemrum, hvilket gør operationen ufølsom over for store og små bogstaver og kun ASCII.

doc = doc.lower()

Konverterer dokumentet til små bogstaver for at sikre ensartet håndtering af store og små bogstaver.

doc = doc.strip()

Fjerner indledende og afsluttende mellemrum fra dokumentet.

tokens = word_tokenize(doc)

Tokeniserer det rensede, småskrevne dokument til individuelle ord (tokens).

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

Filtrerer stopord fra.

doc = ' '.join(filtered_tokens)

Sammenføjer de filtrerede tokens til en enkelt streng, adskilt af mellemrum.

return doc

Returnerer det forbehandlede dokument som en enkelt streng.

Lad os nu anvende denne funktion på vores DataFrame for hvert dokument og oprette en kolonne med rensede dokumenter:

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)

Som du kan se, er vores korpus blevet forbehandlet med succes, så vi vil bruge den forbehandlede version af dette korpus senere i kurset.

question mark

Vælg det korrekte output for følgende kodeeksempel.

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 9

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Anvendelse af Tekstforbehandling i Praksis

Dokumenter

Før du går videre med et praktisk eksempel på tekstforbehandling, er det vigtigt at forstå de centrale komponenter i et tekstkorpus: dokumenter.

Note
Definition

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 bruger vi funktionen read_csv() fra biblioteket pandas til at indlæse et tekstkorpus fra en fil.

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)

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 eneste kolonne 'Document'. Resultatet er en DataFrame med én kolonne kaldet 'Document', som indeholder 6 dokumenter (sætninger).

Forbehandling af korpuset

For at forbehandle korpuset, lad os først oprette en funktion til forbehandling af hvert af dokumenterne:

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
Kodebeskrivelse
expand arrow
def preprocess_document(doc):

Definerer funktionen preprocess_document, som tager en enkelt streng (dokument) doc som input.

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

Fjerner alle tegn fra doc undtagen alfabetiske tegn og mellemrum, hvilket gør operationen ufølsom over for store og små bogstaver og kun ASCII.

doc = doc.lower()

Konverterer dokumentet til små bogstaver for at sikre ensartet håndtering af store og små bogstaver.

doc = doc.strip()

Fjerner indledende og afsluttende mellemrum fra dokumentet.

tokens = word_tokenize(doc)

Tokeniserer det rensede, småskrevne dokument til individuelle ord (tokens).

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

Filtrerer stopord fra.

doc = ' '.join(filtered_tokens)

Sammenføjer de filtrerede tokens til en enkelt streng, adskilt af mellemrum.

return doc

Returnerer det forbehandlede dokument som en enkelt streng.

Lad os nu anvende denne funktion på vores DataFrame for hvert dokument og oprette en kolonne med rensede dokumenter:

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)

Som du kan se, er vores korpus blevet forbehandlet med succes, så vi vil bruge den forbehandlede version af dette korpus senere i kurset.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 9
some-alt