Найти - Пользователи
Полная версия: Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0
Начало » Центр помощи » Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0
1
dm1tri1
Добрый день!
Я новичок в программировании. Python начал изучать только недавно. Прошу у Вас помощи для написания приложения, поскольку сталкиваюсь с трудностями, в которых не помогает даже google. Код, который написал по мануалам:
# -*- coding: cp1251 -*-
imp0rt = open('d:\Основные определения из теории систем.txt') #импортирую из файла текст
spisok = imp0rt.read() #присваиваю переменной импортированный текст
massiv = spisok.split() #создаю список из импортированного текста, с разделителем " " (пробел)
print(massiv)              #вывод текста массива на экран

1. Выводится на экран только юникод, сам русский текст где-то теряется.
2. При помощи словаря NTLK 2.0 пробовал извлечь корень из русского слова “приветственный”, столкнулся с ошибкой:
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
Сам код:
#coding: utf-8
from nltk.stem import SnowballStemmer
russian_stemmer = SnowballStemmer('russian')
russian_stemmer.stem('приветственный')
doza_and
для питона 2.x
imp0rt = open(ur'd:\Основные определения из теории систем.txt')
если в файле русский текст, то надо еще кодировку файла указать.
dm1tri1
Кодировка файла cp1251.
команда
print(massiv)
все равно выводит список в формате utf-8
['\xc4\xe5\xf0\xe5\xe2\xee', '\xf1\xe2\xee\xe9\xf1\xf2\xe2', '-', '\xeb\xee\xe3\xe8\xf7\xe5\xf1\xea\xe0\xff', и т.д.
Edinonog
Смею предположить, что у вас ОС Windows, тогда консоль поддерживает только кодировку cp866. Тогда для отображения поможет это (+ сама кодировка файла в cp866)
 # -*- coding: cp866 -*-
Но это платформозависимый косяк.
py.user.next
doza_and
для питона 2.x
u - необязательно

doza_and
если в файле русский текст, то надо еще кодировку файла указать.
во втором питоне параметра кодировки в open() нет (нужно codecs.open() )
doza_and
py.user.next
u - необязательно
Позволю себе не согласиться
#!/bin/env/python
# -*- coding: utf-8 -*-
imp0rt = open('йй.txt')
будет ошибка
#!/bin/env/python
# -*- coding: cp1251 -*-
imp0rt = open('йй.txt')
ок
Т.е. в данном случае можно и не писать, но я считаю это крайне дурным советом. Человек изменит кодировку исходника и ему надо будет исправлять все строки.
py.user.next
doza_and
Т.е. в данном случае можно и не писать, но я считаю это крайне дурным советом.
ну да, вообще стоит писать, я не учёл этот момент со сменой кодировки на несистемную
dm1tri1
Решение найдено!
Первый пример эволюционировал в
# -*- coding: utf-8 -*-                #кодировка для распознания русского текста файла
from __future__ import unicode_literals#чтобы все остальные русские слова питон воспринимал, как юникод
imp0rt = open(ur'd:\определения.txt')  #импортирую из файла русский текст
spisok = imp0rt.read()                 #считываю текст в переменную
massiv = spisok.split()                #создаю список из считанного текста, с разделителем " " (пробел)
spisok = unicode(massiv[0], 'cp1251')  #преобразую первый элемент списка в кириллицу
print(spisok)                          #вывод первого элемента массива на экран

Второй пример так же изменился:
#coding=utf-8
from nltk.stem import SnowballStemmer           #подключение словаря и импорт SnowballStemmer
russian_stemmer = SnowballStemmer('russian')    #выбор русского языка для извлечения корня
print (russian_stemmer.stem(u'приветственный')) #вывод на экран корня слова


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB