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?
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.
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.