Введение
В этом проекте вы научитесь реализовывать систему токенизации текста с использованием Python. Токенизация текста - это фундаментальная задача в обработке естественного языка, при которой заданный текст разбивается на более мелкие единицы, называемые токенами. Эти токены могут представлять слова, числа, знаки препинания или другие значимые элементы в тексте. Способность токенизировать текст является важной для многих приложений, таких как лексический анализ в компиляторах, анализ тональности и классификация текстов.
👀 Предварительный просмотр
## text = 'total = 1 + 2 * 3'
tokens = [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]
🎯 Задачи
В этом проекте вы научитесь:
- Как определить класс
Tokenдля представления токенов в тексте - Как реализовать функцию
generate_tokens, которая принимает входной текст и генерирует поток токенов - Как протестировать процесс токенизации с помощью примера текста
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться в концепции токенизации текста и ее важности в обработке естественного языка
- Реализовать базовую систему токенизации текста с использованием Python
- Настроить процесс токенизации, определив разные типы токенов и соответствующие им регулярные выражения
- Протестировать и отладить систему токенизации с использованием различных входных текстов
Определение класса Token
В этом шаге вы научитесь определять класс Token, который будет представлять токены в процессе токенизации текста.
Откройте файл
/home/labex/project/texttokenizer.pyв текстовом редакторе.В начале файла импортируйте функцию
namedtupleиз модуляcollections:from collections import namedtupleОпределите класс
Tokenв качестве именованного кортежа с двумя атрибутами:typeиvalue.Token = namedtuple("Token", ["type", "value"])
Реализация функции generate_tokens
В этом шаге вы реализуете функцию generate_tokens, которая будет принимать входной текст и генерировать поток токенов.
В файле
texttokenizer.pyопределите функциюgenerate_tokens:def generate_tokens(text): ## Define token types and corresponding regular expressions token_specification = { "NAME": r"[a-zA-Z_][a-zA-Z_0-9]*", "NUM": r"\d+", "ADD": r"\+", "SUB": r"-", "MUL": r"\*", "DIV": r"/", "EQ": r"=", "WS": r"\s+", } ## Combine regular expressions into one large regular expression regex = "|".join("(?P<%s>%s)" % pair for pair in token_specification.items()) scanner = re.finditer(regex, text) for m in scanner: type = m.lastgroup value = m.group() yield Token(type, value)Функция
generate_tokensсначала определяет словарьtoken_specification, который сопоставляет типы токенов с их соответствующими регулярными выражениями.Затем она объединяет все регулярные выражения в одно большое регулярное выражение с использованием оператора
|.Функция затем использует функцию
re.finditerдля поиска всех совпадений в входном тексте и генерирует объектTokenдля каждого совпадения, с типом и значением токена.
Тестирование токенизации
В этом шаге вы будете тестировать функцию generate_tokens, разбирая пример текста.
В конце файла
texttokenizer.pyдобавьте следующий код:if __name__ == "__main__": text = "total = 1 + 2 * 3" tokens = list(generate_tokens(text)) print(tokens)Сохраните файл
texttokenizer.py.Запустите скрипт
texttokenizer.pyиз директории/home/labex/project:python texttokenizer.pyВывод должен быть списком объектов
Token, представляющих токены в входном тексте:[Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]
Поздравляем! Вы успешно реализовали функцию generate_tokens и протестировали ее на примере текста. В следующем шаге вы научитесь использовать функцию generate_tokens для токенизации большего текста.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.






