Найти - Пользователи
Полная версия: Как решить задачу с автозаменой слов
Начало » Базы данных » Как решить задачу с автозаменой слов
1 2 3
ElenaTomsk_
Здравствуйте!

У меня есть набор предложений. Например, Маша ела кашу и суп. Я хочу сделать возможным следующее, записать предложение в виде:

Маша 11 243 и 243


Тогда программа дойдя до 11 и 243 обратилась бы к базе данных, а там было бы:

таблица глаголов
id word
11 ела
11 кушала
11 лопала

таблица существительных
id word
243 кашу
243 гречку
243 суп
243 котлету
243 рис

И было выбрано по одному слову из каждого списка, т.е.

“Маша лопала суп и котлету” или “Маша ела котлету и рис”.

Мне подсказали такое решение и наверное оно должно работать. Беда только в том, что мне нужен сайт, одна страничка и там две кнопки: “получить новое предложение” и “изменить слова в этом”. Кто-нибудь может это сделать, python начала учить, но пока не понимаю, как это все работает. База данных мной написана на MySQL
Если это стоит денег, то я готова заплатить. Спасибо!

void Main()
{
Console.WriteLine(Replace(“Маша {11} {243} и {243}.”));
}

Dictionary<int,string> Replaces = new Dictionary<int,string> {
{ 11, new string {“ела”, “кушала”, “лопала”} },
{ 243, new string {“кашу”, “гречку”, “суп”, “котлету”, “рис”} },
};
string Replace(string input)
{
Dictionary<int, int> wordsCounts = new Dictionary<int, int>();
Regex regex = new Regex(@"\{\d+", RegexOptions.IgnoreCase);
return regex.Replace(input, delegate(Match match)
{
string value = match.ToString();
value = value.Substring(1, value.Length - 2);
int id = int.Parse(value);
string arr = Replaces;
int count;
if(!wordsCounts.TryGetValue(id, out count))
count = 0;
wordsCounts = count + 1;
return Shuffle(arr, count);
});
}

Random rnd = new Random();
string Shuffle(string arr, int i)
{
int j = rnd.Next(i, arr.Length);
string temp = arr;
arr = arr;
arr = temp;
return arr;
}
vic57
не совсем понятно, куда вы тут сайт прикрутите?
В смысле - вам свой браузер нужен или просто окно с кнопками?
ElenaTomsk_
Страница с кнопками, конечно.
vic57
как-то так
# -*- coding:utf8 -*-
from PyQt4 import Qt
import random
def btnIn_click():
    s = u'Маша' +' '+ word0[0] +' '+ word1[0]
    edit.setText(s)
    
def btnOut_click():
    index1 = random.randint(0,2)
    index2 = random.randint(0,2)
    #print index1,index2
    s = u'Маша' +' '+ word0[index1] +' '+ word1[index2]
    edit.setText(s)
     
app = Qt.QApplication([])
word0 = [u'ела',u'кушала',u'лопала']
word1 = [u'суп',u'кашу',u'рыбу']
     
w = Qt.QWidget()
edit = Qt.QLineEdit(w)
btnIn = Qt.QPushButton(u'Получить',w)
btnIn.clicked.connect(btnIn_click)
btnOut = Qt.QPushButton(u'Изменить',w)
btnOut.clicked.connect(btnOut_click)
grid = Qt.QGridLayout(w)
grid.addWidget(edit,0,0,1,2)
grid.addWidget(btnIn,1,0)
grid.addWidget(btnOut,1,1)
w.move(0,0)
w.show()
app.exec_()
py.user.next
ElenaTomsk_
Я хочу сделать возможным следующее, записать предложение в виде:
Маша 11 243 и 243
Тогда программа дойдя до 11 и 243 обратилась бы к базе данных
Это нужно входную строку проанализировать на лексемы. А потом в соответствии с лексемами уже выбирать, что с ними делать и в какой таблице какие из них смотреть.
ElenaTomsk_
Здравствуйте, vic57!

Большое спасибо вам за ответ, репутацию подняла, но видите ли, у меня там все сложней.
Есть база данных, есть таблица со списком приложений, есть таблица со словами на замену, есть дополнительные ограничения по тому, где и как могут слова использоваться.
Если у вас уже есть интерес, я бы вам рассказала подробности, там в общем-то несложно, в базе я все сделала и через нее работает (примерно 10 таблиц, процедуры уже созданы), но надо сделать именно веб-страницу.
Скажите, пожалуйста, сколько бы это могло стоить? Я считаю, каждая работа должна быть оплачена. Еще раз спасибо вам.
ElenaTomsk_
py.user.next

Все есть уже. Есть таблица с предложениями: tbl_template, где собственно предложение.
Есть tbl_template_detail, где оно записано как

id_template id_word
1 1
1 243
1 45
1 243

так же на каждое слово написано какого оно типа, в какую группу и т.п. Я этим два года занимаюсь. Просто не совсем была уверенна, что мне тут помогут, а так готова расписать все заинтересованным лицам по полной, у меня и техническое задание имеется.
FishHook
ElenaTomsk_
Ценю ваш деловой подход, два года - это вам не вату из пупа выковыривать. Каждое слово - в свою группу, каждое предложение - в свою таблицу, написано какого типа - взять и сделать бл@дь!
vic57
я не совсем понимаю, зачем вам веб нужен - лишний тормоз будет
простейший интерфейс к базе данных.
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
dbname = None
def btn_connect():
# DB type, host, user, password...
    db = QSqlDatabase.addDatabase("QMYSQL");
    db.setHostName("localhost")
    db.setDatabaseName("test")
    db.setUserName("root")
    db.setPassword("")
    ok = db.open()
# True if connected
    if ok:
        text.insertHtml('Connected to MySQL<br />')
        btnQuery.setEnabled(True)
        global dbname
        dbname = db
    else:
        text.insertHtml('ERROR connecting to MySQL<br />')
        btnQuery.setEnabled(False)
    
def btn_query(dbname):
# do a query "on" a DB connection
    query = QSqlQuery(dbname)
    if query.exec_("SHOW TABLES"):
        text.insertHtml('<br />')
    while query.next():
        table = query.value(0).toString()
        text.insertHtml('%s<br />' % table)
    text.insertHtml('<br />')
    text.insertHtml('TOTAL %s TABLES' % query.size())
    
app = QApplication([])
w = QWidget()
text = QTextBrowser(w)
btnConnect = QPushButton("Connect",w)
btnConnect.clicked.connect(btn_connect)
btnQuery = QPushButton("Query",w)
btnQuery.clicked.connect(btn_query)
btnQuery.setEnabled(False)
grid =  QGridLayout(w)
grid.setMargin(0)
grid.addWidget(text,0,0,1,3)
grid.addWidget(btnConnect,1,0)
grid.addWidget(btnQuery,1,1)
w.move(0,0)
w.show()
sys.exit(app.exec_())
vic57
ElenaTomsk_
https://habrahabr.ru/post/128836/
http://pyqt.sourceforge.net/Docs/PyQt4/qsqldatabase.html#details
здесь почитайте…
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