Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Tekstin Esikäsittelyn Soveltaminen Käytännössä | Tekstin Esikäsittelyn Perusteet
Johdatus NLP:hen Pythonilla

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.

Note
Määritelmä

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 merkkijonona muuttujissa. 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()-funktiota pandas-kirjastosta ladataksemme tekstikorpuksen tiedostosta.

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)

Tässä luemme tämän TXT-tiedoston DataFrame-muotoon. Asetamme sep='\r' käyttämään rivinvaihtomerkkiä erottimena, mikä ilmaisee, 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:

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

Määrittelee preprocess_document-funktion, joka ottaa syötteenä yhden merkkijonon (dokumentin) doc.

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

Poistaa kaikki merkit doc-muuttujasta paitsi aakkoset ja välilyönnit, huomioiden kirjainkoon ja sallien vain ASCII-merkit.

doc = doc.lower()

Muuntaa dokumentin pienaakkosiksi yhtenäisen kirjainkoon käsittelyn varmistamiseksi.

doc = doc.strip()

Poistaa dokumentin alusta ja lopusta ylimääräiset välilyönnit.

tokens = word_tokenize(doc)

Pilkoo puhdistetun ja pienaakkosiksi muunnetun dokumentin yksittäisiksi sanoiksi (tokeneiksi).

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

Poistaa stop-sanat tokeneista.

doc = ' '.join(filtered_tokens)

Yhdistää suodatetut tokenit takaisin yhdeksi merkkijonoksi, eroteltuna välilyönneillä.

return doc

Palauttaa esikäsitellyn dokumentin yhtenä merkkijonona.

Soveltakaamme nyt tätä funktiota DataFrame-taulukkoomme jokaiselle dokumentille ja luodaan sarake puhdistetuille dokumenteille:

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)

Kuten huomaat, korpus on esikäsitelty onnistuneesti, joten käytämme tätä esikäsiteltyä versiota myöhemmin kurssilla.

question mark

Valitse seuraavan koodinpätkän oikea tuloste.

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 9

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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.

Note
Määritelmä

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 merkkijonona muuttujissa. 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()-funktiota pandas-kirjastosta ladataksemme tekstikorpuksen tiedostosta.

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)

Tässä luemme tämän TXT-tiedoston DataFrame-muotoon. Asetamme sep='\r' käyttämään rivinvaihtomerkkiä erottimena, mikä ilmaisee, 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:

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

Määrittelee preprocess_document-funktion, joka ottaa syötteenä yhden merkkijonon (dokumentin) doc.

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

Poistaa kaikki merkit doc-muuttujasta paitsi aakkoset ja välilyönnit, huomioiden kirjainkoon ja sallien vain ASCII-merkit.

doc = doc.lower()

Muuntaa dokumentin pienaakkosiksi yhtenäisen kirjainkoon käsittelyn varmistamiseksi.

doc = doc.strip()

Poistaa dokumentin alusta ja lopusta ylimääräiset välilyönnit.

tokens = word_tokenize(doc)

Pilkoo puhdistetun ja pienaakkosiksi muunnetun dokumentin yksittäisiksi sanoiksi (tokeneiksi).

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

Poistaa stop-sanat tokeneista.

doc = ' '.join(filtered_tokens)

Yhdistää suodatetut tokenit takaisin yhdeksi merkkijonoksi, eroteltuna välilyönneillä.

return doc

Palauttaa esikäsitellyn dokumentin yhtenä merkkijonona.

Soveltakaamme nyt tätä funktiota DataFrame-taulukkoomme jokaiselle dokumentille ja luodaan sarake puhdistetuille dokumenteille:

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)

Kuten huomaat, korpus on esikäsitelty onnistuneesti, joten käytämme tätä esikäsiteltyä versiota myöhemmin kurssilla.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 9
some-alt