Marat_Kh

Рейтинг
126
Регистрация
18.08.2005
Dram :
Но получается на входе у меня строка целикового запроса и ее фиг правильно экранируешь?


$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour LIKE :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', "%{$colour}%");
PDOStatement::execute
Marat_Kh #:
А у меня бзик🤪 - все ошибки вызывают Exception,

Кстати, такой подход, позволяет с пониманием относиться к этому:

$ python3
Python 3.6.8 (default, Apr  2 2020, 13:34:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> o={'sd':1}
>>> print(o['dd'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

KeyError: 'dd'
>>> print(o.get('dd'))
None
>>> print(o.get('dd',{}))
{}
silicoid #:

стандартный синтаксис, а не какой-то придуманный именно вами и не используемый нигде более в языке.

Когда вы пишете какой-то код, надо еще и понимать, что за вами его будет кто-то разбирать, поэтому использование таких вот конструкций

недопустимо

Недопустимо кому? Это всего лишь функция, облегчающая доступ к элементам массива/объекта. Не более того. Всяких разных функции/классов в любом проекте может быть от много до очень много.  И разбирать их приходится, хочется того или нет.

Что касается $array[0]['gz']

print($o['3a']);
#PHP Notice:  Undefined index: 3a in /var/web/d.php on line 21

А у меня бзик🤪 - все ошибки вызывают Exception, просто никаких варнинго-нотисов не люблю. И предпочитаю приложить немного усилий, чтобы исключить их

silicoid #:
$array = json_decode(json_encode($mixed),TRUE);

Категорически неверный подход: Прилетел 10000 таких:

$o = json_decode('[{"gz":["qeqwe","qeqeqe", 20]},{"gz0":["qeqwe",{"aa":"bb"}]}]');
$oo = [];

for($i=0;$i<10000;$i++){
$oo[$i] = $o;
}

$t = microtime(1);
$oo = json_decode(json_encode($oo),TRUE);
echo (microtime(1) - $t)*1000, 'ms';

$t = microtime(1);
$ns = '557.0.gz.2';
echo "\nResult for key '{$ns}': \n", var_dump(_n($oo, $ns)), "\n";
echo (microtime(1) - $t)*1000, 'ms', "\n";
57.188987731934ms
Result for key '557.0.gz.2':
int(20)

0.051975250244141ms

57 миллисек это  очень много, а еще  и на  memory_get_usage/memory_get_peak_usage  любопытно было бы посмотреть. Ну,  чтобы  вывод о том кто индокодит


Вот это:

$array = json_decode(json_encode($mixed),TRUE); 

зло. Никогда так не делайте

Dram :
Нужно обратиться к подмассиву

Что то типа того:

<?php

function _a( string $k, $o=null, $def=null ){
  if(is_object($o)) {
    return property_exists($o,$k) ? $o->$k : $def;
  } elseif (is_array($o)){
    return array_key_exists($k,$o) ? $o[$k] : $def;
  } else return $def;
}

function _n( $o, string $k, $def='То, что никогда не встретится в ваших массивах/объектах'){
  $k = explode('.', $k);
  foreach($k as $v){  
    $o = is_iterable($o) || $o instanceof stdClass ? _a($v, $o, $def) : $o;
    if($def===$o)   return $def;
  }  
  return $o;
}

$o = json_decode('[{"gz":["qeqwe","qeqeqe"]},{"gz0":["qeqwe",{"aa":"bb"}]}]');
$ns = '0.gz';
echo "\nResult for key '{$ns}': \n", var_dump(_n($o, $ns)), "\n";

Немного строчек кода позволят обращаться к  масссиву/объекту в стиле:  '0.gz'


$ php -f /var/web/d.php

Result for key '1.gz0.1.aa.00':
string(101) "То, что никогда не встретится в ваших массивах/объектах"

$ php -f /var/web/d.php

Result for key '1.gz0.1.aa':
string(2) "bb"

$ php -f /var/web/d.php

Result for key '0.gz':
array(2) {
  [0]=>
  string(5) "qeqwe"
  [1]=>
  string(6) "qeqeqe"
}
Devvver:

Я же написал - я никогда не парсил на Delphi, на создание данного функционала мне нужно пару недель. Давно на Delphi не писал. Решил - лучше сэкономить время и потратить на решение других проблем.

Т.е на скрипт вы отводите роль получить xml, т.к. в старт посте

Нужно парсить подсветки в Яндексе (через яндекс лимиты xml)

и отдать в каком то формате вашей проге. Все остальное - лемматизация, алгоритм чтобы получилось

Devvver:
мне это и надо :)

вы сделаете на Delphi.

Тогда 2 часа работы на php скрипт с хорошим запасом (оценочное суждение). Или самостоятельно. Потребуется подсказка и почитать про следующие функции php: file_get_contents вместе c stream_context_create если post, simplexml_load_string , foreach, isset, is_array, preg_match_all, ну и json_encode если в json

Devvver:

Не понятно что такое passeges - это сниппеты? "Читать еще" вы учитывали?

Да. xml.yandex отдаст данные в которых есть такая конструкция, hlword ваши подсветки, остальное и так понятно.

 

<doc id="ZF72ED445C40118F5">
<relevance />
<url>
https://spb.cian.ru/kupit-kvartiru-studiu/
</url>
<domain>
spb.cian.ru
</domain>
<title>
9 591 объявление - Купить <hlword>квартиру</hlword> - <hlword>студию</hlword> в <hlword>Санкт</hlword> - <hlword>Петербурге</hlword> ...
</title>
<modtime>
20150626T035330
</modtime>
<size>
6949
</size>
<charset>
utf-8
</charset>
<passages>
<passage>
Продается <hlword>квартира</hlword> - <hlword>студия</hlword>со всей необходимой техникой и мебелью в ЖК комфорт-класса Академ-Парк.
</passage>
<passage>
Продается <hlword>квартира</hlword> - <hlword>студия</hlword> в <hlword>Санкт</hlword> - <hlword>Петербурге</hlword> .
</passage>
</passages>
<properties>
<_PassagesType>
0
</_PassagesType>
<lang>
ru
</lang>
</properties>
<mime-type>
text/html
</mime-type>
<saved-copy-url>
https://hghltd.yandex.net/yandbtm?****
</saved-copy-url>
</doc>

"читать еще" это на выдаче

Devvver:

borisd:
Кстати, ТСу нужна лемматизация. Может быть тогда ему еще захочется и омонимию надежно снять?

Больше ничего не надо. Остальное я допилю на Delphi.

А как, без лемматизации, получите это:

Слова, задающие тематику(лемматизированные)
#https://arsenkin.ru/tools/sp/ ТОП50
продажа 14
цена 9
новостройка 9
кв 6
продаваться 6
площадь 6
купить 6
планировка 6
жилье 5
комната 5
руб 4
недорого 4
предложение 4

Если на своей стороне , то зачем вам скрипт?

А если что то похожее на приведенные Вами сервисы, то - алгоритм?😕

У Арсенкина кол-во повторений фигурирует, но непонятно какое. Так же не факт что это из только топа Я-хмл. От туда (Ya-XML не старше 10 дней) как то так может получиться (из топ100 правда):

(лемматизированно и отсортированно по частотности). Понятно, что выше убран город и слова из запроса

 [2] => Array

(
[студия] => Array
(
[cnt] => 263
[stemm_type] => mystem
[val] => студию,студии,студий,студия,студиях
)

[квартира] => Array
(
[cnt] => 260
[stemm_type] => mystem
[val] => квартиру,квартира,квартиры,квартир,квартире,квартирах
)

[москва] => Array
(
[cnt] => 170
[stemm_type] => mystem
[val] => москве,москва,москвы
)

[купить] => Array
(
[cnt] => 84
[stemm_type] => mystem
[val] => купить,куплю
)

[продажа] => Array
(
[cnt] => 59
[stemm_type] => mystem
[val] => продажа,продаже,продажи,продажу
)

[объявление] => Array
(
[cnt] => 45
[stemm_type] => mystem
[val] => объявления,объявлений,объявление
)

[новостройка] => Array
(
[cnt] => 40
[stemm_type] => mystem
[val] => новостройках,новостройки,новостройке,новостройка
)

[цена] => Array
(
[cnt] => 29
[stemm_type] => mystem
[val] => цена,цены,цене
)

[посредник] => Array
(
[cnt] => 22
[stemm_type] => mystem
[val] => посредников
)

[фото] => Array
(
[cnt] => 19
[stemm_type] => mystem
[val] => фото
)

Тут тупо кол-во в title + passeges. Всего слов в сниппетах топ100: 1944, лемм 415

А может по другому:

 [yandex_top100_snippet] => Array

(
[студия] => 11.9010479015695
[квартира] => 11.8787948513382
[купить] => 9.7112053874862
[продажа] => 9.0604644070352
[новостройка] => 7.3689215346173
[цена] => 6.8222971033231
[недвижимость] => 5.8105921682406
[москва] => 5.2526361124329
[фото] => 5.1495422301596
[дизайн] => 5.0827782588556
[рубль] => 5.0618641622129
[посредник] => 5.0459643290706
[объявление] => 4.9952270243464
[жилье] => 4.9826132209754
[avito] => 4.8936424831073
[интерьер] => 4.8007520618438
[новый] => 4.800727931322
[дом] => 4.8006110998427
[вторичный] => 4.703072409535
[снимать] => 4.4924902843706
[комната] => 4.4924530563238
[метро] => 4.3780322356191
......
[недорого] => 3.9896972687112
......
[площадь] => 3.841516559279
......
[жилой] => 3.1061402539477
.......
[планировка] => 2.8705060519118
....

Тут цифра результат функции от частотности отдельно в title, отдельно в passage, отдельно вхождений в hlword (подсветки) и кол-ва пересечений леммы в документах топ100. 4 слагаемых с коэфф. для усиления влияния каких то параметров. В зависимости от которых, могут быть варианты сортировки:)

====

А подсветки? Можно не париться;) Повторяю, там будут слова запроса и город в котором ведется поиск. + транслит слов запроса и города, сокращения/полное значение (метро-метрополитен) слов запроса и города. Что наглядно видно у Арсенкина


Лемматизированные подсветки
архангельск
kvartirastudio
Лемматизированные слова из запросов
Слово Кол-во повторений
студия 1
квартира 1
Стоимость Цена Продажа

😮 Включили? А не, кроме города и слов из запроса нет ничего :(

---------- Добавлено 02.07.2018 в 10:55 ----------

Зы Парсить hlword практического смысла сейчас нет. Ибо там слова запроса + город. Ну и что то типа метрополитен для метро подсветится. Все;(

Забываете про "разные поведенческие модели"

Не;) Наоборот. Намекаю, что они, модели, есть разные. Как и то, что пользовательская активность = F(тип сайта, тематика, целевая аудитория, куча чего то еще). И утверждать, что отсутствие обсуждений/соц.активности - гарантия ненужности сайта/документа, как минимум, опрометчиво. Равно, как и присутствие оных не гарантирует нужность сайта/документа.

Но практически ноль комментариев к каждой статье и в группе всего соцсети всего 1800 человек. То есть это мало кому интересно.

Кучу документов, на разных сайтах ежедневно смотрю, никогда не комментирую и в группы, не то, что не особо, а вообще никогда. Что делаю не так?

Или у вас есть метрика, что обязательное условие нужности сайта/документа - на каждого 100-го юзера обязательно 1 коммент, а каждый 1000-й непременно вступает в группу?

Зы, сайт про который пишите вообще не смотрел, но осуждаю на всякий случай :)

Всего: 298