Tokenisering med reguljära uttryck
Varför reguljära uttryck?
Även om funktionerna word_tokenize() och sent_tokenize() från NLTK-biblioteket erbjuder bekväma sätt att dela upp text i ord och meningar, passar de inte alltid alla specifika behov vid textbearbetning. Därför undersöker vi ett alternativt tillvägagångssätt: tokenisering med hjälp av reguljära uttryck (regex).
Reguljärt uttryck (regex) är en sekvens av tecken som definierar ett sökmönster. Reguljära uttryck kan användas för olika textbearbetningsuppgifter, inklusive sökning, ersättning och uppdelning av text baserat på specifika mönster.
I samband med tokenisering möjliggör regex att definiera anpassade mönster som kan identifiera token, vilket ger mer kontroll över tokeniseringsprocessen än fördefinierade funktioner.
Användning av regexp_tokenize()
Lyckligtvis innehåller NLTK-biblioteket funktionen regexp_tokenize() i modulen tokenize, som delar upp en sträng i delsträngar med hjälp av ett reguljärt uttryck. Denna funktion är särskilt användbar när text behöver tokeniseras baserat på mönster som inte hanteras väl av standardtokeniserare.
De viktigaste parametrarna för regexp_tokenize() är dess två första: text (strängen som ska tokeniseras) och pattern (reguljärt uttrycksmö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 är processen liknande användningen av funktionen word_tokenize(), men resultaten kan variera beroende på mönstret. I vårt exempel används mönstret '\w+' för att matcha sekvenser av en eller flera alfanumeriska tecken (bokstäver och siffror) samt understreck.
Detta resulterar i en lista med ord utan skiljetecken, vilket skiljer sig från word_tokenize() där skiljetecken vanligtvis inkluderas som separata token.
Använda RegexpTokenizer
Ett alternativt tillvägagångssätt för anpassad tokenisering innebär att använda klassen RegexpTokenizer från NLTK:s modul tokenize. Skapa först en instans av RegexpTokenizer med det önskade reguljära uttrycksmönstret som argument. När en instans med angivet mönster har skapats kan du skicka in din text som argument till dess metod tokenize().
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)
Detta tillvägagångssätt ger samma resultat och kan vara bättre i situationer där du behöver en tokenizer för olika texter, eftersom det gör det möjligt att skapa tokenizern en gång och sedan använda den på olika textinmatningar utan att behöva definiera mönstret på nytt varje gång.
Vi går vidare med ett annat exempel. Anta att vi endast vill att siffror ska vara våra token, då kommer vårt mönster '\d+' att söka efter en eller flera siffror, som i exemplet nedan:
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)
Sammanfattningsvis möjliggör regexp-tokenisering mycket anpassad tokenisering, vilket gör det idealiskt för att hantera komplexa mönster och specifika tokeniseringsregler som inte enkelt kan hanteras av standardmetoder som word_tokenize(). I vårt exempel, när vi ville använda siffror som token, skulle word_tokenize() inte vara lämpligt för denna uppgift.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Tokenisering med reguljära uttryck
Svep för att visa menyn
Varför reguljära uttryck?
Även om funktionerna word_tokenize() och sent_tokenize() från NLTK-biblioteket erbjuder bekväma sätt att dela upp text i ord och meningar, passar de inte alltid alla specifika behov vid textbearbetning. Därför undersöker vi ett alternativt tillvägagångssätt: tokenisering med hjälp av reguljära uttryck (regex).
Reguljärt uttryck (regex) är en sekvens av tecken som definierar ett sökmönster. Reguljära uttryck kan användas för olika textbearbetningsuppgifter, inklusive sökning, ersättning och uppdelning av text baserat på specifika mönster.
I samband med tokenisering möjliggör regex att definiera anpassade mönster som kan identifiera token, vilket ger mer kontroll över tokeniseringsprocessen än fördefinierade funktioner.
Användning av regexp_tokenize()
Lyckligtvis innehåller NLTK-biblioteket funktionen regexp_tokenize() i modulen tokenize, som delar upp en sträng i delsträngar med hjälp av ett reguljärt uttryck. Denna funktion är särskilt användbar när text behöver tokeniseras baserat på mönster som inte hanteras väl av standardtokeniserare.
De viktigaste parametrarna för regexp_tokenize() är dess två första: text (strängen som ska tokeniseras) och pattern (reguljärt uttrycksmö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 är processen liknande användningen av funktionen word_tokenize(), men resultaten kan variera beroende på mönstret. I vårt exempel används mönstret '\w+' för att matcha sekvenser av en eller flera alfanumeriska tecken (bokstäver och siffror) samt understreck.
Detta resulterar i en lista med ord utan skiljetecken, vilket skiljer sig från word_tokenize() där skiljetecken vanligtvis inkluderas som separata token.
Använda RegexpTokenizer
Ett alternativt tillvägagångssätt för anpassad tokenisering innebär att använda klassen RegexpTokenizer från NLTK:s modul tokenize. Skapa först en instans av RegexpTokenizer med det önskade reguljära uttrycksmönstret som argument. När en instans med angivet mönster har skapats kan du skicka in din text som argument till dess metod tokenize().
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)
Detta tillvägagångssätt ger samma resultat och kan vara bättre i situationer där du behöver en tokenizer för olika texter, eftersom det gör det möjligt att skapa tokenizern en gång och sedan använda den på olika textinmatningar utan att behöva definiera mönstret på nytt varje gång.
Vi går vidare med ett annat exempel. Anta att vi endast vill att siffror ska vara våra token, då kommer vårt mönster '\d+' att söka efter en eller flera siffror, som i exemplet nedan:
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)
Sammanfattningsvis möjliggör regexp-tokenisering mycket anpassad tokenisering, vilket gör det idealiskt för att hantera komplexa mönster och specifika tokeniseringsregler som inte enkelt kan hanteras av standardmetoder som word_tokenize(). I vårt exempel, när vi ville använda siffror som token, skulle word_tokenize() inte vara lämpligt för denna uppgift.
Tack för dina kommentarer!