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)