Nltk: word_tokenize remplace les caractères

Créé le 15 févr. 2017  ·  5Commentaires  ·  Source: nltk/nltk

Lorsque vous utilisez la fonction word_tokenize, les guillemets sont remplacés par des guillemets différents.

Exemple (allemand) :

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

Est-ce un bug ou y a-t-il un raisonnement derrière ce comportement ?

Commentaire le plus utile

@mwess Après quelques vérifications, la conversion de " en `` est un artefact du tokenizer de mot penn treebank original .

Cela ne se produit que lorsqu'il y a des guillemets doubles, les règles regex qui effectuent les substitutions sont https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

Et comme pour les guillemets simples, le treebank tokenizer STARTING_QUOTES regex nous voyons qu'il n'indique pas la directionnalité. Je pense que cela reste cohérent avec les annotations de Penn Treebank.

J'espère que les éclaircissements seront utiles.

Tous les 5 commentaires

Oui, c'est le résultat attendu. La ponctuation des guillemets doubles change pour indiquer explicitement les guillemets doubles d'ouverture et de fermeture. Les " ouverture sont convertis en 2x backticks et les fermetures en 2x guillemets 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

Je ne sais pas quelle est la raison de ce comportement cependant. C'est peut-être pour être explicite lors de l'identification des guillemets d'ouverture/fermeture.

Merci pour l'explication.
Mais lorsque je remplace les guillemets doubles par un (ou deux) guillemets simples ou backticks, ce comportement ne se produit pas.
Et je pense qu'il est un peu étrange que le tokenizer remplace des parties du texte original, car cela pourrait entraîner des problèmes et n'est pas vraiment transparent.

Je suppose que je devrai le garder à l'esprit, mais je préférerais que les éléments d'origine de la chaîne restent les mêmes.

@mwess Après quelques vérifications, la conversion de " en `` est un artefact du tokenizer de mot penn treebank original .

Cela ne se produit que lorsqu'il y a des guillemets doubles, les règles regex qui effectuent les substitutions sont https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

Et comme pour les guillemets simples, le treebank tokenizer STARTING_QUOTES regex nous voyons qu'il n'indique pas la directionnalité. Je pense que cela reste cohérent avec les annotations de Penn Treebank.

J'espère que les éclaircissements seront utiles.

Merci beaucoup. Cela aide vraiment beaucoup.

La modification du texte original n'est pas recommandée dans de nombreuses applications. Je souhaite que le word_tokenize ait un indicateur pour désactiver la modification du texte.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Chris00 picture Chris00  ·  3Commentaires

DavidNemeskey picture DavidNemeskey  ·  4Commentaires

libingnan54321 picture libingnan54321  ·  3Commentaires

peterbe picture peterbe  ·  5Commentaires

alvations picture alvations  ·  4Commentaires