2014-11-13 11 views
27

Gram z NLTK, aby wykonać zadanie dotyczące analizy sentymentów. Używam Pythona 2.7. Wersja NLTK 3.0 i NUMPY 1.9.1.Python NLTK: SyntaxError: Brak znaku ASCII " xc3" w pliku (Analiza sensu -NLP)

Jest to kod:

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

Jest to błąd, który otrzymuję podczas jazdy mój kod:

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 

jak naprawić ten błąd?

Próbowałem też kod za pomocą Python 3.4.2 i NLTK 3,0 i NumPy 1.9.1 ale potem pojawia się błąd:

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) 

Odpowiedz

86

dodać następujące górze pliku # coding=utf-8

Jeśli pójdziesz do łącza w błędzie można widział przyczynę:

Definiowanie kodowania

Python domyślnie przyjmuje kodowanie ASCII jako standardowe kodowanie, jeśli nie podano innych wskazówek kodowania . Aby zdefiniować kodowanie kodu źródłowego, magiczne Komentarz musi być umieszczone w plikach źródłowych albo jako pierwszego lub drugiego linii w pliku, takie jak: # kodowanie =

+0

Ok, jestem bardzo początkujących w Pythonie i miałem "u" "na tej samej linii z' u "' " –

+0

@IulianOnofrei, dla' u "ã" 'musisz zadeklarować kodowanie. Czy pojawił się błąd? –

+0

@PadraicCunningham, deklaruję to za pomocą 'codecs.encode (u" ã "," utf-8 ")', błąd pochodził z 'u" a "_ _ (po dodaniu magicznego komentarza, ofc) _, więc wszystko jest teraz dobrze, dzięki. –

Powiązane problemy