Tokenisointi 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.
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).
123456from 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)
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.
12345678from 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)
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ä:
1234567from 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)
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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Tokenisointi 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.
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).
123456from 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)
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.
12345678from 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)
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ä:
1234567from 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)
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.
Kiitos palautteestasi!