Токенизация
spaCy неразрушающая , поэтому она всегда представляет исходный текст ввода и никогда ничего не добавляет и не удаляет.Это своего рода основной принцип объекта Doc
: вы должны всегда иметь возможность восстанавливать и воспроизводить исходный текст ввода.
Пока вы можете работатьвокруг этого обычно есть лучшие способы достигнуть того же самого, не нарушая входной текст ↔ Doc
согласованность текста.Одним из решений может быть добавление настраиваемого атрибута расширения , подобного is_excluded
, к токенам в зависимости от цели, которую вы хотите использовать:
from spacy.tokens import Token
def get_is_excluded(token):
# Getter function to determine the value of token._.is_excluded
return token.text in ['some', 'excluded', 'words']
Token.set_extension('is_excluded', getter=get_is_excluded)
При обработке Doc
вытеперь можно отфильтровать его, чтобы получить только те токены, которые не исключены:
doc = nlp("Test that tokens are excluded")
print([token.text for token if not token._.is_excluded])
# ['Test', 'that', 'tokens', 'are']
Вы также можете сделать это более сложным, используя Matcher
или PhraseMatcher
, чтобы найти последовательноститокены в контексте и пометьте их как исключенные.
Кроме того, для полноты: если вы хотите изменить токены в Doc
, вы можете добиться этого, создав новый Doc
объект с words
(список строк) и необязательный spaces
(список логических значений, указывающих, следует ли за токеном пробел или нет).Чтобы создать Doc
с атрибутами, такими как теги части речи или метки зависимостей, вы можете затем вызвать метод Doc.from_array
с установленными атрибутами и массивом значений (все идентификаторы)..