Привет читатели

Создает ли у вас проблемы при обработке большого количества текстовых данных? Вы запускаете миллион записей за миллионы раз? Между запуском программы и получением результата проходит вечность?

Вуаля (барабанная дробь): представляем просторные конвейеры

Spacy: Введение в нашего спасителя в нескольких строках

Spacy - это бесплатная библиотека Python с открытым исходным кодом. Он написан на Cython и создан для извлечения языковых функций и помощи в его обработке или, короче, в приложениях NLP. Ага, мы можем заставить машину нас понять.

Для установки Spacy используйте команду:

pip install spacy

Spacy Pipelines: пояс для Бэтмена НЛП

Как и любые конвейеры, направляющие поток воды, конвейеры spaCy направляют поток текстовых данных.

Пространственные конвейеры предоставляют возможность настройки, поэтому можно добавлять или удалять любые компоненты конвейеров в соответствии с их требованиями. Это одна из основных причин, почему он работает быстрее - если вам не нужен компонент, выбросьте его. Не нужно использовать память. Довольно эффективно, не правда ли?

Так что давайте прямо в это

Инициализация конвейеров

import spacy
nlp = spacy.load('en_core_web_sm')

Коротко о компонентах

Как трейлер к любому фильму, вы можете просматривать компоненты конвейера: используйте команду nlp.pipeline, которая возвращает список кортежей, содержащих имя компонента и сам компонент.

print(nlp.pipeline)

Вывод :

[('tok2vec', <spacy.pipeline.tok2vec.Tok2Vec at 0x13b097fd228>),
 ('tagger', <spacy.pipeline.tagger.Tagger at 0x13b097fd408>),
 ('parser', <spacy.pipeline.dep_parser.DependencyParser at 0x13b0654a3c8>),
 ('attribute_ruler',
  <spacy.pipeline.attributeruler.AttributeRuler at 0x13b05e47888>),
 ('lemmatizer', <spacy.lang.en.lemmatizer.EnglishLemmatizer at 0x13b05f16e88>),
 ('ner', <spacy.pipeline.ner.EntityRecognizer at 0x13b0654a208>)]

В то время как nlp.pipe_names возвращает все имена компонентов в списке.

nlp.pipe_names

Вывод :

['tok2vec', 'tagger', 'parser', 'attribute_ruler', 'lemmatizer', 'ner']

Список компонентов:

Настройка конвейера: добавляем в него свой собственный поворот

Хотя spacy обеспечивает поток для текстовых данных, можно добавлять свои собственные компоненты или удалять существующие.

Гибкость конвейера - его ключевая особенность. Если вам не нужен определенный компонент, вы можете его удалить. Вы можете сделать это:

nlp = spacy.load('en_core_web_sm', disable=['tagger', 'parser', 'ner']) # the disable command disables the command we do not require.
print(nlp.pipeline)

Вывод

[('tok2vec', <spacy.pipeline.tok2vec.Tok2Vec at 0x13b08187a08>),
 ('attribute_ruler',
  <spacy.pipeline.attributeruler.AttributeRuler at 0x13b07a75508>),
 ('lemmatizer', <spacy.lang.en.lemmatizer.EnglishLemmatizer at 0x13b07a823c8>)]

Вы также можете добавить в конвейер настраиваемую функцию. Вы можете сделать это:

from spacy.language import Language
@Language.component("component1")
def lemmatize(doc):
    lemma_list = [str(tok.lemma_).lower() for tok in doc
                  if tok.is_alpha and tok.text.lower() not in removal_words ]
    return lemma_list
nlp.add_pipe("component2")
print(nlp.pipe_names)

Аргумент add_pipe используется для определения позиции, в которую вы хотите добавить компонент в конвейер. По умолчанию он добавляется в конец конвейера. Вы можете управлять позиционированием, используя следующие атрибуты:

Вывод :

['tok2vec', 'attribute_ruler', 'lemmatizer', 'component1']

Комбинируя следующие ингредиенты, вы можете подготовить собственный конвейер spaCy. Помните, что можно добавлять сколько угодно компонентов. Особое внимание следует уделять сохранению ввода в формате документа как можно дольше. Spacy предпочитает такой формат, поскольку он преобразует его в хеш-значения и использует их для более быстрых вычислений. Удачи с вашим блюдом.

Удачного кодирования !!!