Tokenisering ved Bruk av Regulære Uttrykk
Hvorfor regulære uttrykk?
Selv om funksjonene word_tokenize() og sent_tokenize() fra NLTK-biblioteket tilbyr praktiske måter å dele tekst inn i ord og setninger på, passer de ikke alltid til spesifikke behov innen tekstbehandling. Derfor skal vi utforske et alternativ: tokenisering ved bruk av regulære uttrykk (regex).
Regulært uttrykk (regex) er en sekvens av tegn som definerer et søkemønster. Regulære uttrykk kan brukes til ulike oppgaver innen tekstbehandling, inkludert søk, erstatning og splitting av tekst basert på spesifikke mønstre.
I sammenheng med tokenisering gir regex mulighet til å definere egendefinerte mønstre som kan identifisere token, og gir dermed mer kontroll over tokeniseringsprosessen enn forhåndsdefinerte funksjoner.
Bruk av regexp_tokenize()
Heldigvis inkluderer NLTK-biblioteket funksjonen regexp_tokenize() i tokenize-modulen, som deler opp en streng i delstrenger ved hjelp av et regulært uttrykk. Denne funksjonen er spesielt nyttig når du må dele opp tekst basert på mønstre som ikke håndteres godt av standard-tokenizere.
De viktigste parameterne for regexp_tokenize() er de to første: text (strengen som skal deles opp) og pattern (regulært uttrykk-mønster).
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)
Som du ser, er prosessen lik bruk av funksjonen word_tokenize(), men resultatene kan variere avhengig av mønsteret. I vårt eksempel brukes mønsteret '\w+' for å matche sekvenser av én eller flere alfanumeriske tegn (bokstaver og tall) og understreker.
Dette gir en liste med ord uten skilletegn, noe som skiller seg fra word_tokenize(), hvor sistnevnte vanligvis inkluderer skilletegn som egne token.
Bruk av RegexpTokenizer
Et alternativt tilnærming for tilpasset tokenisering innebærer bruk av klassen RegexpTokenizer fra NLTKs tokenize-modul. Først opprettes en instans av RegexpTokenizer med ønsket regulære uttrykksmønster som argument. Når en instans med spesifisert mønster er opprettet, kan du sende inn teksten din som argument til dens tokenize()-metode.
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)
Denne tilnærmingen gir samme resultat, og kan være bedre i tilfeller der du trenger én tokenizer for ulike tekster, siden det lar deg opprette tokenizer én gang og deretter bruke den på ulike tekstinnganger uten å måtte definere mønsteret på nytt hver gang.
La oss gå videre med et annet eksempel. Anta at vi kun ønsker sifre som tokens, da vil mønsteret vårt '\d+' søke etter ett eller flere sifre, som i eksempelet under:
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)
Totalt sett gir regexp-tokenisering svært tilpasset tokenisering, noe som gjør det ideelt for å håndtere komplekse mønstre og spesifikke regler for tokenisering som ikke enkelt kan håndteres av standardmetoder som word_tokenize(). I vårt eksempel, når vi ønsket å bruke tall som tokens, ville ikke word_tokenize() være egnet for denne oppgaven.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 3.45
Tokenisering ved Bruk av Regulære Uttrykk
Sveip for å vise menyen
Hvorfor regulære uttrykk?
Selv om funksjonene word_tokenize() og sent_tokenize() fra NLTK-biblioteket tilbyr praktiske måter å dele tekst inn i ord og setninger på, passer de ikke alltid til spesifikke behov innen tekstbehandling. Derfor skal vi utforske et alternativ: tokenisering ved bruk av regulære uttrykk (regex).
Regulært uttrykk (regex) er en sekvens av tegn som definerer et søkemønster. Regulære uttrykk kan brukes til ulike oppgaver innen tekstbehandling, inkludert søk, erstatning og splitting av tekst basert på spesifikke mønstre.
I sammenheng med tokenisering gir regex mulighet til å definere egendefinerte mønstre som kan identifisere token, og gir dermed mer kontroll over tokeniseringsprosessen enn forhåndsdefinerte funksjoner.
Bruk av regexp_tokenize()
Heldigvis inkluderer NLTK-biblioteket funksjonen regexp_tokenize() i tokenize-modulen, som deler opp en streng i delstrenger ved hjelp av et regulært uttrykk. Denne funksjonen er spesielt nyttig når du må dele opp tekst basert på mønstre som ikke håndteres godt av standard-tokenizere.
De viktigste parameterne for regexp_tokenize() er de to første: text (strengen som skal deles opp) og pattern (regulært uttrykk-mønster).
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)
Som du ser, er prosessen lik bruk av funksjonen word_tokenize(), men resultatene kan variere avhengig av mønsteret. I vårt eksempel brukes mønsteret '\w+' for å matche sekvenser av én eller flere alfanumeriske tegn (bokstaver og tall) og understreker.
Dette gir en liste med ord uten skilletegn, noe som skiller seg fra word_tokenize(), hvor sistnevnte vanligvis inkluderer skilletegn som egne token.
Bruk av RegexpTokenizer
Et alternativt tilnærming for tilpasset tokenisering innebærer bruk av klassen RegexpTokenizer fra NLTKs tokenize-modul. Først opprettes en instans av RegexpTokenizer med ønsket regulære uttrykksmønster som argument. Når en instans med spesifisert mønster er opprettet, kan du sende inn teksten din som argument til dens tokenize()-metode.
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)
Denne tilnærmingen gir samme resultat, og kan være bedre i tilfeller der du trenger én tokenizer for ulike tekster, siden det lar deg opprette tokenizer én gang og deretter bruke den på ulike tekstinnganger uten å måtte definere mønsteret på nytt hver gang.
La oss gå videre med et annet eksempel. Anta at vi kun ønsker sifre som tokens, da vil mønsteret vårt '\d+' søke etter ett eller flere sifre, som i eksempelet under:
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)
Totalt sett gir regexp-tokenisering svært tilpasset tokenisering, noe som gjør det ideelt for å håndtere komplekse mønstre og spesifikke regler for tokenisering som ikke enkelt kan håndteres av standardmetoder som word_tokenize(). I vårt eksempel, når vi ønsket å bruke tall som tokens, ville ikke word_tokenize() være egnet for denne oppgaven.
Takk for tilbakemeldingene dine!