Создание базового токенизатора

Введение

Мы подробно рассмотрим одну из тем в обработке естественного языка: Токенизатор.

Цель этой статьи – подробно рассказать о том, как работает токенизация и как реализовать токенизатор. Основная идея заключается в том, чтобы разбить текстовый ввод на фрагменты, содержащие подробные, но полезные данные – они называются токенами.

https://t.me/data_analysis_ml – анализ данных наш телеграм канал

Создание базового токенизатора

“Сентенсирование”, или разделение входного текста на предложения, – это еще один шаг, который выполняется вместе с токенизацией текста. Важно иметь структуру предложений для определения частей речи, отношений зависимости и т.д. Разбиение на предложения может быть немного сложнее, чем разбиение на токены, поскольку структура текста более свободна, чем структура предложения (я имею в виду не в морфологических терминах, а скорее в графических).

Базовый приговор

Создание базового токенизатора

Basic Sentencizer будет создавать новое предложение при каждой точке, восклицательном или вопросительном знаке. Пользователь может изменить это, предоставив отдельный список символов.

Далее мы предоставляем специальный “тег” (delimiter_token) для разделения нашего текста, который будет добавляться рядом со знаками препинания. Для этого мы создаем специальный “тег” (DEFAULT: )

class BasicSentencizer:
    def __init__(self, input_text, split_characters=['.','?','!'], delimiter_token='<SPLIT>'):       
        self.sentences = []
        self.input_text = str(input_text)
        self._split_characters=split_characters
        self._delimiter_token=delimiter_token
        self._index=0
        self._sentencize()

    # For every iteration return the self object
    def __iter__(self):
        return self
    
    # For next iteration get the next sentence. 
    def __next__(self):
        if self._index < len(self.sentences):
            result = self.sentences[self._index]
            self._index += 1
            return result
        raise StopIteration
    
    def _sentencize(self):
        string_with_separator = self.input_text
        for character in self._split_characters:
            string_with_separator = string_with_separator.replace(character, character+" "+self._delimiter_token)
        self.sentences = [x.strip() for x in string_with_separator.split(self._delimiter_token) if x !='']

Этот класс разделяет предложения из входного текста и помещает их в массив предложений, которые можно перебирать с помощью класса iter.

Cons

Есть несколько проблем, которые возникают с предыдущим токенизатором:

  • Списочные числа, десятичные числа, цена: 1.2, 3.4 и т.д. …
  • Сокращения: и т.д. , т.е. A.I и т.д. …
  • Несколько последовательных восклицательных знаков, вопросительных знаков, несколько полных стоп: “Привет!!!”, “Как дела??”, “Жизнь продолжается ….”.

Будущие шаги

  • Создание надежного токенизатора, который преодолеет вышеупомянутые недостатки
  • Создать токенизатор на основе производства, подобный тем, которые мы видим в библиотеке NLTK.
  • Объяснить все доступные различные токенизаторы
  • Создайте распределенную очередь, которая вводит документы и производит токены. Также напишите функцию для хранения этих маркеров в базе данных no-SQL.

Заключение

Вот и все! Удивительное объяснение того, как создать простой токенизатор.

Спасибо что читаете!

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *