Можно ли удалить токен из документа spaCy во время обработки конвейера? - PullRequest
0 голосов
/ 10 февраля 2019

Я использую spaCy (отличную библиотеку Python NLP) для обработки ряда очень больших документов, однако в моем корпусе есть несколько общих слов, которые я хотел бы исключить в конвейере обработки документов.Есть ли способ удалить токен из документа в компоненте конвейера?

1 Ответ

0 голосов
/ 10 февраля 2019
Токенизация

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 с установленными атрибутами и массивом значений (все идентификаторы)..

...