Причина, по которой ваша логика не работает, заключается в том, что spaCy использует неразрушающую токенизацию. Это означает, что он всегда будет содержать ссылку на исходный вводимый текст, и вы никогда не потеряете никакой информации.
Исключения и особые случаи токенизатора позволяют определять правила разделения строки текста на последовательность токенов, но не позволяют изменять исходную строку. Значения ORTH
маркеров плюс пробел всегда должны соответствовать исходному тексту. Таким образом, токенизатор может разделить "isn't"
на ["is", "n't"]
, но не на ["is", "not"]
.
Чтобы определить «нормализованную» форму строки, spaCy использует атрибут NORM
, доступный как token.norm_
. Вы можете увидеть это в источнике исключений токенизатора здесь - норма жетона "n't"
это "not"
. Атрибут NORM
также используется как функция в модели, чтобы гарантировать, что токены с одинаковой нормой получат похожие представления (даже если один встречается в обучающих данных чаще, чем другой).
Поэтому, если вас интересует нормализованная форма, вы можете просто использовать вместо этого атрибут norm_
:
>>> [t.norm_ for t in doc]
['this', '.', 'is', 'not', 'ad', '-', 'versere']
person
Ines Montani
schedule
05.03.2018