Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2011 10:54:47

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

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

Требуется помощь в решении задачи:
Есть текстовый файл со списком фраз, есть еще один текстовый файл со списком синонимов, нужно создать новый список фраз в котором в каждой фразе будут слова заменяться на все вариации синонимов(включая и само слово).

Я ничего лучше не придумал, как сделать такой вариант:
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
скрипт генерирует фразы:
интернет магазин телевизоров 2010;интернет магазин телевизоров 2011;MAGAZIN телевизоров 2012;интернет-магазин телевизоров 2010;интернет-магазин телевизоров 2011;MAGAZIN телевизоров 2012;магазин телевизоров 2010;магазин телевизоров 2011;MAGAZIN телевизоров 2012

Скрипт выполняет не всю запланированную работу.
Если не сложно укажите мне на мою ошибку.



Офлайн

#2 Ноя. 5, 2011 00:55:58

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

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

AleksSR
Вот код используемый для 3-й части:
откуда следует, что предыдущие этапы выполнены правильно ?

AleksSR
        check = re.search(eqs[1], query, re.IGNORECASE)
это поиск чего в чём ?
слова “GOD” в строке query ?

AleksSR
        equiv = equiv.replace ("\n", "")
eqs = equiv.split(";")
не должно такого быть в генерирующем коде
всё должно быть уже подготовлено на предыдующих этапах

AleksSR
            query = query.replace (";\n", "\n")
это заплатка какая-то ?
при генерации уже должно всё правильно записаться

напиши:
1) что вводишь
2) что получаешь
3) что должно получиться



Отредактировано (Ноя. 5, 2011 00:57:26)

Офлайн

#3 Ноя. 5, 2011 20:27:59

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

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

py.user.next
AleksSR
Вот код используемый для 3-й части:
откуда следует, что предыдущие этапы выполнены правильно ?
Потому, что предыдущие результат выполнения предыдущих этапов тот, который я и ожидал.


py.user.next
AleksSR
        check = re.search(eqs[1], query, re.IGNORECASE)
это поиск чего в чём ?
слова “GOD” в строке query ?
Да, это поиск слова характеризующего группу синонимов во фразе.


py.user.next
AleksSR
        equiv = equiv.replace ("\n", "")
eqs = equiv.split(";")
не должно такого быть в генерирующем коде
всё должно быть уже подготовлено на предыдующих этапах
Здесь не понял вашего замечания.

py.user.next
AleksSR
            query = query.replace (";\n", "\n")
это заплатка какая-то ?
при генерации уже должно всё правильно записаться
В цикле for qr in qrs: в конце добавляется ; но в самом конце строке этот символ не нужен, вот и вношу заплатку.

py.user.next
напиши:
1) что вводишь
2) что получаешь
3) что должно получиться
1)Фраза “интернет магазин телевизоров 2010”

2) интернет магазин телевизоров 2010;интернет магазин телевизоров 2011;MAGAZIN телевизоров 2012;интернет-магазин телевизоров 2010;интернет-магазин телевизоров 2011;MAGAZIN телевизоров 2012;магазин телевизоров 2010;магазин телевизоров 2011;MAGAZIN телевизоров 2012

3) интернет магазин телевизоров 2010;интернет магазин телевизоров 2011;интернет магазин телевизоров 2012;интернет-магазин телевизоров 2010;интернет-магазин телевизоров 2011;интернет-магазин телевизоров 2012;магазин телевизоров 2010;магазин телевизоров 2011;магазин телевизоров 2012

Или вы имели ввиду выложить полный код?



Офлайн

#4 Ноя. 6, 2011 09:32:08

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

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

AleksSR
Да, это поиск слова характеризующего группу синонимов во фразе.
    check = query.lower().find(word.lower())
AleksSR
Здесь не понял вашего замечания.
какие-то замены символов
должен быть подготовлен список элементов, не зависящий ни от каких символов

AleksSR
В цикле for qr in qrs: в конце добавляется ; но в самом конце строке этот символ не нужен, вот и вношу заплатку.
это надо сразу делать, при использовании .join() ничего лишнего не будет
и заплатки не нужны

AleksSR
Или вы имели ввиду выложить полный код?
достаточно того, что есть, чтобы понять, что это неправильно (какая-то мешанина)
сначала подготовь списки, а потом с ними работай
никаких операций с символами во время составления фраз

1) подготовил списки
2) составил наборы
3) объединил в одну строку
4) вывел строку в файл



Офлайн

#5 Ноя. 15, 2011 14:48:11

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

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

py.user.next
достаточно того, что есть, чтобы понять, что это неправильно (какая-то мешанина)
сначала подготовь списки, а потом с ними работай
никаких операций с символами во время составления фраз

1) подготовил списки
2) составил наборы
3) объединил в одну строку
4) вывел строку в файл
Добрый день, я отсутствовал какое-то время по причине госпитализации, если вы еще не забыли мою тему - прошу помочь.
Я не понял суть того, что вы написали по пунктам. Какие списки нужно подготовить и что за наборы составить?



Офлайн

#6 Ноя. 15, 2011 22:49:12

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

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

AleksSR
Какие списки нужно подготовить
# для (2007|2008|2009|09|2010|2011|2012);GOD;2010|2011|2012

lst1 = "(2007|2008|2009|09|2010|2011|2012)".strip('()').split('|')
name = "GOD".lower()
lst2 = "2010|2011|2012".split('|')

print(lst1, name, lst2, sep=';')


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

lst1 = "(лето|осень|зима|весна)".strip('()').split('|')
name = "SEZON".lower()
lst2 = "осень|зима".split('|')

print(lst1, name, lst2, sep=';')


# для (интернет магазин|интернет-магазин|магазин);MAGAZIN;интернет магазин|интернет-магазин|магазин

lst1 = "(интернет магазин|интернет-магазин|магазин)".strip('()').split('|')
name = "MAGAZIN".lower()
lst2 = "интернет магазин|интернет-магазин|магазин".split('|')

print(lst1, name, lst2, sep=';')
вывод:
['2007', '2008', '2009', '09', '2010', '2011', '2012'];god;['2010', '2011', '2012']
['лето', 'осень', 'зима', 'весна'];sezon;['осень', 'зима']
['интернет магазин', 'интернет-магазин', 'магазин'];magazin;['интернет магазин', 'интернет-магазин', 'магазин']
вот пример (имена схематические)
это готовые данные, дальше обрабатываешь эти данные (переходишь ко второму пункту)



Отредактировано (Ноя. 15, 2011 22:53:27)

Офлайн

#7 Ноя. 17, 2011 14:58:32

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

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

Зачем делать списки в таком виде ведь на первом этапе работы скрипта уже произведена замена исходных вариаций на их обобщение(GOD)? Я не понимаю(моя реализация дает неверный результат если во фразе нужно заменить более одного обобщения например год и магазин), как реализовать корректную генерацию фразы с заменами 2-х групп синонимов. Можете описать коротко алгоритм 2 и 3 пунктов?



Офлайн

#8 Ноя. 17, 2011 23:09:47

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

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

AleksSR
Зачем делать списки в таком виде ведь на первом этапе работы скрипта уже произведена замена исходных вариаций на их обобщение(GOD)?
для того, чтобы потом из них составлять всевозможные комбинации

AleksSR
моя реализация дает неверный результат
в твоей реализации всё смешано, когда всё должно быть разделено

AleksSR
3) интернет магазин телевизоров 2010;интернет магазин телевизоров 2011;интернет магазин телевизоров 2012;интернет-магазин телевизоров 2010;интернет-магазин телевизоров 2011;интернет-магазин телевизоров 2012;магазин телевизоров 2010;магазин телевизоров 2011;магазин телевизоров 2012
что сложного, когда у тебя есть список лет, пройти по нему и добавить в новый список фразы, начинающиеся с “интернет магазин телевизоров” и заканчивающиеся очередным годом



Отредактировано (Ноя. 17, 2011 23:12:25)

Офлайн

#9 Ноя. 18, 2011 12:57:49

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

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

py.user.next
что сложного, когда у тебя есть список лет, пройти по нему и добавить в новый список фразы, начинающиеся с “интернет магазин телевизоров” и заканчивающиеся очередным годом
Это не сложно, сложно когда во фразе 2 компонента для замены на синонимы, например год и магазин(интернет-магазин). В дальнейшем планировал в текстовом файле очень сильно увеличить список замен.



Офлайн

#10 Ноя. 18, 2011 21:02:02

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

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

минимальный компонент для замены - слово
нужно разделить фразу на слова
дальше объединяется часть до текущего компонента (все слова до текущего компонента), объединяется часть после текущего компонента (все слова после текущего компонента) и начинается перебор для текущего компонента (с объединением строки до, текущей строки компонента, строки после)
все полученные строки заносятся в один список

построение делается на очень простом файле с двумя компонентами
после отладки файл делается сложнее (длинная строка, где-то в середине три несмежных компонента)



Отредактировано (Ноя. 18, 2011 21:04:10)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version