Nltk: word_tokenize reemplaza caracteres

Creado en 15 feb. 2017  ·  5Comentarios  ·  Fuente: nltk/nltk

Cuando se usa la función word_tokenize, las comillas se reemplazan por diferentes comillas.

Ejemplo (alemán):

import nltk
sentence = "\"Ja.\"" # sentence[0] = "
tokens = nltk.word_tokenize(sentence) #tokens[0] = ``
print(tokens[0] == sentence[0]) # Prints false.

¿Es esto un error o hay un razonamiento detrás de este comportamiento?

Comentario más útil

@mwess Después de algunas comprobaciones, la conversión de " a `` es un artefacto del tokenizador de palabras original de penn treebank .

Solo sucede cuando hay comillas dobles, las reglas de expresiones regulares que hacen las sustituciones son https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

Y en cuanto a las comillas simples, el tokenizador de treebank STARTING_QUOTES regexes vemos que no indica direccionalidad. Creo que esto se mantiene en consonancia con las anotaciones de Penn Treebank.

Espero que las aclaraciones ayuden.

Todos 5 comentarios

Sí, esa es la salida esperada. La puntuación de las comillas dobles cambia para denotar explícitamente las comillas dobles de apertura y cierre. Los " apertura se convierten en 2x comillas inversas y el cierre en 2x comillas simples.

>>> from nltk import word_tokenize
>>> sent = '"this is a sentence inside double quotes."'
>>> word_tokenize(sent)
['``', 'this', 'is', 'a', 'sentence', 'inside', 'double', 'quotes', '.', "''"]
>>> word_tokenize(sent)[0]
'``'

>>> len(word_tokenize(sent)[0])
2
>>> word_tokenize(sent)[0] == '`'*2
True

>>> len(word_tokenize(sent)[-1])
2
>>> word_tokenize(sent)[-1] == "'" * 2
True

Sin embargo, no estoy seguro de cuál es la razón del comportamiento. Posiblemente, sea explícito al identificar las cotizaciones de apertura / cierre.

Gracias por la explicación.
Pero cuando reemplazo las comillas dobles con una (o dos) comillas simples o comillas inversas, este comportamiento no ocurre.
Y creo que es un poco extraño que el tokenizador cambie partes del texto original, ya que podría generar problemas y no es realmente transparente.

Supongo que tendré que tenerlo en cuenta, pero preferiría que los elementos originales de la cadena sigan siendo los mismos.

@mwess Después de algunas comprobaciones, la conversión de " a `` es un artefacto del tokenizador de palabras original de penn treebank .

Solo sucede cuando hay comillas dobles, las reglas de expresiones regulares que hacen las sustituciones son https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

Y en cuanto a las comillas simples, el tokenizador de treebank STARTING_QUOTES regexes vemos que no indica direccionalidad. Creo que esto se mantiene en consonancia con las anotaciones de Penn Treebank.

Espero que las aclaraciones ayuden.

Muchísimas gracias. Realmente ayuda mucho.

En muchas aplicaciones no se recomienda alterar el texto original. Ojalá el word_tokenize tuviera una bandera para desactivar la alteración del texto.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

stevenbird picture stevenbird  ·  3Comentarios

stevenbird picture stevenbird  ·  4Comentarios

alvations picture alvations  ·  4Comentarios

jeryini picture jeryini  ·  5Comentarios

goodmami picture goodmami  ·  4Comentarios