Модуль NLTK regexp_tokenize разбивает строку на подстроки с помощью регулярного выражения.Можно определить регулярное выражение pattern
, которое создаст токенизатор, соответствующий группам в этом шаблоне.Мы можем написать шаблон для вашего конкретного варианта использования, который ищет слова, сокращения (как в верхнем, так и в нижнем регистре) и такие символы, как '.'
, ';'
и т. Д.
import nltk
sent = "I am good. I e.g. wash the dishes."
pattern = r'''(?x) # set flag to allow verbose regexps
(?:[A-Za-z]\.)+ # abbreviations(both upper and lower case, like "e.g.", "U.S.A.")
| \w+(?:-\w+)* # words with optional internal hyphens
| [][.,;"'?():_`-] # these are separate tokens; includes ], [
'''
nltk.regexp_tokenize(sent, pattern)
#Output:
['I', 'am', 'good', '.', 'I', 'e.g.', 'wash', 'the', 'dishes', '.']
Шаблон Regex для сокращенийэто (?:[A-Za-z]\.)+
.\.
соответствует "."
в прямом поиске, содержащем символы AZ или az.
С другой стороны, полный стоп сопоставляется как независимый символ в следующем шаблоне, который не привязан к положительному или отрицательному прогнозу или содержанию в наборе алфавитов:
'[][.,;"'?():_`-]'