• Как найти пересечения слов в строках и объединить в группы похожие строки (php)?

    @danSamara
    Без ошибок и без словаря, в котором будут выставлены веса для отдельных слов - никак.
    Поясню. У вас стоит задача разбить строки с упором на музыкальные группы (отталкиваюсь от вашего примера), значит для всех названий групп должен стоять приоритет группировки, иначе объединение будет происходить случайным образом - по первым попавшимся словам.
    Ответ написан
    1 комментарий
  • Как найти пересечения слов в строках и объединить в группы похожие строки (php)?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Примерно так: https://ideone.com/kylhD6

    Конечно, надо немного доработать, чтобы определяло именно слова, а не совпадения по буквам. То есть сейчас он в Ленинград и "Ленинградский" запихнет.

    upd:
    https://ideone.com/aBSGzA
    Допилил так, чтобы искал именно слова, а не просто вхождения строки.
    Если нужно искать именно слова, то можно допилить так:
    strpos(" ".$phrase." ", " ".$word." ") !== false

    Исходный код:
    spoiler
    <?php
    $arr = [
    'Концерт группы Ленинград',
    'Группа ZebraHead',
    'ZebraHead',
    'Группа СПЛИН',
    'Ленинград',
    'Концерт группы ZebraHead',
    'ZebraHead. Презентация альбома',
    'СПЛИН в Олимпийском',
    'Крематорий',
    'Группировка Ленинград'
    ];
    $newarr = [];
     
    $words = [];
    $result = [];
     
    foreach($arr as $key => $val){
        //приводим к нижнему регистру
        $val = strtolower($val);
     
        //убираем знаки препинания и прочие символы
        $val = str_replace(".", "", $val);
        $val = str_replace(",", "", $val);
        $val = str_replace("/", "", $val);
        $val = str_replace(";", "", $val);
        $val = trim($val);
     
        //запоминаем "очищенные" слова
        $newarr[$key] = $val;
     
        //разделяем слова в массив
        $cw = explode(" ", $val);
     
        //запоминаем весь список слов
        foreach($cw as $word){
        	array_push($words, $word);
        }
    }
     
     
    foreach($words as $word){
    	$ca = [];
     
    	foreach($newarr as $key => $phrase){
    		//проверяем, что фраза содержит это слово
    		if(strpos($phrase, $word) !== false){
    			//если так, то запоминаем
    			array_push($ca, $arr[$key]);
    		}
    	}
     
    	$result[$word] = $ca;
    }
     
    print_r($result);

    Ответ написан
    Комментировать
  • Как найти пересечения слов в строках и объединить в группы похожие строки (php)?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Токенайзер вроде бы вполне подойдет.
    www.w3schools.com/php/func_string_strtok.asp
    И алгоритм на первый взгляд вполне простой: для каждого токена в энной строке перебери все остальные строки и сохрани под ключом те, в которых встречается этот токен. Ну и конечно если токен уже занесен в ответную таблицу, то обходить все строки не нужно, потому что при первом занесении список для этого токена уже был сформирован (по первой инструкции).
    Как-то так вобщем :)
    Ответ написан
    Комментировать
  • Как найти пересечения слов в строках и объединить в группы похожие строки (php)?

    Bowen
    @Bowen
    Японский бог
    В вашем массиве, в строках по несколько слов. Вы же, хотите создать отдельные массивы из строк этого массива, содержащие определенные слова(которые известны только вам).

    Какие я вижу пути решения задачи:
    1. Передавать те самые определенные слова в функцию, которая будет разбирать этот массив. Где с помощью регулярного выражения, будут проверенны слова в строках....
    2. Выделять нужные вам слова каким то образом, например, переписать в верхнем регистре. Тогда, придется лишь переписать алгоритм в вашей функции, чтобы он искал только слова в вернем регистре.
    Ответ написан
    Комментировать
  • Как в SQL сравнить строки не учитывая стоп-слова?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Может проще искать по общему ZebraHead?
    `title` like '%ZebraHead%'

    Если текст не длинный (только заголовки):
    - создать таблицу со словами и соответствующему им id.
    - выкинутть от туда стоп-слова путем пересечения таблиц.
    - сделать подмены ошибок, транслитераций, вариаций.
    - сгрупировать по словам.

    Или воспользуйтесь опытом поисковых лингвистических анализаторов статья вам в помощь : https://habrahabr.ru/post/114997/
    но быстро не будет.

    P.S. Но я думаю, что нужно слегка поменять архитектуру.
    Ответ написан
    1 комментарий
  • API для получения названий (описаний) всех известных рок/поп групп?

    @r_zaycev
    Попробуйте API Last.fm. Получить исполнителей можно по тегу (tag.getTopArtists), а далее получать уже описание исполнителя: artist.getInfo
    Ответ написан
    Комментировать
  • Как убедиться, что пользователь сделал репост в соцсети со страницы сайта?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Если прям очень хочется, то как правильно написал Greg Popov запрашиваем у пользователя права на просмотр его записей (user_posts permission ), смотрим, сверяем.

    На практике можно поймать негативный фидбек от людей, т.к лишние права никому не нравятся
    + сильно усложняется обработка (не забываем что пользователь может выборочно отключать права приложения)

    PS С учетом того что ничего не запрещает пользователю удалить пост в любой момент после публикации - как то технически контролировать это все смысла ровно 0. Придумывайте маркетинговые стимулы реально делать share.
    Ответ написан
    1 комментарий
  • Как убедиться, что пользователь сделал репост в соцсети со страницы сайта?

    @Gregpopov
    Full stack web developer
    Бери API, и смотри, есть ли у пользователя Х запись, которая соответствует искомой
    Ответ написан
    Комментировать
  • Как в валидаторе обойти такую ошибку?

    @ferdasfarmazone
    Верстальщик!
    Алексей Уколов правильно подметил.
    замените просто вложенные 'p' на 'span'
    Ответ написан
    3 комментария
  • Как в валидаторе обойти такую ошибку?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Видно что мешает тег <b>
    Лично мне видно, что у вас параграф в параграф вложен, что невалидно. И именно на это указывает валидатор. Как только вы открываете <p class="oldPhoneImg">, родительский параграф автоматически закрывается и его закрывающий тег остаётся бесхозным.
    Для тех, кто боится ходить на сайт w3

    Упрощённо говоря, тег <p> может содержать текст и следующие теги: a, em, strong, small, mark, abbr, dfn, i, b, s, u, code, var, samp, kbd, sup, sub, q, cite, span, bdo, bdi, br, wbr, ins, del, img, embed, object, iframe, map, area, script, noscript, ruby, video, audio, input, textarea, select, button, label, output, datalist, keygen, progress, command, canvas, time, meter
    Ответ написан
    Комментировать
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

    Для чего вообще придумали самовызывающиеся функции?
    Для того, чтобы изолировать переменные и функции, чтобы они не попадали в глобальную область видимости.

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Переопределение функции в Zend Framework?

    27cm
    @27cm
    TODO: Написать статус
    Напишите свой My_View_Helper_HeadScript, наследующий Zend_View_Helper_HeadScript. В нём уже переопределяйте метод createData. RTFM
    Ответ написан
    Комментировать
  • Правильно ли я понимаю MVC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нет, вы не правильно поняли MVC.

    Попробуйте подойти к проблеме чуть с другой стороны. Реализуйте ваше приложение так, что бы оно ничегошеньки не знало о HTTP, внутри него небыло ни единого echo, оно ничего не знало о сессиях и вообще ничего не знал о таких вещах. Проще всего этого добиться - ваше приложение можно запускать через CLI. Грубо говоря как-то так:

    <?php
    // run.php - просто скрипт для разового теста
    
    require __DIR__ . '/vendor/autoload.php'; // вы же уже используете composer?
    
    $app = new App();
    $app->getService('login_handler')->login('user@example.com', 'password');


    Что-то типа такого. То есть на каждый "юз кейс", то есть то что приложение должно делать, у вас должен быть метод. Типа "сделай то-то" и "сделай еще что-то".

    Вот это - наше приложение, наша "модель". Не один какой-то класс... это все приложение. MVC же ставит перед собой задачу снижения связанности между UI и приложением. Цель при этом приследуется простая - UI обычно меняется намного чаще чем логика приложения, а стало быть лучше их друг от дружки отделить целиком и полностью.

    Делается это за счет того что между UI и приложением вводят дополнительный промежуточный слой адаптеров - контроллеры (это опять же не обязательно один объект, это может быть целая цепочка адаптеров, каждый из которых делает что-то конкретное, в плодь до последнего адаптера который уже конвертирует http запрос в нужный вызов нужного метода).

    То есть что бы сказать "я сделал MVC" у вас приложение не должно зависить от UI. Если вы хоть где-то в приложении используете суперглобальные массивы, и т.д. вы проиграли. Ну либо просто не называйте это MVC, скажите что вы просто шаблоны отдельно ложите ну и роутер еще есть. Но это не MVC, это smartui, то есть наше приложение вкурсе что у него есть UI и они сильно связаны.

    MVC нужно далеко не всем, и smartui сойдет для простых проектов. Но вы должны понимать разницу, и знать когда стоит загоняться а когда можно логику в контроллеры выносить.

    Надо ли было создавать глобальные переменные в модели

    Это вы еще не уяснили значит что такое ООП, почему глобальное состояние плохо и что такое побочные эффекты (погуглите в контексте состояния).

    делать сеттеры и геттеры?

    А этим мы нарушаем инкапсуляцию. Внешний мир должен знать только что можно делать с моделью, но никак не ее структуру. То есть вместо setSomething у вас должно быть осмысленное название, типа updateSomething, changeSomething и т.д. Типа "user should be able to change password" и у вас появляется метод "changePassword". Или "User should be able to update profile details" и у вас появляется один единственный метод "updateProfileDetails()". А что оно как состояние меняет - это консерн исключительно объекта. Ему рашеть менять чего или нет. Мы таким образом изолируем побочные эффекты и уменьшаем вероятность багов. Ну и нам не нужно валидировать при таком раскладе ничего так как нет промежуточного невалидного состояния.
    Ответ написан
    9 комментариев
  • Backbone + Marionette лучшие практики (видео)?

    aen
    @aen
    Keep calm and 'use strict';
    Есть вот такой канал тыц и есть вот такая серия статей тыц.
    А еще есть гайд, который еще не дописан. Тыц.
    А можно еще в гиттер зайти, там всегда помогут. Тыц.
    Ответ написан
    Комментировать
  • Не понимаю как сделать связь в модели с условием. Это можно?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    public function photoUser(){
        return $this->belongsTo('App\Models\File')->where('module_id', $this->user_profile);
    }
    public function getPhotoUserAttribute(){
        return $this->photoUser()->first()->photo_user;
    }

    User::find(2)->photoUser;
    Ответ написан
  • Как сделать парсинг кол-во скачиваний с Yandex Disk?

    @seriogja
    Добрый день!
    Если вы используете composer, возможно вам стоит использовать DomCrawler, который позлоляет делать выборки по css selector. Что приятнее xpath'а на мой взгляд. Если же хотите продолжить на simple_html_dom, вы можете поставить расширение на firebug - firepath, который сам вам xpath сгенерирует. Для хрома XPath Helper есть, который тоже самое делает, но я его не пробовал использовать.
    Ответ написан
    6 комментариев
  • На ноутбуке иногда некоторые клавиши не правильно печатают?

    @GoldGoblin
    А операционка win 10? Наблюдал такое на ноутбуке леново. Началось после установки обновления венды. Вылечилось только удалением софта леново отвечающего за клавиатуру и спец кнопки.
    Ответ написан
    Комментировать
  • На ноутбуке иногда некоторые клавиши не правильно печатают?

    DoggerBloger
    @DoggerBloger
    я начинающий программист python
    школьник взял и буквы на клавиатуре клавиши выдолбал и не правильно засунул!
    Ответ написан
    Комментировать