2013-11-24 3 views
2

Мне нужно работать с текстом, словами, такими как сравнение слов со словарем ... и у меня проблема с кодировкой. txt-файл - utf-8, код тоже utf-8. Проблема заключается в том, чтобы расщепляться на слова с такими символами, как š, č, ť, á, ... Я пытался кодировать и декодировать и искать в Интернете, но я не знаю, что с ним делать. Я посмотрел на файловую систему, это mbcs, а defaultencoding - utf-8. Можете ли вы мне помочь? Код ниже - первая версия.неправильная кодировка текста в python

#!/usr/bin/env python 
    # -*- coding: utf-8 -*- 

    f = open("text.txt", "r+") 

    text = f.read() 

    sentences = re.split("[.!?]\s", text) 

    words = re.split("\s", sentences[0]) 

    print sentences[0] 
    print words 

и результат:

Nexus 5 patrí v sučasnosti medzi a najlepšie aj smartfóny 

['\xef\xbb\xbfNexus', '5', 'patr\xc3\xad', 'su\xc4\x8dasnosti', 'medzi', 'najlep\xc5\xa1ie', 'smartf\xc3\xb3ny'] 

Когда я использую:

f = codecs.open("text.txt", "r+", encoding="utf-8") 

результат:

Nexus 5 patrí v sučasnosti medzi a najlepšie aj smartfóny 

[u'\ufeffNexus', u'5', u'patr\xed', u'su\u010dasnosti', u'medzi', u'najlep\u0161ie', u'smartf\xf3ny'] 

и мне нужен выход, как:

['Nexus', '5', 'patrí', 'v', 'súčastnosti',....] 
+0

У вас есть строки в Юникоде в списке. Если вы не хотите печатать представления, не печатайте контейнер списка, а каждый элемент отдельно. –

+0

ОК теперь я вижу, но когда я хочу сравнить каждый элемент списка со словарем, чтобы найти совпадение, он будет работать нормально? – TheBP

+0

Вы должны использовать литералы unicode для тестирования, но да. –

ответ

1

Обработка кодировки верна, u'patr\xed' - это просто представление строки юникода в Python. Попробуйте print u'patr\xed' в оболочке, чтобы увидеть сам.

Сказав, что, как вы, кажется, хотите использовать его в качестве словаря, может быть полезно использовать модуль unidecode для нормализации строк Unicode для ASCII.

+0

Я хочу сравнить его с distionary, чтобы найти матч. Как установить unicode с окнами? Существует только пакет Linux. – TheBP

+0

Я думаю, что лучший способ - установить [install pip] (http://stackoverflow.com/questions/4750806/how-to-install-pip-on-windows), а затем просто запустить команду 'pip install unidecode'. Unidecode хорошо подходит именно вам, вы можете использовать его для нормализации словарных слов в ASCII, а затем позже вы можете сделать то же самое с словом, которое хотите найти, и посмотреть, находится ли он в вашем словаре. – elias

Смежные вопросы