Tillämpning av Textförbehandling i Praktiken
Svep för att visa menyn
Dokument
Först, innan vi går vidare med ett praktiskt exempel på textförbehandling, är det viktigt att förstå de centrala komponenterna i en textkorpus: dokument.
Ett dokument är en separat text inom en korpus, till exempel ett e-postmeddelande i en samling av e-postmeddelanden.
I grunden är varje textkorpus en samling dokument, så att förbehandla korpusen innebär att förbehandla varje dokument.
Ladda in korpusen
Tidigare hade vi vår textkorpus som strängvariabler. I verkliga scenarier lagras dock en textkorpus ofta i TXT-filer för rent textbaserad data eller i CSV-filer med flera kolumner när ytterligare data är kopplad till texten.
I denna kurs kommer vi att arbeta med antingen CSV-filer eller TXT-filer, där varje dokument börjar på en ny rad. Därför använder vi funktionen read_csv() från biblioteket pandas för att ladda en textkorpus från 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)
Här läser vi in denna TXT-fil till en DataFrame. Vi anger sep='\r' för att använda vagnretur-symbolen som avgränsare, vilket indikerar att varje dokument börjar på en ny rad. Vi använder header=None så att den första raden inte tolkas som en rubrik, och vi specificerar names=['Document'] för att namnge den enda kolumnen 'Document'. Resultatet blir en DataFrame med en enda kolumn som heter 'Document' och innehåller 6 dokument (meningar).
Förbehandling av korpus
För att förbehandla korpusen, låt oss först skapa en funktion för att förbehandla varje 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
def preprocess_document(doc):
Definierar funktionen preprocess_document som tar en sträng (dokument) doc
som indata.
doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A)
Tar bort alla tecken från doc utom bokstäver och mellanslag, gör operationen
skiftlägesokänslig och endast ASCII.
doc = doc.lower()
Konverterar dokumentet till gemener för att säkerställa konsekvent hantering av skiftläge.
doc = doc.strip()
Tar bort inledande och avslutande blanksteg från dokumentet.
tokens = word_tokenize(doc)
Tokeniserar det rensade, gemena dokumentet till individuella ord (token).
filtered_tokens = [token for token in tokens if token not in stop_words]
Filtrerar bort stoppord.
doc = ' '.join(filtered_tokens)
Sätter ihop de filtrerade token till en enda sträng, separerade med mellanslag.
return doc
Returnerar det förbehandlade dokumentet som en enda sträng.
Låt oss nu tillämpa denna funktion på vår DataFrame för varje dokument och skapa en kolumn med rensade dokument:
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 har vårt korpus förbehandlats framgångsrikt, så vi kommer att använda den förbehandlade versionen av detta korpus senare i kursen.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Tillämpning av Textförbehandling i Praktiken
Dokument
Först, innan vi går vidare med ett praktiskt exempel på textförbehandling, är det viktigt att förstå de centrala komponenterna i en textkorpus: dokument.
Ett dokument är en separat text inom en korpus, till exempel ett e-postmeddelande i en samling av e-postmeddelanden.
I grunden är varje textkorpus en samling dokument, så att förbehandla korpusen innebär att förbehandla varje dokument.
Ladda in korpusen
Tidigare hade vi vår textkorpus som strängvariabler. I verkliga scenarier lagras dock en textkorpus ofta i TXT-filer för rent textbaserad data eller i CSV-filer med flera kolumner när ytterligare data är kopplad till texten.
I denna kurs kommer vi att arbeta med antingen CSV-filer eller TXT-filer, där varje dokument börjar på en ny rad. Därför använder vi funktionen read_csv() från biblioteket pandas för att ladda en textkorpus från 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)
Här läser vi in denna TXT-fil till en DataFrame. Vi anger sep='\r' för att använda vagnretur-symbolen som avgränsare, vilket indikerar att varje dokument börjar på en ny rad. Vi använder header=None så att den första raden inte tolkas som en rubrik, och vi specificerar names=['Document'] för att namnge den enda kolumnen 'Document'. Resultatet blir en DataFrame med en enda kolumn som heter 'Document' och innehåller 6 dokument (meningar).
Förbehandling av korpus
För att förbehandla korpusen, låt oss först skapa en funktion för att förbehandla varje 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
def preprocess_document(doc):
Definierar funktionen preprocess_document som tar en sträng (dokument) doc
som indata.
doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I | re.A)
Tar bort alla tecken från doc utom bokstäver och mellanslag, gör operationen
skiftlägesokänslig och endast ASCII.
doc = doc.lower()
Konverterar dokumentet till gemener för att säkerställa konsekvent hantering av skiftläge.
doc = doc.strip()
Tar bort inledande och avslutande blanksteg från dokumentet.
tokens = word_tokenize(doc)
Tokeniserar det rensade, gemena dokumentet till individuella ord (token).
filtered_tokens = [token for token in tokens if token not in stop_words]
Filtrerar bort stoppord.
doc = ' '.join(filtered_tokens)
Sätter ihop de filtrerade token till en enda sträng, separerade med mellanslag.
return doc
Returnerar det förbehandlade dokumentet som en enda sträng.
Låt oss nu tillämpa denna funktion på vår DataFrame för varje dokument och skapa en kolumn med rensade dokument:
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 har vårt korpus förbehandlats framgångsrikt, så vi kommer att använda den förbehandlade versionen av detta korpus senare i kursen.
Tack för dina kommentarer!