mishanya Posted June 27, 2015 Author Report Share Posted June 27, 2015 Насколько это ресурсоемко если склонять по 2 свойства товара ...а товаров 5тыс? Можно ли это вызывать только в случае ошибки при связи с Яндексом? насчет ресурсоемкости не знаю. но помоему лучше делать запрос в базу чем каждый раз к апи яндекса, которое иногда тупит. хотя лучше наверное на этот вопрос дадут более опытные программисты. насчет того можно ли вызывать запрос в базу только при ошибке в яндекс, можно, но тогда всеровно нужно будет проверять базу на наличие такого слова и добавления его в базу. Quote Link to post Share on other sites
Maksclub Posted June 27, 2015 Report Share Posted June 27, 2015 насчет ресурсоемкости не знаю. но помоему лучше делать запрос в базу чем каждый раз к апи яндекса, которое иногда тупит. хотя лучше наверное на этот вопрос дадут более опытные программисты. насчет того можно ли вызывать запрос в базу только при ошибке в яндекс, можно, но тогда всеровно нужно будет проверять базу на наличие такого слова и добавления его в базу. Спасибо большое за решение и его улучшение ! здоров, можно оживить title, для этого и буду использовать Quote Link to post Share on other sites
jonny008 Posted May 13, 2016 Report Share Posted May 13, 2016 Яндекс Склонятор погиб. Но появился http://api.morpher.ru/WebService.asmx/GetXml?s=Екатеринбург Quote Link to post Share on other sites
mishanya Posted May 13, 2016 Author Report Share Posted May 13, 2016 Яндекс Склонятор погиб. Но появился http://api.morpher.ru/WebService.asmx/GetXml?s=Екатеринбург спасибо, решение для этого апи обновлю Quote Link to post Share on other sites
Solution mishanya Posted May 13, 2016 Author Solution Report Share Posted May 13, 2016 (edited) UPD 3.0 с новым апи и записью падежей в базу 1. делаем запрос в базу CREATE TABLE IF NOT EXISTS `s_declination` ( `id` int(11) NOT NULL AUTO_INCREMENT, `phrase` varchar(255) NOT NULL, `declination` varchar(1024) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 2. Регистрируем плагин, для этого в файл api/Design.php (примерно строка 42) добавляем: $this->smarty->registerPlugin('modifier', 'declination', array($this, 'declination_modifier')); 3. Дальше добавим в самый конец функцию для обработки нового апи и возвращения падежей (если у вас была старая ф-я версии 1 или 2, нужно ее удалить): public function declination_modifier($text, $numForm = null, $numType = 'О') { // Смотрим есть ли в базе сколонение $query = $this->db->placehold("SELECT d.id, d.phrase, d.declination FROM __declination d WHERE d.phrase=? LIMIT 1", $text); $this->db->query($query); $d = $this->db->result(); if($d) { $result = unserialize($d->declination); } else { $urlXml = "https://ws3.morpher.ru/russian/declension?s=".urlencode($text); $d = @simplexml_load_file($urlXml); $d = (array)$d; if(!empty($d)){ $arrData = array(); $arrData['И']['О'] = (string) $text; foreach ($d as $key=>$val) { if(!is_object($val)) $arrData[$key]['О'] = (string) $val; else { $multiple = (array)$val; foreach ($multiple as $key=>$m) { $arrData[$key]['М'] = (string) $m; } } } $result = $arrData; $query = $this->db->placehold("INSERT INTO __declination SET ?%", array('phrase'=>$text, 'declination'=>serialize($result))); $this->db->query($query); } } if($numForm) { if( isset($result[$numForm][$numType]) ) { return $result[$numForm][$numType]; } else return $text; } else { return $result; } } Как использовать: для нужной переменной добавляем модификатор |declination:падеж:тип_падежанапример: {$product->name|declination:'Д':'О'} {'Главная'|declination:'Р':'М'} Список падежей:И - Именительный падежР - Родительный падежД - Дательный падежВ - Винительный падежТ - Творительный падежП - Предложный падеж Тип падежа:О - единственныйМ - множественный Edited August 16, 2017 by mishanya Quote Link to post Share on other sites
Kors Posted May 13, 2016 Report Share Posted May 13, 2016 1. Тип падежа - что это? Может, имеется в виду ЧИСЛО, как обычно в русском языке?2. {$product->name|declination:'Д':'О'} - в этом примере тип падежа не соответствует описанию возможных типов .3. Может, имелось в виду "O - единственный" ? Quote Link to post Share on other sites
mishanya Posted May 13, 2016 Author Report Share Posted May 13, 2016 1. Тип падежа - что это? Может, имеется в виду ЧИСЛО, как обычно в русском языке?2. {$product->name|declination:'Д':'О'} - в этом примере тип падежа не соответствует описанию возможных типов .3. Может, имелось в виду "O - единственный" ? да, исправил тип падежа. Quote Link to post Share on other sites
daiv Posted July 22, 2016 Report Share Posted July 22, 2016 А из Множественного перевести в Единственное как? Quote Link to post Share on other sites
mishanya Posted July 23, 2016 Author Report Share Posted July 23, 2016 А из Множественного перевести в Единственное как? в сервисе не вижу такого апи к сожалению. Quote Link to post Share on other sites
service79 Posted September 28, 2016 Report Share Posted September 28, 2016 (edited) Подскажите, пожалуйста, а как использовать вариант пользовательского словаря? Есть слова, которые данный сервис не правильно склоняет, но при этом вычитал, что есть возможность использования XML-словаря, где можно прописать слова-исключения... Как его прописать? Вид файла такой: <?xml version="1.0" encoding="utf-8"?><dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="Russian.xsd"><entry><singular><И>Гвардейский ордена Ленина Краснознаменный полк</И><Р>Гвардейского ордена Ленина Краснознаменного полка</Р><Д>Гвардейскому ордена Ленина Краснознаменному полку</Д><В>Гвардейский ордена Ленина Краснознаменный полк</В><Т>Гвардейским ордена Ленина Краснознаменным полком</Т><П>Гвардейском ордена Ленина Краснознаменном полке</П><М>в Гвардейском ордена Ленина Краснознаменном полку</М></singular></entry></dictionary> Edited September 28, 2016 by service79 Quote Link to post Share on other sites
SeregaSobol Posted August 15, 2017 Report Share Posted August 15, 2017 (edited) В данный момент изменился адрес запроса на$urlXml = "https://ws3.morpher.ru/russian/declension?s=".urlencode($text);и добавились новые виды склонения. Edited August 15, 2017 by SeregaSobol Quote Link to post Share on other sites
mishanya Posted August 16, 2017 Author Report Share Posted August 16, 2017 В данный момент изменился адрес запроса на$urlXml = "https://ws3.morpher.ru/russian/declension?s=".urlencode($text);и добавились новые виды склонения. да вижу, будет время, обновлю, пока не очень с этим Quote Link to post Share on other sites
bananovsv Posted August 20, 2017 Report Share Posted August 20, 2017 А как сделать его чувствительным к регистру? Если он сохранил слово с прописной буквы, то он потом заменит слово со строчной на просклоненное с прописной, потому что в базе его таким найдет. Quote Link to post Share on other sites
mishanya Posted August 20, 2017 Author Report Share Posted August 20, 2017 А как сделать его чувствительным к регистру? Если он сохранил слово с прописной буквы, то он потом заменит слово со строчной на просклоненное с прописной, потому что в базе его таким найдет.а в чем разница? Quote Link to post Share on other sites
bananovsv Posted August 20, 2017 Report Share Posted August 20, 2017 (edited) а в чем разница? Ну вот есть слово «Арбуз» с прописной буквы. Он его просклоняет: Арбуз, Арбуза, Арбузу… А потом у вас в тексте будет слово «арбуз» со строчной буквы. И он уже склонять не будет, а возьмёт из базы. А там это слово всегда с прописной. Хотелось бы, чтобы при поиске в базе «Арбуз» ≠ «арбуз». Или может кто знает более изящное решение этой проблемы. Edited August 20, 2017 by bananovsv Quote Link to post Share on other sites
chocolate_moles Posted August 21, 2017 Report Share Posted August 21, 2017 (edited) Или может кто знает более изящное решение этой проблемы. Измените запрос добавив в него BINARY $query = $this->db->placehold("SELECT ... FROM __declination d WHERE d.phrase=BINARY ? LIMIT 1", $text); Edited August 21, 2017 by chocolate_moles Quote Link to post Share on other sites
bananovsv Posted August 21, 2017 Report Share Posted August 21, 2017 Измените запрос добавив в него BINARY Спасибо. Quote Link to post Share on other sites
FDA Posted September 22, 2017 Report Share Posted September 22, 2017 (edited) Спасибо Edited September 22, 2017 by FDA Quote Link to post Share on other sites
service79 Posted September 22, 2017 Report Share Posted September 22, 2017 Теперь в функции надо поменять адресс:$urlXml = "https://ws3.morpher.ru/russian/declension?s=".urlencode($text);на$urlXml = "http://ws3.morpher.ru/russian/declension?s=".urlencode($text);зачем? по https работает же?! Quote Link to post Share on other sites
FDA Posted September 22, 2017 Report Share Posted September 22, 2017 зачем? по https работает же?!Сори, у меня не работало какое-то время, я переделал. Но теперь опять все нормально, исправил пост Quote Link to post Share on other sites
bananovsv Posted November 17, 2017 Report Share Posted November 17, 2017 У всех перестало работать? Quote Link to post Share on other sites
service79 Posted November 17, 2017 Report Share Posted November 17, 2017 (edited) У всех перестало работать?все работает нормально.. вот для проверки:https://ws3.morpher.ru/russian/declension?s=%D1%82%D0%BE%D0%B2%D0%B0%D1%80 Edited November 17, 2017 by service79 Quote Link to post Share on other sites
bananovsv Posted November 18, 2017 Report Share Posted November 18, 2017 (edited) все работает нормально.. вот для проверки:https://ws3.morpher.ru/russian/declension?s=%D1%82%D0%BE%D0%B2%D0%B0%D1%80 У меня ошибка по ссылке: Насколько я понял, у него просрочен сертификат. Edited November 18, 2017 by bananovsv Quote Link to post Share on other sites
service79 Posted November 18, 2017 Report Share Posted November 18, 2017 (edited) У меня ошибка по ссылке:Это не ошибка, а вопрос принятия сертификата безопасности.По факту вот так: http://prntscr.com/hbzm1o Edited November 18, 2017 by service79 Quote Link to post Share on other sites
bananovsv Posted November 18, 2017 Report Share Posted November 18, 2017 Это не ошибка, а вопрос принятия сертификата безопасности.По факту вот так: http://prntscr.com/hbzm1o В браузере-то я могу его принять. А сервер мой — нет. Что с этим делать? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.