Подтвердить что ты не робот

Как использовать токенизатор по умолчанию для NLTK, чтобы получить пробелы вместо строк?

По умолчанию токенизатор NLTK, nltk.word_tokenizer, объединяет два токенизатора, токенизатор предложения, а затем слово токенизатор, который работает с предложениями. Он делает довольно хорошую работу из коробки.

>>> nltk.word_tokenize("(Dr. Edwards is my friend.)")
['(', 'Dr.', 'Edwards', 'is', 'my', 'friend', '.', ')']

Я хотел бы использовать этот же алгоритм, за исключением того, что он возвращает кортежи смещений в исходную строку вместо строковых токенов.

Посредством offset я подразумеваю 2-ples, которые могут служить индексами в исходной строке. Например, у меня было бы

>>> s = "(Dr. Edwards is my friend.)"
>>> s.token_spans()
[(0,1), (1,4), (5,12), (13,15), (16,18), (19,25), (25,26), (26,27)]

потому что s [0: 1] равно "(", s [1: 4] "Dr." и т.д.

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

4b9b3361

Ответ 1

Да, большинство Tokenizers в nltk имеют метод под названием span_tokenize, но, к сожалению, используемый вами токенизатор не работает.

По умолчанию функция word_tokenize использует TreebankWordTokenizer. Реализация TreebankWordTokenizer имеет довольно надежную реализацию, но в настоящее время ей не хватает реализации для одного важного метода span_tokenize.

Я не вижу реализации span_tokenize для TreebankWordTokenizer, поэтому считаю, что вам нужно будет реализовать свои собственные. Подкласс TokenizerI может сделать этот процесс немного менее сложным.

Вы можете найти способ span_tokenize PunktWordTokenizer полезен как начальная точка .

Я надеюсь, что эта информация поможет.