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 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.
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)
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:
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):
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:
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)
Kuten huomaat, korpus on esikäsitelty onnistuneesti, joten käytämme tätä esikäsiteltyä versiota myöhemmin kurssilla.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
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.
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.
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)
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:
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):
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:
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)
Kuten huomaat, korpus on esikäsitelty onnistuneesti, joten käytämme tätä esikäsiteltyä versiota myöhemmin kurssilla.
Kiitos palautteestasi!