Привет читатели
Создает ли у вас проблемы при обработке большого количества текстовых данных? Вы запускаете миллион записей за миллионы раз? Между запуском программы и получением результата проходит вечность?
Вуаля (барабанная дробь): представляем просторные конвейеры
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 предпочитает такой формат, поскольку он преобразует его в хеш-значения и использует их для более быстрых вычислений. Удачи с вашим блюдом.
Удачного кодирования !!!