Найти - Пользователи
Полная версия: Список фраз, нужно создать список фраз с заменой слов во фразе на сино
Начало » Центр помощи » Список фраз, нужно создать список фраз с заменой слов во фразе на сино
1 2 3 4 5
py.user.next
#!/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
Последний вариант кода выводит преобразованной только первую фразу из входного файла и затем выдает ошибку:

интернет магазин телевизоров 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
скорее всего, файл с фразами не в utf-8
AleksSR
Нужно было преобразовывать в UTF8 без BOM?
py.user.next
у меня файл с фразами в utf-8 (без bom) содержит три строки и разворачивает их
файл с правилами тоже в utf-8 (без bom)
но на bom была бы другая реакция, по-моему
может файл повреждён
(странно, что часть раскодирует, а часть - нет)
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