web-dev-qa-db-fra.com

Python NLTK: SyntaxError: Caractère non-ASCII '\ xc3' dans le fichier (Sentiment Analysis -NLP)

Je suis en train de jouer avec NLTK pour faire un travail d'analyse de sentiment. J'utilise Python 2.7. Version 3.0 de NLTK et NUMPY 1.9.1.

C'est le code:

__author__ = 'karan'
import nltk
import re
import sys



def main():
    print("Start");
    # getting the stop words
    stopWords = open("english.txt","r");
    stop_Word = stopWords.read().split();
    AllStopWrd = []
    for wd in stop_Word:
        AllStopWrd.append(wd);
    print("stop words-> ",AllStopWrd);

    # sample and also cleaning it
    Tweet1= 'Love, my new toyí ½í¸í ½í¸#iPhone6. Its good http://t.co/sHY1cab7sx'
    print("old Tweet-> ",Tweet1)
    Tweet1 = Tweet1.lower()
    Tweet1 = ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",Tweet1).split())
    print(Tweet1);
    tw = Tweet1.split()
    print(tw)


    #tokenize
    sentences = nltk.Word_tokenize(Tweet1)
    print("tokenized ->", sentences)


    #remove stop words
    Otweet =[]
    for w in tw:
        if w not in AllStopWrd:
            Otweet.append(w);
    print("sans stop Word-> ",Otweet)


    # get taggers for neg/pos/inc/dec/inv words
    taggers ={}
    negWords = open("neg.txt","r");
    neg_Word = negWords.read().split();
    print("ned words-> ",neg_Word)
    posWords = open("pos.txt","r");
    pos_Word = posWords.read().split();
    print("pos words-> ",pos_Word)
    incrWords = open("incr.txt","r");
    inc_Word = incrWords.read().split();
    print("incr words-> ",inc_Word)
    decrWords = open("decr.txt","r");
    dec_Word = decrWords.read().split();
    print("dec wrds-> ",dec_Word)
    invWords = open("inverse.txt","r");
    inv_Word = invWords.read().split();
    print("inverse words-> ",inv_Word)
    for nw in neg_Word:
        taggers.update({nw:'negative'});
    for pw in pos_Word:
        taggers.update({pw:'positive'});
    for iw in inc_Word:
        taggers.update({iw:'inc'});
    for dw in dec_Word:
        taggers.update({dw:'dec'});
    for ivw in inv_Word:
        taggers.update({ivw:'inv'});
    print("tagger-> ",taggers)
    print(taggers.get('little'))

    # get parts of speech
    posTagger = [nltk.pos_tag(tw)]
    print("posTagger-> ",posTagger)

main();

Voici l'erreur que je reçois lors de l'exécution de mon code:

SyntaxError: Non-ASCII character '\xc3' in file C:/Users/karan/PycharmProjects/mainProject/sentiment.py on line 19, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Comment puis-je corriger cette erreur?

J'ai aussi essayé le code en utilisant Python 3.4.2 et avec nltk 3.0 et NumPy 1.9.1, mais j'ai l'erreur suivante:

Traceback (most recent call last):
  File "C:/Users/karan/PycharmProjects/mainProject/sentiment.py", line 80, in <module>
    main();
  File "C:/Users/karan/PycharmProjects/mainProject/sentiment.py", line 72, in main
    posTagger = [nltk.pos_tag(tw)]
  File "C:\Python34\lib\site-packages\nltk\tag\__init__.py", line 100, in pos_tag
    tagger = load(_POS_TAGGER)
  File "C:\Python34\lib\site-packages\nltk\data.py", line 779, in load
    resource_val = pickle.load(opened_resource)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128)
51
rkbom9

Ajoutez ce qui suit en haut de votre fichier # coding=utf-8

Si vous allez au lien dans l'erreur, vous pouvez voir pourquoi:

Définition du codage

Python utilisera par défaut ASCII comme codage standard si aucun autre conseil de codage n'est donné. Pour définir un codage de code source, un commentaire magique doit être placé dans le code source. fichiers en tant que première ou deuxième ligne du fichier, tels que: # coding =

138
Padraic Cunningham