Nltk: word_tokenize substitui caracteres

Criado em 15 fev. 2017  ·  5Comentários  ·  Fonte: nltk/nltk

Ao usar a função word_tokenize, as aspas são substituídas por aspas diferentes.

Exemplo (alemão):

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

Isso é um bug ou há um motivo por trás desse comportamento?

Comentários muito úteis

@mwess Após algumas verificações, a conversão de " para `` é um artefato do tokenizer de palavras penn treebank original .

Isso só acontece quando há aspas duplas, as regras regex que fazem as substituições são https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

E quanto às aspas simples, o treebank tokenizer STARTING_QUOTES regexes, vemos que ele não indica direcionalidade. Eu acho que isso é mantido para ser consistente com as anotações de Penn Treebank.

Espero que os esclarecimentos ajudem.

Todos 5 comentários

Sim, essa é a saída esperada. A pontuação das aspas duplas muda para denotar explicitamente a abertura e o fechamento das aspas duplas. Os " abertura são convertidos em 2x crases e fechando em 2x aspas 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

Não tenho certeza de qual é o motivo desse comportamento. Possivelmente, deve ser explícito ao identificar as cotações de abertura / fechamento.

Obrigada pelo esclarecimento.
Mas quando eu substituo as aspas duplas por uma (ou duas) aspas simples ou crase, esse comportamento não ocorre.
E eu acho um pouco estranho que o tokenizer troque partes do texto original, pois isso pode levar a problemas e não é realmente transparente.

Acho que vou ter que manter isso em mente, mas prefiro que os elementos originais da corda permaneçam os mesmos.

@mwess Após algumas verificações, a conversão de " para `` é um artefato do tokenizer de palavras penn treebank original .

Isso só acontece quando há aspas duplas, as regras regex que fazem as substituições são https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

E quanto às aspas simples, o treebank tokenizer STARTING_QUOTES regexes, vemos que ele não indica direcionalidade. Eu acho que isso é mantido para ser consistente com as anotações de Penn Treebank.

Espero que os esclarecimentos ajudem.

Muito obrigado. Na verdade, ajuda muito.

Alterar o texto original não é recomendado em muitos aplicativos. Gostaria que word_tokenize tivesse um sinalizador para desligar alterando o texto.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

alvations picture alvations  ·  4Comentários

zdog234 picture zdog234  ·  3Comentários

DavidNemeskey picture DavidNemeskey  ·  4Comentários

chaseireland picture chaseireland  ·  3Comentários

Zaazik picture Zaazik  ·  5Comentários