La segmentation unicode à l'aide de nltk
J'ai les fichiers texte que d'utiliser l'encodage utf-8 qui contiennent des caractères comme 'ö', 'ü', etc. Je voudrais analyser le texte de la forme de ces fichiers, mais je ne peux pas obtenir le tokenizer pour fonctionner correctement. Si j'utilise la norme nltk générateur de jetons:
f = open('C:\Python26\text.txt', 'r') # text = 'müsli pöök rääk'
text = f.read()
f.close
items = text.decode('utf8')
a = nltk.word_tokenize(items)
De sortie: [u'\ufeff', u'm', u'\xfc', u'sli', u'p', u'\xf6', u'\xf6', u'k', u'r', u'\xe4', u'\xe4', u'k']
Punkt tokenizer semble faire de mieux:
f = open('C:\Python26\text.txt', 'r') # text = 'müsli pöök rääk'
text = f.read()
f.close
items = text.decode('utf8')
a = PunktWordTokenizer().tokenize(items)
de sortie: [u'\ufeffm\xfcsli', u'p\xf6\xf6k', u'r\xe4\xe4k']
Il est encore "\ufeff " avant le premier élément que je ne peux pas comprendre (non pas que je ne peux pas le supprimer). Ce que je fais mal? Aider grandement apprécié.
Vous devez vous connecter pour publier un commentaire.
Il est plus probable que la
\uFEFF
char est une partie du contenu de lire le fichier. Je doute qu'il a été inséré par l'tokeniser.\uFEFF
au début d'un fichier est obsolète forme de Marque D'Ordre D'Octet. Si il apparaît de nulle part ailleurs, puis il est traité comme un largeur nulle de non-pause de l'espace.Le dossier était écrit par le bloc-notes Microsoft? De les codecs module docs:
Essayez de lire votre fichier à l'aide de
codecs.open()
à la place. Remarque le"utf-8-sig"
encodage qui consomme de la NOMENCLATURE.Expérience:
Vous devez vous assurer que vous êtes en passant des chaînes unicode pour nltk des générateurs de jetons. J'ai le identique tokenizations de votre chaîne à la fois avec des générateurs de jetons sur ma fin:
la UFEE code est un "ZÉRO de la LARGEUR de NO-BREAK SPACE" caractère et ce n'est pas considérer comme un espace par la
re
module, de sorte que lePunktWordTokenizer()
qui utiliser les regexr'\w+|[^\w\s]+'
avec unicode et dotall drapeaux reconnaître ce caractère comme un mot. Si vous ne souhaitez pas supprimer le caractère manuellement, vous pouvez utiliser les éléments suivants générateur de jetons: