py.user.next
Дек. 10, 2011 18:55:20
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import re
textfile = 'file.txt'
rulesfile = 'rules.txt'
outfile = 'ouput.txt'
def load_rules(ifname):
rules_lst = []
with open(ifname) as f:
for line in f:
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()
return [i.strip() for i in f]
#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)
with open(outfile, 'w') as f:
for line in text:
out_lst = repl_group(line, rules_lst[0])
for t in (i for i in repl_group(line, 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)
print >>f, u'; '.join(out_lst).encode('utf-8')
AleksSR
Дек. 12, 2011 09:31:17
Последний вариант кода выводит преобразованной только первую фразу из входного файла и затем выдает ошибку:
интернет магазин телевизоров 2010; интернет магазин телевизоров 2011; интернет м
агазин телевизоров 2012; интернет-магазин телевизоров 2010; интернет-магазин тел
евизоров 2011; интернет-магазин телевизоров 2012; магазин телевизоров 2010; мага
зин телевизоров 2011; магазин телевизоров 2012
Traceback (most recent call last):
File “C:\Python26\Scripts\Words classification\equiv.py”, line 56, in <module>
out_lst =
File “c:\Python26\lib\encodings\utf_8.py”, line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: ‘utf8’ codec can't decode byte 0xd0 in position 0: unexpecte
d end of data
C:\Python26\Scripts\Words classification>
В файл на выходе ничего не записывается.
py.user.next
Дек. 13, 2011 10:13:10
скорее всего, файл с фразами не в utf-8
AleksSR
Дек. 13, 2011 12:18:44
Нужно было преобразовывать в UTF8 без BOM?
py.user.next
Дек. 13, 2011 20:39:46
у меня файл с фразами в utf-8 (без bom) содержит три строки и разворачивает их
файл с правилами тоже в utf-8 (без bom)
но на bom была бы другая реакция, по-моему
может файл повреждён
(странно, что часть раскодирует, а часть - нет)