Tokenisering Ved Hjælp Af Regulære Udtryk
Hvorfor regulære udtryk?
Selvom funktionerne word_tokenize() og sent_tokenize() fra NLTK-biblioteket tilbyder bekvemme metoder til at opdele tekst i ord og sætninger, er de ikke altid tilpasset specifikke behov inden for tekstbehandling. Derfor undersøger vi en alternativ tilgang: tokenisering ved hjælp af regulære udtryk (regex).
Regulært udtryk (regex) er en sekvens af tegn, der definerer et søgemønster. Regulære udtryk kan anvendes til forskellige tekstbehandlingsopgaver, herunder søgning, erstatning og opdeling af tekst baseret på specifikke mønstre.
I forbindelse med tokenisering muliggør regex definitionen af tilpassede mønstre, der kan identificere tokens og giver dermed større kontrol over tokeniseringsprocessen end foruddefinerede funktioner.
Brug af regexp_tokenize()
Heldigvis indeholder NLTK-biblioteket funktionen regexp_tokenize() i modulet tokenize, som opdeler en streng i understrenge ved hjælp af et regulært udtryk. Denne funktion er særligt nyttig, når du skal opdele tekst baseret på mønstre, der ikke håndteres godt af de standardiserede tokenizers.
De vigtigste parametre for regexp_tokenize() er de to første: text (strengen, der skal opdeles) og pattern (regulært udtryksmø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 kan se, ligner processen brugen af funktionen word_tokenize(), men resultaterne kan variere afhængigt af mønsteret. I vores eksempel bruges mønsteret '\w+' til at matche sekvenser af en eller flere alfanumeriske tegn (bogstaver og tal) samt understregningstegn.
Dette resulterer i en liste af ord uden tegnsætning, hvilket adskiller sig fra word_tokenize(), da sidstnævnte typisk inkluderer tegnsætning som separate tokens.
Brug af RegexpTokenizer
En alternativ metode til brugerdefineret tokenisering involverer brug af RegexpTokenizer-klassen fra NLTK's tokenize-modul. Først oprettes en instans af RegexpTokenizer med det ønskede regulære udtryk som argument. Når en instans med det specificerede mønster er oprettet, kan teksten gives 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 metode giver samme resultat, og den kan være bedre i situationer, hvor der er behov for én tokenizer til forskellige tekster, da det gør det muligt at oprette tokenizer én gang og derefter anvende den på forskellige tekstinput uden at skulle definere mønsteret igen hver gang.
Lad os fortsætte med et andet eksempel. Antag, at vi kun ønsker cifre som tokens, så vil vores mønster '\d+' søge efter et eller flere cifre, som vist i eksemplet nedenfor:
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)
Overordnet set muliggør regexp-tokenisering meget tilpasset tokenisering, hvilket gør det ideelt til at håndtere komplekse mønstre og specifikke tokeniseringsregler, som ikke let kan håndteres af standardmetoder som word_tokenize(). I vores eksempel, hvor vi ønskede at bruge tal som tokens, ville word_tokenize() ikke være egnet til denne opgave.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.45
Tokenisering Ved Hjælp Af Regulære Udtryk
Stryg for at vise menuen
Hvorfor regulære udtryk?
Selvom funktionerne word_tokenize() og sent_tokenize() fra NLTK-biblioteket tilbyder bekvemme metoder til at opdele tekst i ord og sætninger, er de ikke altid tilpasset specifikke behov inden for tekstbehandling. Derfor undersøger vi en alternativ tilgang: tokenisering ved hjælp af regulære udtryk (regex).
Regulært udtryk (regex) er en sekvens af tegn, der definerer et søgemønster. Regulære udtryk kan anvendes til forskellige tekstbehandlingsopgaver, herunder søgning, erstatning og opdeling af tekst baseret på specifikke mønstre.
I forbindelse med tokenisering muliggør regex definitionen af tilpassede mønstre, der kan identificere tokens og giver dermed større kontrol over tokeniseringsprocessen end foruddefinerede funktioner.
Brug af regexp_tokenize()
Heldigvis indeholder NLTK-biblioteket funktionen regexp_tokenize() i modulet tokenize, som opdeler en streng i understrenge ved hjælp af et regulært udtryk. Denne funktion er særligt nyttig, når du skal opdele tekst baseret på mønstre, der ikke håndteres godt af de standardiserede tokenizers.
De vigtigste parametre for regexp_tokenize() er de to første: text (strengen, der skal opdeles) og pattern (regulært udtryksmø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 kan se, ligner processen brugen af funktionen word_tokenize(), men resultaterne kan variere afhængigt af mønsteret. I vores eksempel bruges mønsteret '\w+' til at matche sekvenser af en eller flere alfanumeriske tegn (bogstaver og tal) samt understregningstegn.
Dette resulterer i en liste af ord uden tegnsætning, hvilket adskiller sig fra word_tokenize(), da sidstnævnte typisk inkluderer tegnsætning som separate tokens.
Brug af RegexpTokenizer
En alternativ metode til brugerdefineret tokenisering involverer brug af RegexpTokenizer-klassen fra NLTK's tokenize-modul. Først oprettes en instans af RegexpTokenizer med det ønskede regulære udtryk som argument. Når en instans med det specificerede mønster er oprettet, kan teksten gives 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 metode giver samme resultat, og den kan være bedre i situationer, hvor der er behov for én tokenizer til forskellige tekster, da det gør det muligt at oprette tokenizer én gang og derefter anvende den på forskellige tekstinput uden at skulle definere mønsteret igen hver gang.
Lad os fortsætte med et andet eksempel. Antag, at vi kun ønsker cifre som tokens, så vil vores mønster '\d+' søge efter et eller flere cifre, som vist i eksemplet nedenfor:
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)
Overordnet set muliggør regexp-tokenisering meget tilpasset tokenisering, hvilket gør det ideelt til at håndtere komplekse mønstre og specifikke tokeniseringsregler, som ikke let kan håndteres af standardmetoder som word_tokenize(). I vores eksempel, hvor vi ønskede at bruge tal som tokens, ville word_tokenize() ikke være egnet til denne opgave.
Tak for dine kommentarer!