Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Tokenisointi Säännöllisten Lausekkeiden Avulla | Tekstin Esikäsittelyn Perusteet
Johdatus NLP:hen

bookTokenisointi Säännöllisten Lausekkeiden Avulla

Miksi säännölliset lausekkeet?

Vaikka NLTK-kirjaston word_tokenize()- ja sent_tokenize()-funktiot tarjoavat käteviä tapoja pilkkoa tekstiä sanoihin ja lauseisiin, ne eivät aina sovellu kaikkiin tekstinkäsittelyn tarpeisiin. Tarkastellaan siis vaihtoehtoista lähestymistapaa: tokenisointia säännöllisten lausekkeiden (regex) avulla.

Note
Määritelmä

Säännöllinen lauseke (regex) on merkkijono, joka määrittelee hakukuvion. Säännöllisiä lausekkeita voidaan käyttää erilaisiin tekstinkäsittelytehtäviin, kuten etsimiseen, korvaamiseen ja tekstin jakamiseen tiettyjen kuvioiden perusteella.

Tokenisoinnin yhteydessä regex mahdollistaa räätälöityjen kuvioiden määrittelyn, jotka tunnistavat tokenit ja tarjoavat enemmän hallintaa tokenisointiprosessiin kuin valmiit funktiot.

regexp_tokenize()-funktion käyttäminen

Onneksi NLTK-kirjasto sisältää regexp_tokenize()-funktion tokenize-moduulissa, joka pilkkoo merkkijonon osamerkkijonoiksi käyttäen säännöllistä lauseketta. Tämä funktio on erityisen hyödyllinen, kun teksti täytyy pilkkoa kuvioiden perusteella, joita tavalliset tokenisoijat eivät käsittele hyvin.

regexp_tokenize()-funktion tärkeimmät parametrit ovat sen kaksi ensimmäistä: text (pilkottava merkkijono) ja pattern (säännöllisen lausekkeen kuvio).

123456
from nltk.tokenize import regexp_tokenize text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = regexp_tokenize(text, r'\w+') print(tokens)
copy

Kuten huomaat, prosessi on samankaltainen kuin word_tokenize()-funktion käytössä, mutta tulokset voivat vaihdella riippuen käytetystä kuviosta. Esimerkissämme käytetään kuviota '\w+', joka vastaa yhtä tai useampaa aakkosnumeerista merkkiä (kirjaimia ja numeroita) sekä alaviivoja.

Tämän seurauksena saadaan lista sanoista ilman välimerkkejä, mikä eroaa word_tokenize()-funktiosta, sillä jälkimmäinen sisältää yleensä välimerkit erillisinä tokeneina.

RegexpTokenizerin käyttö

Vaihtoehtoinen lähestymistapa mukautettuun tokenisointiin on käyttää NLTK:n RegexpTokenizer-moduulin tokenize-luokkaa. Luo ensin RegexpTokenizer-instanssi haluamallasi säännöllisen lausekkeen mallilla argumenttina. Kun instanssi on luotu määritetyllä mallilla, voit antaa tekstisi argumenttina sen tokenize()-metodille.

12345678
from nltk.tokenize import RegexpTokenizer # Define a tokenizer with a regular expression tokenizer = RegexpTokenizer(r'\w+') text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
copy

Tämä lähestymistapa tuottaa samanlaiset tulokset, ja se voi olla parempi tilanteissa, joissa tarvitset yhden tokenisoijan eri teksteille, sillä voit luoda tokenisoijan kerran ja käyttää sitä useisiin teksteihin ilman, että mallia tarvitsee määritellä uudelleen joka kerta.

Jatketaan toisella esimerkillä. Oletetaan, että haluamme vain numerot tokeneiksi, jolloin mallimme '\d+' etsii yhtä tai useampaa numeroa, kuten alla olevassa esimerkissä:

1234567
from nltk.tokenize import RegexpTokenizer tokenizer = RegexpTokenizer(r'\d+') text = "Give my $100 back right now or $20 each month" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
copy

Säännöllisiin lausekkeisiin perustuva tokenisointi mahdollistaa erittäin räätälöidyn tokenisoinnin, mikä tekee siitä ihanteellisen monimutkaisten mallien ja erityisten tokenisointisääntöjen käsittelyyn, joita tavalliset menetelmät, kuten word_tokenize(), eivät helposti hallitse. Esimerkissämme, kun halusimme käyttää numeroita tokeneina, word_tokenize() ei olisi sopinut tähän tehtävään.

question mark

Mikä seuraavista kuvaa parhaiten, mitä säännöllisen lausekkeen kuvio '\w+' vastaa käytettäessä regexp_tokenize()- tai RegexpTokenizer-toiminnon kanssa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

Can you explain how to write custom regex patterns for different tokenization needs?

What are some common use cases where regexp_tokenize() is preferred over word_tokenize()?

Can you show more examples of tokenization with different regex patterns?

Awesome!

Completion rate improved to 3.45

bookTokenisointi Säännöllisten Lausekkeiden Avulla

Pyyhkäise näyttääksesi valikon

Miksi säännölliset lausekkeet?

Vaikka NLTK-kirjaston word_tokenize()- ja sent_tokenize()-funktiot tarjoavat käteviä tapoja pilkkoa tekstiä sanoihin ja lauseisiin, ne eivät aina sovellu kaikkiin tekstinkäsittelyn tarpeisiin. Tarkastellaan siis vaihtoehtoista lähestymistapaa: tokenisointia säännöllisten lausekkeiden (regex) avulla.

Note
Määritelmä

Säännöllinen lauseke (regex) on merkkijono, joka määrittelee hakukuvion. Säännöllisiä lausekkeita voidaan käyttää erilaisiin tekstinkäsittelytehtäviin, kuten etsimiseen, korvaamiseen ja tekstin jakamiseen tiettyjen kuvioiden perusteella.

Tokenisoinnin yhteydessä regex mahdollistaa räätälöityjen kuvioiden määrittelyn, jotka tunnistavat tokenit ja tarjoavat enemmän hallintaa tokenisointiprosessiin kuin valmiit funktiot.

regexp_tokenize()-funktion käyttäminen

Onneksi NLTK-kirjasto sisältää regexp_tokenize()-funktion tokenize-moduulissa, joka pilkkoo merkkijonon osamerkkijonoiksi käyttäen säännöllistä lauseketta. Tämä funktio on erityisen hyödyllinen, kun teksti täytyy pilkkoa kuvioiden perusteella, joita tavalliset tokenisoijat eivät käsittele hyvin.

regexp_tokenize()-funktion tärkeimmät parametrit ovat sen kaksi ensimmäistä: text (pilkottava merkkijono) ja pattern (säännöllisen lausekkeen kuvio).

123456
from nltk.tokenize import regexp_tokenize text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = regexp_tokenize(text, r'\w+') print(tokens)
copy

Kuten huomaat, prosessi on samankaltainen kuin word_tokenize()-funktion käytössä, mutta tulokset voivat vaihdella riippuen käytetystä kuviosta. Esimerkissämme käytetään kuviota '\w+', joka vastaa yhtä tai useampaa aakkosnumeerista merkkiä (kirjaimia ja numeroita) sekä alaviivoja.

Tämän seurauksena saadaan lista sanoista ilman välimerkkejä, mikä eroaa word_tokenize()-funktiosta, sillä jälkimmäinen sisältää yleensä välimerkit erillisinä tokeneina.

RegexpTokenizerin käyttö

Vaihtoehtoinen lähestymistapa mukautettuun tokenisointiin on käyttää NLTK:n RegexpTokenizer-moduulin tokenize-luokkaa. Luo ensin RegexpTokenizer-instanssi haluamallasi säännöllisen lausekkeen mallilla argumenttina. Kun instanssi on luotu määritetyllä mallilla, voit antaa tekstisi argumenttina sen tokenize()-metodille.

12345678
from nltk.tokenize import RegexpTokenizer # Define a tokenizer with a regular expression tokenizer = RegexpTokenizer(r'\w+') text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
copy

Tämä lähestymistapa tuottaa samanlaiset tulokset, ja se voi olla parempi tilanteissa, joissa tarvitset yhden tokenisoijan eri teksteille, sillä voit luoda tokenisoijan kerran ja käyttää sitä useisiin teksteihin ilman, että mallia tarvitsee määritellä uudelleen joka kerta.

Jatketaan toisella esimerkillä. Oletetaan, että haluamme vain numerot tokeneiksi, jolloin mallimme '\d+' etsii yhtä tai useampaa numeroa, kuten alla olevassa esimerkissä:

1234567
from nltk.tokenize import RegexpTokenizer tokenizer = RegexpTokenizer(r'\d+') text = "Give my $100 back right now or $20 each month" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
copy

Säännöllisiin lausekkeisiin perustuva tokenisointi mahdollistaa erittäin räätälöidyn tokenisoinnin, mikä tekee siitä ihanteellisen monimutkaisten mallien ja erityisten tokenisointisääntöjen käsittelyyn, joita tavalliset menetelmät, kuten word_tokenize(), eivät helposti hallitse. Esimerkissämme, kun halusimme käyttää numeroita tokeneina, word_tokenize() ei olisi sopinut tähän tehtävään.

question mark

Mikä seuraavista kuvaa parhaiten, mitä säännöllisen lausekkeen kuvio '\w+' vastaa käytettäessä regexp_tokenize()- tai RegexpTokenizer-toiminnon kanssa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 5
some-alt