Страница 7 из 26
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 1:52 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
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 1:54 pm
Vovix
И такой - '
.+' шаблон в подчиненном контексте использовать нельзя!
не смотря на то, что он по сути правильный -
Код: Выделить всё
. - любой сивол, кроме перевода строки
+ - одно или более вхождений
он не позволяет отработать начальному контексту - '
(закончил.+?|заканчива.+?) продукты'
правильно, если кроме этого больше ничего нет в шаблоне!
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 2:45 pm
fandaymon
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
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 2:49 pm
fandaymon
Vovix писал(а):И такой - '
.+' шаблон в подчиненном контексте использовать нельзя!
не смотря на то, что он по сути правильный -
Код: Выделить всё
. - любой сивол, кроме перевода строки
+ - одно или более вхождений
он не позволяет отработать начальному контексту - '
(закончил.+?|заканчива.+?) продукты'
правильно, если кроме этого больше ничего нет в шаблоне!
Я сделал просто - напомни купить (.*)
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 3:03 pm
fandaymon
lanket писал(а):fandaymon писал(а):Переделал файл product_addToListFromVoice.php ...
Вчера так и не успел добраться до компа.
Отправил пулл реквест Сергею с твоими доработками.
У тебя опыта побольше в программировании, может тебе проще будет напрямую пуллреквесты сергею слать?
А то я как то лишнее звено получаюсь. Рад что идея прижилась. Спасибо тебе за доработки.
Вот его репозитарий модуля продукты
Но если по какой либо причине неудобно, могу и я отправлять изменения.
У меня весь опыт программирования никак не связан с веб-технологиями. И пхп и джава-скрипты и стили и гитхаб по большому счёту для меня тёмный лес. Боязно что-то поломать. Но прекрасно понимаю, что всё это надо осваивать

Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 3:41 pm
lanket
Vovix писал(а):Модуль теперь не рабочий стал!.....
Вчера сил уже не было.
С утра заметил пост от fandaymon.
Изменил в гитхабе и отправил пуллреквест Сергею.
А если надо по быстрому, то надо просто всё содержимое файла product_addToListFromVoice.php заменить на то что опубликовал fandaymon.
Отправлено с моего Redmi Note 4 через Tapatalk
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 6:37 pm
Vovix
lanket писал(а):Vovix писал(а):Модуль теперь не рабочий стал!.....
Вчера сил уже не было.
С утра заметил пост от fandaymon.
Изменил в гитхабе и отправил пуллреквест Сергею.
А если надо по быстрому, то надо просто всё содержимое файла product_addToListFromVoice.php заменить на то что опубликовал fandaymon.
...
Поймите правильно, я не в претензиях, я для пользы дела, на мне можно тестировать баги!!!
Всегда! Если есть в коде баг который проявится в одном случае из тысячи, я обязательно на него нарвусь!
Вот ОБЯЗАТЕЛЬНО!!!
UPD: был тестером Windows 10
а в IOS я постоянно на висяки нарываюсь, покруче чем в раннем Андрюше
Re: Модуль Продукты
Добавлено: Вт фев 20, 2018 11:39 pm
lanket
fandaymon писал(а):lanket писал(а):fandaymon писал(а):Переделал файл product_addToListFromVoice.php ...
Вчера так и не успел добраться до компа.
Отправил пулл реквест Сергею с твоими доработками.
У тебя опыта побольше в программировании, может тебе проще будет напрямую пуллреквесты сергею слать?
А то я как то лишнее звено получаюсь. Рад что идея прижилась. Спасибо тебе за доработки.
Вот его репозитарий модуля продукты
Но если по какой либо причине неудобно, могу и я отправлять изменения.
У меня весь опыт программирования никак не связан с веб-технологиями. И пхп и джава-скрипты и стили и гитхаб по большому счёту для меня тёмный лес. Боязно что-то поломать. Но прекрасно понимаю, что всё это надо осваивать

Кидай тогда сюда наработки, я буду отправлять пуллреквест.
Отправлено с моего Redmi Note 4 через Tapatalk
Re: Модуль Продукты
Добавлено: Ср фев 21, 2018 12:32 am
lanket
Сергей еще не принял пуллреквест, я еще немного поправил вывод продуктов в карзине теперь разбит на категории.
Удобно в магазине когда подходишь к молочке например то видешь отдельным списком то что надо из молочки.

- 2018-02-21_00-28-38.png (33.49 КБ) 4914 просмотров
Re: Модуль Продукты
Добавлено: Ср фев 21, 2018 11:39 pm
fandaymon
Очередная версия файла 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;
}
?>