Токенизация текста с использованием Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь реализовывать систему токенизации текста с использованием 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, который будет представлять токены в процессе токенизации текста.

  1. Откройте файл /home/labex/project/texttokenizer.py в текстовом редакторе.

  2. В начале файла импортируйте функцию namedtuple из модуля collections:

    from collections import namedtuple
  3. Определите класс Token в качестве именованного кортежа с двумя атрибутами: type и value.

    Token = namedtuple("Token", ["type", "value"])

Реализация функции generate_tokens

В этом шаге вы реализуете функцию generate_tokens, которая будет принимать входной текст и генерировать поток токенов.

  1. В файле 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)
  2. Функция generate_tokens сначала определяет словарь token_specification, который сопоставляет типы токенов с их соответствующими регулярными выражениями.

  3. Затем она объединяет все регулярные выражения в одно большое регулярное выражение с использованием оператора |.

  4. Функция затем использует функцию re.finditer для поиска всех совпадений в входном тексте и генерирует объект Token для каждого совпадения, с типом и значением токена.

Тестирование токенизации

В этом шаге вы будете тестировать функцию generate_tokens, разбирая пример текста.

  1. В конце файла texttokenizer.py добавьте следующий код:

    if __name__ == "__main__":
        text = "total = 1 + 2 * 3"
        tokens = list(generate_tokens(text))
        print(tokens)
  2. Сохраните файл texttokenizer.py.

  3. Запустите скрипт texttokenizer.py из директории /home/labex/project:

    python texttokenizer.py
  4. Вывод должен быть списком объектов 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, чтобы улучшить свои навыки.