Как узнать, где соединить пробел в выходных данных spaCy NLP - PullRequest
2 голосов
/ 03 апреля 2019

Я использую модель spaCys NLP для обработки POS входных данных, чтобы мои цепочки Маркова могли быть немного более грамматически правильными, как в примере с библиотекой python markovify, найденной здесь . Однако то, как spaCy разделяет токены, затрудняет их реконструкцию, поскольку некоторые грамматические элементы также разделяются, например, "don't" становится ["do", "n't"]. Это означает, что вы не можете больше присоединяться к сгенерированным цепям Маркова просто через пробел, но вам нужно знать, составляют ли токены одно слово.

Я предположил, что свойства токенов is_left_punct и is_right_punct могут быть связаны с этим, но, похоже, это не связано. Мой текущий код просто учитывает PUNCT токенов, но проблема do n't сохраняется.

Есть ли свойство токенов, которое я могу использовать, чтобы указать методу, объединяющему предложения, когда пропускать пробелы или каким-либо другим способом узнать это?

1 Ответ

2 голосов
/ 03 апреля 2019

Пространственные токены имеют атрибут whitespace_, который всегда установлен.

Вы всегда можете использовать его, поскольку он будет представлять фактические пробелы, когда они присутствовали, или будет пустой строкой, если ее не было.

Это происходит в тех случаях, как вы упомянули, когда токенизация разбивает непрерывную строку.

Таким образом, Token("do").whitespace_ будет пустой строкой.

Например,

[bool(token.whitespace_) for token in nlp("don't")]

должен произвести

[False, False]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...