2015-12-23 3 views
1
import pypyodbc 
    from pypyodbc import * 
    import nltk 
    from nltk import * 
    import csv 
    import sys 
    import codecs 
    import re 

    #connect to the database 
    conn = pypyodbc.connect('Driver={Microsoft Access Driver (*.Mdb)};\ 
      DBQ=C:\\TextData.mdb') 

    #create a cursor to control the datbase with 
    cur = conn.cursor() 

    cur.execute('''SELECT Text FROM MessageCreationDate WHERE Tags LIKE 'GHS - %'; ''') 
    TextSet = cur.fetchall() 
    ghsWordList = [] 
    TextWords = list(TextSet) 

    for row in TextWords : 
     message = re.split('\W+',str(row)) 
     for eachword in message : 
      if eachword.isalpha() : 
       ghsWordList.append(eachword.lower()) 

    print(ghsWordList) 

Когда я запускаю этот код, он дает мне ошибку:Python Кодирование NLTK - «CharMap» кодек не может кодировать символ

'charmap' codec can't encode character '\u0161' in position 2742: character maps to <undefined> 

Я смотрел на ряд других ответов здесь к подобным вопросам, и оттащил его отсюда; однако я недостаточно разбираюсь в Python или Кодировка символов знать, где мне нужно использовать модуль Codecs, чтобы изменить набор символов, используемый для представления/добавления/создания списка?

Может ли кто-то не только помочь мне с кодом, но и указать мне прямо из некоторых хороших материалов для чтения для понимания такого рода вещей?

+1

Возможный дубликат кодека UnicodeEncodeError: 'charmap' не может кодировать символы символов в , функция печати] (http://stackoverflow.com/questions/14630288/unicodeencodeerror-charmap-codec-cant-encode-character -maps-to-undefined) – roeland

+0

Какая строка выдает исключение? –

+0

Также. Что такое операционная система? –

ответ

0

Если вы используете Python 2.x, добавьте следующие строки в код:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

Примечание: если вы используете Python 3.x, перезарядка не встроенный , это imp.relaod(), поэтому для моего решения нужно добавить импорт. Я не развиваюсь в 3.x, поэтому мое предложение:

from imp import reload 
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

Место это впереди всех ваших других импортов.

+0

Хотя это может избежать UnicodeEncodeError, оно, вероятно, напечатает mojibake на консоли, если будут напечатаны любые символы, отличные от ASCII. – roeland

+0

Благодарим вас за ответ! Я пробовал это без успеха, я получил ошибку «name reload is not defined» как ошибку. –

+0

Сэмюэл Джексон, проверьте расширение моего ответа выше. –