Tekstin Esikäsittelyn Soveltaminen Käytännössä
Dokumentit
Ennen kuin siirrytään tekstin esikäsittelyn käytännön esimerkkiin, on tärkeää ymmärtää tekstikorpuksen keskeiset osat: dokumentit.
Dokumentti on erillinen tekstikappale korpuksessa, esimerkiksi sähköposti sähköpostikorpuksessa.
Jokainen tekstikorpus koostuu olennaisesti dokumenteista, joten korpuksen esikäsittely tarkoittaa jokaisen dokumentin esikäsittelyä.
Korpuksen lataaminen
Aiemmin tekstikorpuksemme oli tallennettu merkkijonona. Todellisissa tilanteissa tekstikorpus tallennetaan kuitenkin usein TXT-tiedostoihin pelkkää tekstiä varten tai CSV-tiedostoihin, joissa on useita sarakkeita, kun tekstiin liittyy lisätietoja.
Tällä kurssilla työskentelemme joko CSV- tai TXT-tiedostojen kanssa, joissa jokainen dokumentti alkaa uudelta riviltä. Käytämme siis read_csv()-kirjaston pandas-funktiota ladataksemme tekstikorpuksen tiedostosta.
123456import pandas as pd corpus = pd.read_csv( 'https://staging-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)
Tässä luemme tämän TXT-tiedoston DataFrame-muotoon. Asetamme sep='\r' käyttääksemme rivinvaihtomerkkiä erottimena, mikä tarkoittaa, että jokainen dokumentti alkaa uudelta riviltä. Käytämme header=None, jotta ensimmäistä riviä ei tulkita otsikoksi, ja määritämme names=['Document'] nimeämään yksittäisen sarakkeen 'Document'. Lopputuloksena saamme DataFrame-rakenteen, jossa on yksi sarake nimeltä 'Document' ja 6 dokumenttia (lausetta).
Korpuksen esikäsittely
Jotta voimme esikäsitellä korpuksen, luodaan ensin funktio jokaisen dokumentin esikäsittelyä varten:
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
Sovelletaan nyt tätä funktiota DataFrame-rakenteeseen jokaiselle dokumentille ja luodaan sarake puhdistetuille dokumenteille:
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://staging-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)
Kuten huomaat, korpuksemme on esikäsitelty onnistuneesti, joten käytämme tämän korpuksen esikäsiteltyä versiota myöhemmin kurssilla.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.45
Tekstin Esikäsittelyn Soveltaminen Käytännössä
Pyyhkäise näyttääksesi valikon
Dokumentit
Ennen kuin siirrytään tekstin esikäsittelyn käytännön esimerkkiin, on tärkeää ymmärtää tekstikorpuksen keskeiset osat: dokumentit.
Dokumentti on erillinen tekstikappale korpuksessa, esimerkiksi sähköposti sähköpostikorpuksessa.
Jokainen tekstikorpus koostuu olennaisesti dokumenteista, joten korpuksen esikäsittely tarkoittaa jokaisen dokumentin esikäsittelyä.
Korpuksen lataaminen
Aiemmin tekstikorpuksemme oli tallennettu merkkijonona. Todellisissa tilanteissa tekstikorpus tallennetaan kuitenkin usein TXT-tiedostoihin pelkkää tekstiä varten tai CSV-tiedostoihin, joissa on useita sarakkeita, kun tekstiin liittyy lisätietoja.
Tällä kurssilla työskentelemme joko CSV- tai TXT-tiedostojen kanssa, joissa jokainen dokumentti alkaa uudelta riviltä. Käytämme siis read_csv()-kirjaston pandas-funktiota ladataksemme tekstikorpuksen tiedostosta.
123456import pandas as pd corpus = pd.read_csv( 'https://staging-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)
Tässä luemme tämän TXT-tiedoston DataFrame-muotoon. Asetamme sep='\r' käyttääksemme rivinvaihtomerkkiä erottimena, mikä tarkoittaa, että jokainen dokumentti alkaa uudelta riviltä. Käytämme header=None, jotta ensimmäistä riviä ei tulkita otsikoksi, ja määritämme names=['Document'] nimeämään yksittäisen sarakkeen 'Document'. Lopputuloksena saamme DataFrame-rakenteen, jossa on yksi sarake nimeltä 'Document' ja 6 dokumenttia (lausetta).
Korpuksen esikäsittely
Jotta voimme esikäsitellä korpuksen, luodaan ensin funktio jokaisen dokumentin esikäsittelyä varten:
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
Sovelletaan nyt tätä funktiota DataFrame-rakenteeseen jokaiselle dokumentille ja luodaan sarake puhdistetuille dokumenteille:
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://staging-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)
Kuten huomaat, korpuksemme on esikäsitelty onnistuneesti, joten käytämme tämän korpuksen esikäsiteltyä versiota myöhemmin kurssilla.
Kiitos palautteestasi!