obtener índices del texto original de nltk word_tokenize

Estoy tokenizing un texto usando nltk.word_tokenize y me gustaría también obtener el índice en el texto original sin procesar al primer carácter de cada token, es decir

import nltk x = 'hello world' tokens = nltk.word_tokenize(x) >>> ['hello', 'world'] 

¿Cómo puedo obtener la matriz [0, 7] correspondiente a los índices en bruto de los tokens?

Creo que lo que estás buscando es el método span_tokenize() . Al parecer, esto no es compatible con el tokenizador predeterminado. Aquí hay un ejemplo de código con otro tokenizador.

 from nltk.tokenize import WhitespaceTokenizer s = "Good muffins cost $3.88\nin New York." span_generator = WhitespaceTokenizer().span_tokenize(s) spans = [span for span in span_generator] print(spans) 

Lo que da:

 [(0, 4), (5, 12), (13, 17), (18, 23), (24, 26), (27, 30), (31, 36)] 

acaba de obtener las compensaciones:

 offsets = [span[0] for span in spans] [0, 5, 13, 18, 24, 27, 31] 

Para obtener más información (sobre los distintos tokenizadores disponibles), consulte la tokenize api docs

También puedes hacer esto:

 def spans(txt): tokens=nltk.word_tokenize(txt) offset = 0 for token in tokens: offset = txt.find(token, offset) yield token, offset, offset+len(token) offset += len(token) s = "And now for something completely different and." for token in spans(s): print token assert token[0]==s[token[1]:token[2]] 

Y obten:

 ('And', 0, 3) ('now', 4, 7) ('for', 8, 11) ('something', 12, 21) ('completely', 22, 32) ('different', 33, 42) ('.', 42, 43)