В каком-то месте моего кода мне нужно знать, какому количеству предложений принадлежит токен, поэтому я назначаю пользовательский атрибут следующим образом:
from spacy.tokens import Token
Token.set_extension('number', default=0)
После этого я хочу использоватьбыстрые циклы по токенам с Cython и доступ к этому атрибуту на уровне C ++.Я знаю, что у нас есть:
Token.get_struct_attr
, но, похоже, он не работает следующим образом:
def traverse_doc(Doc doc):
cdef int n_tokens = len(doc)
cdef tokens = []
cdef attr_hash = doc.vocab.strings.add('number')
for token in doc.c[:n_tokens]:
tokens.append(Token.get_struct_attr(&token, attr_hash))
Этот код создает следующий кортеж для каждого токена:
(0, None, None, None)
0 представляется значением атрибута по умолчанию, но при этом не учитывается значение, которое я назначаю этому атрибуту.
Как правильно обращаться к настраиваемым атрибутам?