Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2011 00:17:13

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

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

AleksSR
Сделал
сразу сюда новый вариант копируй
в каком виде сейчас цикл ?

AleksSR
Можно ли работать с текстовыми файлами в cp-1251 кодировке для реализации данной задачи?
пока что нужно правильно вывести то, что в utf-8
с cp1251 будет та же фигня, так как консоль использует cp866
>>> 'абвг'.encode('cp1251').decode('cp866')
'рсту'
>>>
utf-8 шире, чем cp1251, так как позволяет закодировать любой символ юникода, тогда как cp1251 может кодировать только 256 символов
но многие виндовые программы поддерживают cp1251
не помню точно, но, вроде бы, бывали программы, которые поддерживали cp1251 и koi8-r, но не поддерживали utf-8
если у тебя только русские и анлийские буквы в файле, тогда cp1251 подойдёт



Отредактировано (Дек. 7, 2011 00:21:41)

Офлайн

#2 Дек. 7, 2011 09:06:43

AleksSR
От:
Зарегистрирован: 2010-06-02
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

py.user.next
AleksSR
Сделал
сразу сюда новый вариант копируй
в каком виде сейчас цикл ?
def load_rules(ifname):
rules_lst = []
with open(ifname) as f:
for line in f:
print line.decode('cp866')
continue
lst = line.strip().split(';')
name = lst[1].lower()
expr_from = lst[0].strip('()')
sublst_to = lst[2].strip('()').split('|')
rules_lst.append([name, expr_from, sublst_to])
return rules_lst



Офлайн

#3 Дек. 7, 2011 12:23:32

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

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

проверил в винде на третьем питоне:
нужно файл с текстом сохранить в utf-8 без bom (notepad++ даёт это сделать)
а выводить нужно через print line.decode('utf-8')
на третьем питоне аналогичное сработало и вывело в консоль русские



Отредактировано (Дек. 7, 2011 12:24:23)

Офлайн

#4 Дек. 7, 2011 12:47:53

AleksSR
От:
Зарегистрирован: 2010-06-02
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

py.user.next
проверил в винде на третьем питоне:
нужно файл с текстом сохранить в utf-8 без bom (notepad++ даёт это сделать)
а выводить нужно через print line.decode('utf-8')
на третьем питоне аналогичное сработало и вывело в консоль русские
Сделал, вот что выводится:

(2007|2008|2009|09|2010|2011|2012);GOD;2010|2011|2012

(лето|осень|зима|весна);SEZON;осень|зима

(интернет магазин|интернет-магазин|магазин);MAGAZIN;интернет магазин|интернет-ма
газин|магазин
Traceback (most recent call last):
File “C:\Python26\Scripts\Words classification\equiv.py”, line 44, in <module>

out_lst = repl_group(text, rules_lst)
IndexError: list index out of range

C:\Python26\Scripts\Words classification>

Полный код используемого скрипта:
# -*- coding: utf-8 -*-

import re

textfile = 'file.txt'
rulesfile = 'rules.txt'
outfile = 'output.txt'

def load_rules(ifname):
rules_lst = []
with open(ifname) as f:
for line in f:
print line.decode('utf-8')
continue
lst = line.strip().split(';')
name = lst[1].lower()
expr_from = lst[0].strip('()')
sublst_to = lst[2].strip('()').split('|')
rules_lst.append([name, expr_from, sublst_to])
return rules_lst

#for r in load_rules(rulesfile):
# print r

def load_text(ifname):
with open(ifname) as f:
return next(f).strip()

#print load_text(textfile)

def repl_group(text, rule):
lst = []
expr, to_lst = rule[1:]
for tw in to_lst:
repl = re.sub(expr, tw, text)
lst.append(repl)
return lst

#print repl_group('abcd', [None, 'a|c', ['1', '2', '3']])

rules_lst = load_rules(rulesfile)
text = load_text(textfile)

out_lst = repl_group(text, rules_lst[0])
for t in (i for i in repl_group(text, rules_lst[2]) if i not in out_lst):
out_lst.extend(repl_group(t, rules_lst[0]))

out_lst = [i.decode('utf-8') for i in out_lst]

print u'; '.join(out_lst)



Отредактировано (Дек. 7, 2011 12:49:48)

Офлайн

#5 Дек. 7, 2011 12:53:30

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

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

теперь эти две введённые строки закомментируй (print и continue)



Офлайн

#6 Дек. 7, 2011 15:23:15

AleksSR
От:
Зарегистрирован: 2010-06-02
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

py.user.next
теперь эти две введённые строки закомментируй (print и continue)
Вывод:
интернет магазин телевизоров 2010; интернет магазин телевизоров 2011; интернет м
агазин телевизоров 2012; интернет-магазин телевизоров 2010; интернет-магазин тел
евизоров 2011; интернет-магазин телевизоров 2012; магазин телевизоров 2010; мага
зин телевизоров 2011; магазин телевизоров 2012

C:\Python26\Scripts\Words classification>



Офлайн

#7 Дек. 8, 2011 03:06:12

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

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

out_lst = [i.decode('utf-8') for i in out_lst]
print u'; '.join(out_lst)

with open(outfile, 'w') as f:
print >>f, u'; '.join(out_lst).encode('utf-8')



Офлайн

#8 Дек. 8, 2011 09:18:23

AleksSR
От:
Зарегистрирован: 2010-06-02
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

Не подскажите можно ли в данном случае решить проблему с кодировкой? Хотелось бы, чтобы ввод и вывод были в cp-1251, так как вывод идет в csv файл и в дальнейшем человек будет в ручную корректировать список запросов, а csv в кодировке utf-8 открывается с крокозябрами в экселе.



Офлайн

#9 Дек. 9, 2011 01:10:25

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

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

файлы file.txt, rules.txt сохраняются в cp1251
в коде все utf-8 в кавычках меняются на cp1251
а кодировка в начале скрипта если меняется на cp1251, то нужно и сам скрипт сохранить в cp1251



Офлайн

#10 Дек. 9, 2011 10:36:05

AleksSR
От:
Зарегистрирован: 2010-06-02
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Список фраз, нужно создать список фраз с заменой слов во фразе на сино

Кодировки пока еще не стал менять. Почему скрипт обрабатывает и записывает в выходной файл только первую строчку из исходного файла?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version