ich in ein interessantes Problem lief Wenn auf französisch Text Der Versuch wird in Token aufgeteilt mit NLTK (Version 3.1, Python 2.7). Hier ist der Code-Schnipsel ich verwende.UTF8-Codierung verloren nach-tokenising NLTK und mit Python 2.7
#python 2.7
from __future__ import division
import nltk, re, pprint
f= open('test.txt')
raw = f.read()
print "got it!"
print type(raw)
ucoderaw=raw.decode('utf-8')
print ucoderaw
tokens = nltk.word_tokenize(ucoderaw)
print type(tokens)
words = [w.lower() for w in tokens]
print type(words)
vocab = sorted(set(words))
print "Tokens"
Das Papier enthält einen französisch Text:
ich Grund zu der Annahme, dass Herr Voltaire wird es nicht bereuen, dass sein Manuskript zu sehen, die er den Titel Zusammenfassung von Universalgeschichte von Karl dem Großen an Karl V., und er sagte, zwischen Händen von dreißig Individuen, zwischen Mine fallen. Er weiß er mich von den 1742 Jahren geschmeichelt hatte, anlässlich sein Jahrhundert von Louis XIV, die ich im Jahr 1750 aufgegeben, weil er mir so in Potsdam gesagt, wo j ‚war, wie er es gedruckt sich auf eigene Kosten . So ist es hier nur zu sagen, wie das ist Zusammenfassung in meine Hände fiel, hier.
Bei meiner Rückkehr nach Paris, im Juni dieses 1753 Jahre, habe ich aufgehört zu Brüssel, wo ich die Ehre hatte, einen Verdienst Person zu sehen, wer der Eigentümer ist ich ihm zeigte, und ich habe auch alle erdenklichen Lob, sowie die Geschichte des Manuskripts, und alles, was zu während eines Warnung geschehen war, die in der eingeführt wird zweiten Ausgabe für Juni 1752 von Mercure de France, und im selben Jahr Épilogueur 31. Juli wiederholt, mit Antwort , die dort gemacht wurden, und das ist in dem gleichen Épilogueur 7 August nach Alle nutzlosen Dingen hier zu beachten, haben aber bestimmten mich dann die Hände dieses galanten Mannes zu kaufen Handwritten nach dem Autor angeboten, er überzeugte auch war in der Tat Herr Voltaire; sein Genie, sein Stil und vor allem Rechtschreibung darin überall. Habe ich es , weil bekannt ist, dass das Publikum die Mühe alles in der Welt hat , um sich daran zu gewöhnen; und das ist, was der Autor gefragt wird Vorwand zu wollen. [1]
Ich habe immer noch, dass die letzte Periode dieses Buch weisen darauf hin, es scheint, dass es das Ende dieser Zusammenfassung ist, die Karl VII, König von Frankreich, anstatt den Autor in endet verspricht der Titel bis Kaiser Karl V.. So wird vermutet, dass was folgen sollte diese anderen Teil der Geschichte ist, dass die Kunst betrifft, wäre es zu hoffen, dass Herr Voltaire retrouvât oder, besser gesagt, er das würde später Freude in öffentlichen und Buchhändler war bereit, es wieder zu tun, und schieben, bis Alter von Louis XIV, um seinen Plan zu erfüllen, und uns eine Geschichte zu geben.
Beim Versuch, diesen Text tokenise tokens = nltk.word_tokenize(ucoderaw)
verwenden und dann anschließend aus den Token gedruckt wird unter Verwendung von sorted(set(words))
I Ausganges mit gebrochener UTF-8-Codierung:
u‘ autant ', u'author', u'atres ', u'aux', u'available ', u'avait', u'avant ', u'avec', u'avertissement ', u'avoir', u 'avons', du'away ', u'ayant', u'barbare 'u'beaucoup', u'biblioth \ xe8que 'u'bien', u'bnf/gallica 'u'bornais', u'bruxelles', u'but', u'by‘, u "c'est" u'capet 'u'carri \ xe8re', u'ce 'u'cela', u'ces', u'cet 'u'cette', u'ceux‘ , u'chang \ xe9' , u'chaos', u'character 'u'charger', u'charlemagne 'u'charlequint', u'charles-quint_‘, u'chartes', u'chez 'u'chine', u'choses', u'chronologie 'u'chronologiques', u'chr \ xe9tienne', u'cl \ xf4ture‘
wo die korrekte Ausgabe enthalten sollte Akzente dh bibliothèque und nicht Biblioth \ xe8que
Ich habe versucht, herauszufinden, wie dieses Problem zu beheben, kurz die Ausgabe in eine Datei zu speichern und ein anderes Programm zu schreiben \ xe8 mit è und so weiter und so fort zu ersetzen.
Gibt es eine einfachere Methode?
EDIT: Nicht die sauberste Lösung, aber ich fand, dass durch tokenising und dann mit der richtigen Codierung, die Ausgabe in eine Datei zu speichern ich (vor allem den Ausgang benötigt werden):
#python 2.7
#-*- coding: utf-8 -*-
from __future__ import division
import nltk, re, pprint
f= open('test.txt')
raw = f.read()
print "got it!"
#print raw
print type(raw)
#encode as utf8 before moving on.
ucoderaw=raw.decode('utf-8')
tokens = nltk.word_tokenize(ucoderaw)
print type(tokens)
words = [w.lower() for w in tokens]
print type(words)
vocab = sorted(set(words))
print "encoded raw input is"
print ucoderaw
# GET TOKENS
print vocab
#write to file with correct encoding to "fix" the problem
output_file = open('output.txt', 'w')
print len(vocab)
for words in vocab:
output_file.write(words.encode('utf-8') + "\n")
Kurze Antwort: Verwenden 'python3' =) Längere Antwort: nicht verwenden 'open', benutze' io.open ('filename.txt', 'r', encoding = 'utf8') 'Bessere Antwort: siehe http://nedbatchelder.com/text/unipain.html und dann benutze' python3 '. – alvas