Tokenisering Ved Hjælp Af Regulære Udtryk
Hvorfor regulære udtryk?
Selvom funktionerne word_tokenize() og sent_tokenize() fra NLTK-biblioteket tilbyder praktiske metoder til at opdele tekst i ord og sætninger, er de ikke altid tilpasset specifikke behov inden for tekstbehandling. Derfor undersøger vi et alternativ: 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 gør regex det muligt at definere tilpassede mønstre, der kan identificere tokens og giver dermed mere 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 tekst skal opdeles baseret på mønstre, der ikke håndteres optimalt 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 det ses, ligner processen brugen af funktionen word_tokenize(), men resultaterne kan variere afhængigt af mønsteret. I dette eksempel anvendes mønsteret '\w+' til at matche sekvenser af en eller flere alfanumeriske tegn (bogstaver og tal) samt understregninger.
Dette resulterer i en liste af ord uden tegnsætning, hvilket adskiller sig fra word_tokenize(), da denne typisk inkluderer tegnsætning som separate tokens.
Brug af RegexpTokenizer
En alternativ metode til brugerdefineret tokenisering indebærer 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 mere fordelagtig 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 kun cifre skal være vores tokens, så vil mønsteret '\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 håndtering af 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 praktiske metoder til at opdele tekst i ord og sætninger, er de ikke altid tilpasset specifikke behov inden for tekstbehandling. Derfor undersøger vi et alternativ: 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 gør regex det muligt at definere tilpassede mønstre, der kan identificere tokens og giver dermed mere 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 tekst skal opdeles baseret på mønstre, der ikke håndteres optimalt 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 det ses, ligner processen brugen af funktionen word_tokenize(), men resultaterne kan variere afhængigt af mønsteret. I dette eksempel anvendes mønsteret '\w+' til at matche sekvenser af en eller flere alfanumeriske tegn (bogstaver og tal) samt understregninger.
Dette resulterer i en liste af ord uden tegnsætning, hvilket adskiller sig fra word_tokenize(), da denne typisk inkluderer tegnsætning som separate tokens.
Brug af RegexpTokenizer
En alternativ metode til brugerdefineret tokenisering indebærer 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 mere fordelagtig 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 kun cifre skal være vores tokens, så vil mønsteret '\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 håndtering af 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!