Заставить spacy nlp.pipe обрабатывать кортежи текста и дополнительную информацию для добавления в качестве функций документа?

Очевидно, for doc in nlp.pipe(sequence) работает намного быстрее, чем for el in sequence: doc = nlp(el) ...

Моя проблема заключается в том, что моя последовательность на самом деле представляет собой последовательность кортежей, которые содержат текст для преобразования в документ, а также дополнительную информацию, которую я хотел бы получить в документе в виде атрибутов документа (которые я бы зарегистрировал для Док).

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


person jpp1    schedule 16.07.2019    source источник


Ответы (1)


Похоже, вы ищете аргумент as_tuples для nlp.pipe? Если вы установите as_tuples=True, вы можете передать поток из (text, context) кортежей, а spaCy выдаст (doc, context) кортежей (вместо Doc объектов). Затем вы можете использовать контекст и добавить его в пользовательские атрибуты и т. д.

Вот пример:

data = [
  ("Some text to process", {"meta": "foo"}),
  ("And more text...", {"meta": "bar"})
]

for doc, context in nlp.pipe(data, as_tuples=True):
    # Let's assume you have a "meta" extension registered on the Doc
    doc._.meta = context["meta"]
person Ines Montani    schedule 17.07.2019
comment
Спасибо, но нет способа получить доступ к контексту внутри конвейера, который запускается при выполнении nlp.pipe? Моя первоначальная идея заключалась в том, чтобы выполнять всю обработку, добавляя к конвейеру свои собственные процессоры, но в этом случае мне пришлось бы пройти более одного конвейера. - person jpp1; 18.07.2019