[Модуль] Продукты (app_products)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Модуль Продукты

Сообщение Vovix » Вт фев 20, 2018 1:52 pm

Модуль теперь не рабочий стал! Вернее попытка его использовать через голос!
ошибку выдает, что-то с категорией продуктов в базе данных видимо!!!
Надо поправить-бы, господа! Доделайте пож-та идея правильная!

UPD:
вот что выдает в окне диалога с Алисой:

Код: Выделить всё

http://<мой IP>/popup/shoutbox.html?&limit=10&msg=%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%87%D0%B8%D0%BB%D0%B8%D1%81%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B
1054: Unknown column 'CATEGORY_ID' in 'order clause'
SELECT * FROM product_categories WHERE 1 AND TITLE LIKE '%ПРОДУКТ%' ORDER BY CATEGORY_ID, TITLE
Последний раз редактировалось Vovix Вт фев 20, 2018 2:03 pm, всего редактировалось 2 раза.
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Модуль Продукты

Сообщение Vovix » Вт фев 20, 2018 1:54 pm

И такой - '.+' шаблон в подчиненном контексте использовать нельзя!
не смотря на то, что он по сути правильный -

Код: Выделить всё

.     - любой сивол, кроме перевода строки
+     - одно или более вхождений
он не позволяет отработать начальному контексту - '(закончил.+?|заканчива.+?) продукты'
правильно, если кроме этого больше ничего нет в шаблоне!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль Продукты

Сообщение fandaymon » Вт фев 20, 2018 2:45 pm

Vovix писал(а):Модуль теперь не рабочий стал! Вернее попытка его использовать через голос!
ошибку выдает, что-то с категорией продуктов в базе данных видимо!!!
Надо поправить-бы, господа! Доделайте пож-та идея правильная!

UPD:
вот что выдает в окне диалога с Алисой:

Код: Выделить всё

http://<мой IP>/popup/shoutbox.html?&limit=10&msg=%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%87%D0%B8%D0%BB%D0%B8%D1%81%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B
1054: Unknown column 'CATEGORY_ID' in 'order clause'
SELECT * FROM product_categories WHERE 1 AND TITLE LIKE '%ПРОДУКТ%' ORDER BY CATEGORY_ID, TITLE
Я ж написал как исправить по быстрому. Там не в категории продуктов проблема, а в глобальных переменных

viewtopic.php?f=5&t=695&start=50#p72425
Последний раз редактировалось fandaymon Вт фев 20, 2018 2:50 pm, всего редактировалось 1 раз.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль Продукты

Сообщение fandaymon » Вт фев 20, 2018 2:49 pm

Vovix писал(а):И такой - '.+' шаблон в подчиненном контексте использовать нельзя!
не смотря на то, что он по сути правильный -

Код: Выделить всё

.     - любой сивол, кроме перевода строки
+     - одно или более вхождений
он не позволяет отработать начальному контексту - '(закончил.+?|заканчива.+?) продукты'
правильно, если кроме этого больше ничего нет в шаблоне!
Я сделал просто - напомни купить (.*)
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль Продукты

Сообщение fandaymon » Вт фев 20, 2018 3:03 pm

lanket писал(а):
fandaymon писал(а):Переделал файл product_addToListFromVoice.php ...
Вчера так и не успел добраться до компа.
Отправил пулл реквест Сергею с твоими доработками.

У тебя опыта побольше в программировании, может тебе проще будет напрямую пуллреквесты сергею слать?

А то я как то лишнее звено получаюсь. Рад что идея прижилась. Спасибо тебе за доработки.

Вот его репозитарий модуля продукты

Но если по какой либо причине неудобно, могу и я отправлять изменения.
У меня весь опыт программирования никак не связан с веб-технологиями. И пхп и джава-скрипты и стили и гитхаб по большому счёту для меня тёмный лес. Боязно что-то поломать. Но прекрасно понимаю, что всё это надо осваивать 8-)
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль Продукты

Сообщение lanket » Вт фев 20, 2018 3:41 pm

Vovix писал(а):Модуль теперь не рабочий стал!.....
Вчера сил уже не было.
С утра заметил пост от fandaymon.
Изменил в гитхабе и отправил пуллреквест Сергею.
А если надо по быстрому, то надо просто всё содержимое файла product_addToListFromVoice.php заменить на то что опубликовал fandaymon.


Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Модуль Продукты

Сообщение Vovix » Вт фев 20, 2018 6:37 pm

lanket писал(а):
Vovix писал(а):Модуль теперь не рабочий стал!.....
Вчера сил уже не было.
С утра заметил пост от fandaymon.
Изменил в гитхабе и отправил пуллреквест Сергею.
А если надо по быстрому, то надо просто всё содержимое файла product_addToListFromVoice.php заменить на то что опубликовал fandaymon.
...
Поймите правильно, я не в претензиях, я для пользы дела, на мне можно тестировать баги!!!
Всегда! Если есть в коде баг который проявится в одном случае из тысячи, я обязательно на него нарвусь!
Вот ОБЯЗАТЕЛЬНО!!! :D


UPD: был тестером Windows 10
а в IOS я постоянно на висяки нарываюсь, покруче чем в раннем Андрюше
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль Продукты

Сообщение lanket » Вт фев 20, 2018 11:39 pm

fandaymon писал(а):
lanket писал(а):
fandaymon писал(а):Переделал файл product_addToListFromVoice.php ...
Вчера так и не успел добраться до компа.
Отправил пулл реквест Сергею с твоими доработками.

У тебя опыта побольше в программировании, может тебе проще будет напрямую пуллреквесты сергею слать?

А то я как то лишнее звено получаюсь. Рад что идея прижилась. Спасибо тебе за доработки.

Вот его репозитарий модуля продукты

Но если по какой либо причине неудобно, могу и я отправлять изменения.
У меня весь опыт программирования никак не связан с веб-технологиями. И пхп и джава-скрипты и стили и гитхаб по большому счёту для меня тёмный лес. Боязно что-то поломать. Но прекрасно понимаю, что всё это надо осваивать 8-)
Кидай тогда сюда наработки, я буду отправлять пуллреквест.

Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль Продукты

Сообщение lanket » Ср фев 21, 2018 12:32 am

Сергей еще не принял пуллреквест, я еще немного поправил вывод продуктов в карзине теперь разбит на категории.
Удобно в магазине когда подходишь к молочке например то видешь отдельным списком то что надо из молочки.
СпойлерПоказать
2018-02-21_00-28-38.png
2018-02-21_00-28-38.png (33.49 КБ) 4012 просмотров
За это сообщение автора lanket поблагодарил:
webms (Ср фев 21, 2018 11:35 am)
Рейтинг: 1.16%
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль Продукты

Сообщение fandaymon » Ср фев 21, 2018 11:39 pm

Очередная версия файла product_addToListFromVoice. Если слово может быть и существительным и прилагательным, выбирается прилагательное (пример - красный). Прилагательное ставится в правильный род (например красное вино). Если Белый хлеб есть в справочнике продуктов, то скрипт понимает и форму хлеб белый. Не стал усложнять и перца красного молотого не понимает, но если надо - то можно добавить и такую ветку
СпойлерПоказать

Код: Выделить всё

<?php

//$command='череный молотый перец белого лука гель для душа';
require_once(ROOT . "lib/phpmorphy/common.php");
$opts = array(
 'storage' => PHPMORPHY_STORAGE_MEM,
 'predict_by_suffix' => true,
 'predict_by_db' => true,
 'graminfo_as_text' => true,
 );
$dir = ROOT . 'lib/phpmorphy/dicts';
$lang = 'ru_RU';
        try {
            $morphy = new phpMorphy($dir, $lang, $opts);
            $this->morphy =& $morphy;
        } catch (phpMorphy_Exception $e) {
            die('Error occured while creating phpMorphy instance: ' . PHP_EOL . $e);
        }
        $words = explode(' ', $command);
        $base_forms = array();
        $partsOfSpeech=array();
        $f_word=array();
        $totals = count($words);
        for ($is = 0; $is < $totals; $is++) {
            if (preg_match('/^(\d+)$/', $words[$is])) {
                $base_forms[$is] = array($words[$is]);
            } else {
                $Word = mb_strtoupper($words[$is], 'UTF-8');
                $base_forms[$is] = $morphy->getBaseForm($Word);
                $partsOfSpeech[$is] = $morphy->getPartOfSpeech($Word);
            if (count($partsOfSpeech[$is])==2) {
                 if ($partsOfSpeech[$is][0]=="С" and $partsOfSpeech[$is][1]=="П") {
                  $partsOfSpeech[$is][0]="П";
                 } 
                }

                $f_word[$is] = $morphy->getGramInfo($Word);
                $base_forms[$is][]=$words[$is];
            } 
        }


for ($is = 0; $is < $totals; $is++) {
    if ($base_forms[$is][0]=='ВОД') $base_forms[$is][0]='ВОДА';
    if ($partsOfSpeech[$is][0]=='С') {
    
        if (($is+1)<$totals) {
            if ($partsOfSpeech[$is+1][0]=='С') {
        if ($base_forms[$is+1][0]=='МАРКА' or $base_forms[$is+1][0]=='ФИРМА') {
            $product=$base_forms[$is][0]. ' ' . $words[$is+1] . ' ' . $words[$is+2];
            $is=$is+2;
        }
        else {
            $product=$base_forms[$is][0];
        }
            }
            elseif ($partsOfSpeech[$is+1][0]=='ПРЕДЛ') {
                $product=$base_forms[$is][0] . ' ' . $words[$is+1] . ' ' . $words[$is+2];
                $is=$is+2;
            }
             elseif ($partsOfSpeech[$is+1][0]=='П') {
        $rod=array_intersect($f_word[$is+1][0][0]['grammems'],['МР', 'ЖР', 'СР']);
        $rod=reset($rod);
        // Выбираем форму прилагательного правильного рода
        $adjective=$morphy->castFormByGramInfo($base_forms[$is+1][0],"П",[$rod,'ЕД','ИМ']);
        $adjective=$adjective[0]['form'];
        if (Get_Product_ID($adjective . " " . $base_forms[$is][0])>0) {
            $product=$adjective . " " . $base_forms[$is][0];
            $is=$is+1;
        }
        else {
            $product=$base_forms[$is][0] ;
        }
            }

        }
        else {
            $product=$base_forms[$is][0];
        }
    }
    elseif ($partsOfSpeech[$is][0]=='П') {
        $rod=array_intersect($f_word[$is][0][0]['grammems'],['МР', 'ЖР', 'СР']);
        $rod=reset($rod);
        // Выбираем форму прилагательного правильного рода
        $adjective=$morphy->castFormByGramInfo($base_forms[$is][0],"П",[$rod,'ЕД','ИМ']);
        $adjective=$adjective[0]['form'];
        if (($is+1)<$totals) {
            if ($partsOfSpeech[$is+1][0]=='С') {
                if (count($base_forms[$is+1])>2){
                 // выбираем форму согласованную по роду
                 for ($kk= 0; $kk < count($base_forms[$is+1])-1; $kk++) {
                       $rod1=array_intersect($f_word[$is+1][$kk][0]['grammems'],['МР', 'ЖР', 'СР']);
                    $rod1=reset($rod1);
                    if ($rod==$rod1) break;
                 }
                 $product=$adjective .' ' . $base_forms[$is+1][$kk] ;
                 $is=$is+1; 
                }
                 else {
                $product=$adjective .' ' . $base_forms[$is+1][0] ;
                $is=$is+1; 
                } 
            }
            elseif ($partsOfSpeech[$is+1][0]=='П') {
                $adjective1=$morphy->castFormByGramInfo($base_forms[$is+1][0],"П",[$rod,'ЕД','ИМ']);
                $adjective1=$adjective1[0]['form'];
                if (($is+2)<$totals) {
                    if ($partsOfSpeech[$is+2][0]=='С') {

                        if (count($base_forms[$is+2])>2){
                            // выбираем форму согласованную по роду
                            for ($kk= 0; $kk < count($base_forms[$is+2])-1; $kk++) {
                                $rod1=array_intersect($f_word[$is+2][$kk][0]['grammems'],['МР', 'ЖР', 'СР']);
                                $rod1=reset($rod1);
                            }
                            $product=$adjective .' ' . $adjective1 . ' ' . $base_forms[$is+2][$kk] ;
                            $is=$is+2; 
                 
                        }
                        else {
                            $product=$adjective .' ' . $adjective1 .' ' . $base_forms[$is+2][0];
                            $is=$is+2; 
                        }
                    }
                    else {
                        $product=$adjective .' ' . $adjective1;
                        $is=$is+1;
                    }    
                }
                else {
                    $product=$adjective .' ' . $adjective1;
                    $is=$is+1;
                }    
            }                
        }
        else {
            $product=$adjective;
        }    
    }        

    $product = strtolower($product);
     
    if($debugEnabled) debmes('Products produkt:'. $product);
                
    $id=Get_Product_ID( $product);
    if ($id > 0){
        $this->addToList($id);
        if($debugEnabled) debmes('Products produkt '.$product.' found, ID:'. $id);
    }
    Else {
        if($debugEnabled) debmes('Products produkt '.$product.' not found, adding');
        $category_id = Get_Category_ID("Неотсортированные");
        if ($category_id > 0){
            if($debugEnabled) debmes('Products category exiting unknown');
            $this->category_id = $category_id;
        } 
        Else {
            if($debugEnabled) debmes('Products creating unknown');
               $Record = Array();
               $Record['TITLE'] = "Неотсортированные";
               $Record['ID']=SQLInsert('product_categories', $Record);
            $category_id = $Record['ID'];
                            
            if($debugEnabled) debmes('Products produkt '.$product.' adding to created unknown');
        }

           $Record = Array();
           $Record['TITLE'] = $product;
          $Record['CATEGORY_ID'] = $category_id;
          $Record['QTY'] = 1;
           $Record['ID']=SQLInsert('products', $Record);
        $id = $Record['ID'];

        $this->addToList($id);
        if($debugEnabled) debmes('Products produkt '.$product.' not found, added to category id '.$category_id);
    }


} 

function Get_Product_ID($product) {
$res=SQLSelectOne("select ID from products where TITLE='" . $product . "'");

$id=0;
if ($res['ID']) {
 $id=$res['ID'];
}  

return $id;
}

function Get_Category_ID($category) {
$res=SQLSelectOne("select ID from product_categories where TITLE='" . $category . "'");
$id=0;
if ($res['ID']) {
 $id=$res['ID'];
}
return $id;

}

?>
Ответить