Есть текстовый файл со списком фраз, есть еще один текстовый файл со списком синонимов, нужно создать новый список фраз в котором в каждой фразе будут слова заменяться на все вариации синонимов(включая и само слово).
Я ничего лучше не придумал, как сделать такой вариант:
1) создается файл с синонимами с разделителями ; в виде:
(2007|2008|2009|09|2010|2011|2012);GOD;2010|2011|2012
(GOD года|GOD год|GOD г|GODг);GOD
(GOD GOD|GOD - GOD|GOD-GOD);GOD
(лето|осень|зима|весна);SEZON;осень|зима
(интернет магазин|интернет-магазин|магазин);MAGAZIN;интернет магазин|интернет-магазин|магазин
в круглых скобках рег выражение для поиска исходной фразы для замены на название группых синонимов , после разделителя слово на которое нужно заменять(например MAGAZIN).
2) В созданном файле с замененными словами удаляются дубли(например похожие фразы, но содержащие разные года теперь вместо разных годов содержат только слово GOD, соответственно такие дубли нужно удалить).
3) В полученном файле(с заменами на общее название группы синонимов) меняем название группы синонимов по очередно на слово из массива после 2-го разделителя ; слова для всех перестановок синонимов разделены знаком |
Возникла проблема на 3-ей стадии с генерацией фраз в которых синонимы имеют 2 и более слов.
Вот код используемый для 3-й части:
for query in queries:
for equiv in equivs:
equiv = equiv.replace ("\n", "")
eqs = equiv.split(";")
check = re.search(eqs[1], query, re.IGNORECASE)
if check:
query = query.replace ("\n", "")
qrs = eqs[2].split("|")
qq = ''
for qr in qrs:
quer = re.sub(eqs[1], qr, query, re.IGNORECASE)
qq += quer + ";"
query = qq + "\n"
query = query.replace (";\n", "\n")
final2.write(query)
final2.close()
скрипт генерирует фразы:
интернет магазин телевизоров 2010;интернет магазин телевизоров 2011;MAGAZIN телевизоров 2012;интернет-магазин телевизоров 2010;интернет-магазин телевизоров 2011;MAGAZIN телевизоров 2012;магазин телевизоров 2010;магазин телевизоров 2011;MAGAZIN телевизоров 2012
Скрипт выполняет не всю запланированную работу.
Если не сложно укажите мне на мою ошибку.