@ bboyjacks: Спасибо, что ответили на этот интересный вопрос .
Я просто хочу сообщить вам, что это не относится конкретно к фреймворку spaCy, оно больше связано с концепциями python.
Ответ, предоставленный @John La Rooy выше, является правильным, но я поместил свою версию, как вы и то же, спрашивали и в сообществе spaCy (это может внести некоторую ясность в решение).
Пожалуйста, проверьте мой ответ ниже:
print(a) # prints -> {This, test, is}
print(b) # prints -> is
Так что, похоже, оператор 'in' должен работать, но выгода ниже:
print(type(a)) # prints -> <class 'set'>
print(type(a.pop())) # prints -> <class 'spacy.tokens.token.Token'>
print(type(b)) # prints -> <class 'spacy.tokens.doc.Doc'>
Объект с типом [spacy.tokens.doc.Doc] == Объект с типом
[spacy.tokens.token.Token] всегда возвращает ' False '
Нам нужно как-то преобразовать их в один и тот же тип, и, поскольку мы не уверены в том, что метод равенства, определенный в классах Token или Doc, предоставляемых spaCy, просто преобразует оба в класс str.
Это преобразование может быть выполнено, как показано выше @John La Rooy, или вы также можете попробовать выполнить полный код ниже.
import spacy
nlp = spacy.load('en')
a = set(nlp('This is a test'))
b = nlp('is')
if b.text in map(lambda token: token.text, a):
print("Success")
else:
print("Failed")
Не стесняйтесь комментировать для любых дальнейших разъяснений, мои ответы могут иметь некоторую задержку, но я постараюсь ответить.