2014-11-13 5 views
27

Sto giocando con NLTK per eseguire un compito sull'analisi dei sentimenti. Sto usando Python 2.7. Versione NLTK 3.0 e NUMPY 1.9.1.Python NLTK: SyntaxError: carattere non ASCII ' xc3' nel file (Senitment Analysis -NLP)

Questo è un codice:

__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(); 

Questo è l'errore che sto ottenendo quando si esegue il mio codice:

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 

Come posso correggere questo errore?

Ho anche provato il codice utilizzando Python 3.4.2 e con NLTK 3.0 e 1.9.1 NumPy ma poi ho l'errore:

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) 

risposta

86

Aggiungere il seguente alla parte superiore del file # coding=utf-8

Se vai al link nell'errore è possibile vedere il motivo per cui:

Definire la codifica

Python verrà impostato come predefinito in ASCII come codifica standard se non vengono forniti altri suggerimenti per la codifica . Per definire una codifica il codice sorgente, un commento magia deve essere collocato nei file di origine sia come prima o seconda linea nel file, come ad esempio: # codifica =

+0

Ok, sono molto newbie in pitone e ho avuto "u" un "' sulla stessa riga con 'u" ã "' –

+0

@IulianOnofrei, per 'u" ã "' dovresti dichiarare la codifica. Hai ricevuto un errore? –

+0

@PadraicCunningham, lo dichiaro usando 'codecs.encode (u" ã "," utf-8 ")', l'errore è venuto da "u" a "' _ (dopo aver aggiunto il commento magico, ofc) _, quindi tutto va bene ora, grazie. –

Problemi correlati