python - tagger - obtener índices de texto original de nltk word_tokenize
pos tag nltk español (2)
Estoy tokenizando un texto usando nltk.word_tokenize y me gustaría también obtener el índice en el texto original sin formato 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 también la matriz [0, 7]
correspondiente a los índices brutos de los tokens?
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)
Creo que lo que estás buscando es el método span_tokenize()
. Aparentemente esto no es compatible con el tokenizador predeterminado. Aquí hay un ejemplo de código con otro tokenizer.
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 diferentes tokenizadores disponibles), consulte tokensize api docs