Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0 [RSS Feed]

#1 Апрель 24, 2013 15:53:50

dm1tri1
От: Санкт-Петербург
Зарегистрирован: 2013-04-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

Добрый день!
Я новичок в программировании. 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('приветственный')

Отредактировано dm1tri1 (Апрель 24, 2013 16:12:13)

Офлайн

#2 Апрель 24, 2013 21:55:46

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

для питона 2.x

imp0rt = open(ur'd:\Основные определения из теории систем.txt')
если в файле русский текст, то надо еще кодировку файла указать.



Офлайн

#3 Апрель 24, 2013 23:53:18

dm1tri1
От: Санкт-Петербург
Зарегистрирован: 2013-04-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

Кодировка файла 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', и т.д.

Офлайн

#4 Апрель 27, 2013 04:24:23

Edinonog
Зарегистрирован: 2012-11-04
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

Смею предположить, что у вас ОС Windows, тогда консоль поддерживает только кодировку cp866. Тогда для отображения поможет это (+ сама кодировка файла в cp866)

 # -*- coding: cp866 -*-
Но это платформозависимый косяк.

Отредактировано Edinonog (Апрель 27, 2013 04:25:04)

Офлайн

#5 Апрель 28, 2013 07:56:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

doza_and
для питона 2.x
u - необязательно

doza_and
если в файле русский текст, то надо еще кодировку файла указать.
во втором питоне параметра кодировки в open() нет (нужно codecs.open() )



Отредактировано py.user.next (Апрель 28, 2013 07:57:15)

Офлайн

#6 Апрель 28, 2013 08:46:26

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

py.user.next
u - необязательно
Позволю себе не согласиться
#!/bin/env/python
# -*- coding: utf-8 -*-
imp0rt = open('йй.txt')
будет ошибка
#!/bin/env/python
# -*- coding: cp1251 -*-
imp0rt = open('йй.txt')
ок
Т.е. в данном случае можно и не писать, но я считаю это крайне дурным советом. Человек изменит кодировку исходника и ему надо будет исправлять все строки.



Офлайн

#7 Апрель 29, 2013 06:00:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

doza_and
Т.е. в данном случае можно и не писать, но я считаю это крайне дурным советом.
ну да, вообще стоит писать, я не учёл этот момент со сменой кодировки на несистемную



Офлайн

#8 Апрель 30, 2013 18:01:40

dm1tri1
От: Санкт-Петербург
Зарегистрирован: 2013-04-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0

Решение найдено!
Первый пример эволюционировал в

# -*- 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'приветственный')) #вывод на экран корня слова


Офлайн

  • Начало
  • » Центр помощи
  • » Создание приложения для извлечения корней из импортированного текста при помощи словаря NTLK 2.0[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version