• Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, если же делать ассиметрию именно на главной диагонали то получим

    detSimilarity(w1, w2) != detSimilarity(w2, w1)
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, можно конечно и асимметрию добавить. например так

    06 | 03 | 01
    -------------
    03 | 05 | 02
    -------------
    01 | 02 | 04

    (чем ближе совпадение символов к началу слова тем больше вес данного совпадения.)
    При таком подходе слово сом однозначно отойдет ко второй группе

    НО какие логические основания для этого могут быть?
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, я не понимаю как это сделать. Задание реально бредовое, или вырвано из контекста.
    Посудите сами. Попытаемся вручную разделить их на 3 кластера(группы)

    в первую группу идут:ком, лом, ром, сом
    во вторую группу идут: сок, сом, сор и возможно соль
    в третью группу идет: лось

    итак имеем одну, неразрешимую коллизию - слово сом, которая равноудалена от слов как первой так и второй групп, к какой группе его отнести? к первой, второй, а может сразу к обоим группам? Математически оно одинаково близко к обоим группам.

    Возможно в контексте задания (например на лекции, после которой это задание и было дано) было сказано, что вес совпадения букв в начале слова выше чем в конце?

    PS: Вот написал небольшую взвешивалку похожести слов, может у вас какая идея придет.
    код
    function detSimilarity(w1, w2) {
        const len = Math.max(w1.length, w2.length);
        let summ = 0;
        for (let i1 in w1) {
            c1 = w1[i1];
            let d = len;
            for (let i2 in w2) {
                c2 = w2[i2];
                if (c1 == c2) {
                    const t = Math.abs(i1 - i2);
                    if (t < d) d = t;
                }
            }
            summ += len - d;
        }
        return summ / Math.pow(len, 2);
    }

    как работает
    5fc30b842aa78077761267.jpeg
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, сейчас попробую накидать реализацию, как ее вижу я, совершенно не привязанную к академическим знаниям.

    Для этого мне понадобится некоторая информация от вас.

    При том, что "вес" каждого слова до кластеризации должен быть уникальным.

    1. Про какой вес говориться?
    2. Что значит уникальный (можно ли считать что следующие 2 веса уникальны 0.59999 и 0.6?
    3. Как этот вес может измениться после кластеризации?

    Как именно можно создать 3 кластера похожих по написанию слов из следующего ниже списка слов:

    4. Почему именно 3 кластера?
    5. Может ли меняться набор слов?
    6. Меняется ли требуемое количество кластеров на выходе при изменении набора слов?

    7. Должны ли учитываться порядковые номера слов в списке (числовые индексы) при решении задачи?

    8. Считать ли строчные и прописные буквы одинаковыми?
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, ясно. Но я так понимаю что задание на кластерный анализ не может требовать от вас изобрести свой метод, речь наверняка идет о том чтобы найти и использовать один из существующих, наиболее подходящий под задачу?
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, k-means же работает по нескольким признакам?

    А можно пример? Ну конечно. Предположим, у нас есть набор данных пациентов. В кластерном анализе они называются признаками. О каждом из пациентов нам известны различные факты: возраст, пульс, кровяное давление, уровень холестерина, и т.д. Это вектор характеристик, представляющий пациента.


    просто сформируйте для каждого слова вектор из N признаков
    [значение признака 1, значение признака 2, ...., значение признака N]
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, но выбрать подходящий метод, и посмотреть реализацию (с целью сделать свою, упрощенную под задачу) ведь можно?
  • Стоит ли шифровать передаваемую информацию на стороне клиента?

    lastuniverse
    @lastuniverse
    xmoonlight, с такой точки зрения не рассматривал. Спасибо что дали вполне логичное объяснение.
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, извиняюсь, не ту ссылку кинул.
    https://github.com/mljs/kmeans
    k-means

    Что он делает? K-means создает k количество групп из набора объектов таким образом, чтобы члены этой группы были больше похожи. Это популярный метод кластерного анализа для изучения набора данных.

    Погодите, что такое кластерный анализ? Кластерный анализ — это семейство алгоритмов, предназначенных для формирования групп, где члены этих групп похожи друг на друга сильнее, чем на тех, кто в этой группе не состоит. Кластеры и группы являются синонимами в мире кластерного анализа.

    А можно пример? Ну конечно. Предположим, у нас есть набор данных пациентов. В кластерном анализе они называются признаками. О каждом из пациентов нам известны различные факты: возраст, пульс, кровяное давление, уровень холестерина, и т.д. Это вектор характеристик, представляющий пациента.

    Смотрите:

    О векторе характеристик можно думать, как о списке известных нам чисел, связанных с пациентом. Этот список также может быть интерпретирован как координаты в многомерном пространстве. Пульс может быть одним измерением, кровяное давление — другим и так далее.

    Вы, наверное, задаетесь вопросом:

    Учитывая этот набор векторов, как же мы сгруппируем вместе пациентов, близких по возрасту, с похожими значениями пульса, кровяного давления и т.д.?

    Хотите узнать лучшее свойство k-means?

    Вы лишь задаете количество нужных вам кластеров. K-means заботится обо всем остальном.

    Как же k-means заботится обо всем остальном? У k-means есть много вариаций для оптимизации определенных типов данных.

    Не вдаваясь в подробности, это происходит примерно так:

    k-means выбирает точки в многомерном пространстве для каждого из k кластеров. Их называют центроидами.
    Каждый из пациентов будет ближе всего к одному из этих центроидов. Скорее всего, не все из них будут ближе всего к одному и тому же центроиду, так что сформируется несколько кластеров вокруг соответствующих центроидов.
    У нас теперь есть k количество кластеров, и каждый из пациентов принадлежит к одному из них.
    k-means после этого находит центр каждого кластера, опираясь на членов этих кластеров (используя векторы характеристик пациентов).
    Этот центр становится новым центроидом кластера.
    Так как центроид теперь в другом месте, пациенты могут оказаться ближе к другому центроиду. Другими словами, они могут перейти в другой кластер.
    Шаги 2-6 повторяются до тех пор, пока центроиды больше не изменяются. Это называется конвергенцией.

    Это обучение с учителем или без? Большинство считают k-means самообучающимся алгоритмом. Кроме указания количества кластеров, k-means «узнает» кластеры сам по себе, без какой-либо информации о том, к какому кластеру принадлежит тот или иной признак. K-means может, тем не менее, быть полуконтролируемым.

    Почему стоит попробовать k-means? Мне кажется, это понятно.

    Главным преимуществом k-means является его простота. То, что он прост в реализации, означает, что он обычно быстрее и эффективнее других алгоритмов, особенно при работе с большим набором данных.

    К тому же, k-means можно использовать для предварительного кластерного анализа огромных наборов данных, чтобы потом воспользоваться более затратным алгоритмом кластерного анализа на самих кластерах. K-means также может изучать упущенные связи в наборе данных путем резкого изменения k.

    Но не все так радужно:

    Двумя главными недостатками k-means являются его чувствительность к выбросам и первоначальному выбору центроидов. И последнее, k-means был разработан для работы с непрерывными данными. Вам придется воспользоваться некоторыми уловками для того, чтобы работать с дискретными данными.

    Где он используется? Огромное количество реализаций k-means доступны в сети:

    Apache Mahout
    Julia
    R
    SciPy
    Weka
    MATLAB
    SAS

    Если же деревья решений и кластеризация не произвели на вас впечатление, вам гарантированно понравится следующий алгоритм…


    описание взято тут. Там же есть описания еще 9-и методов кластерного анализа, а реализация на конкретном ЯП гуглится по названию.
  • Стоит ли шифровать передаваемую информацию на стороне клиента?

    lastuniverse
    @lastuniverse
    Фокс Йовович, тоже повторюсь, то что вы пишите вполне понятно. Непонятно какой в этом смысл. Ведь если описанным вами способом в паблик попадет хэш, то его все так же можно использовать в качестве пароля.
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, да бог с ним, с ответом. На самом деле я не гонюсь за рейтингом, а просто иногда убиваю тут время.
  • Стоит ли шифровать передаваемую информацию на стороне клиента?

    lastuniverse
    @lastuniverse
    Bavashi, о, еще один (вы) не понимает разницы в векторах атаки.
    хэширование пароля на клиенте делают не для того, чтобы его украли по дороге на сервер (MITM).
    Это делают для того, чтобы на сервере пароль никогда не появлялся даже при регистрации.

    Фокс Йовович, пусть так, но повторю свой вопрос. По сути, в вашем варианте с точки зрения межсетевого обмена, данный хэш и станет паролем. И тот факт, что злоумышленник не знает изначальную форму пароля никак не поиешает ему (злоумышленнику) использовать для авторизации хэш? Или я что то не правильно понимаю?
  • Стоит ли шифровать передаваемую информацию на стороне клиента?

    lastuniverse
    @lastuniverse
    Если же мы говорим о взломе сервера и угоне хэшей - если хэшей не будет совсем, злоумышленник получит все пароли сразу. Даже просто засунутые в md5 пароли уже потребуют от него минимальной квалификации, а сделанные "правильно (соль + злая функция)" - практически лишат шансов на успех.

    Фокс Йовович, но что в данном случае помешает злоумышленнику просто отправлять на сервер хэш вместо пароля ?
    Возможно я что то не понимаю в данном вопросе.
  • Как правильно разделить слова по группам?

    lastuniverse
    @lastuniverse
    xmoonlight, я на самом деле далеко не великий специалист в данном вопросе, и даже возможно что совершенно неправильно понял суть вопроса. Просто предложу вариант как его вижу я:

    1. Создаем матрицы признаков для каждого из слов, Для этих целей можно использовать различные подходы. Но мне пока приходит на ум расстояния между слов, рассчитанные разными методами, например такими как (взяты из npm пакета natural):
    - Hamming distance
    - Jaro–Winkler
    - Levenshtein
    - Dice's co-efficient
    2. Используем методы кластерного анализа для определения устойчивых групп на основе собранных матриц признаков. (вот такую реализацию нашел https://github.com/typeetfunc/claster_analysis, навскидку должна подойти)

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

    lastuniverse
    @lastuniverse
    Делал недавно похожую задачку, за основу брал алгоритм расстояние Левенштейна.
  • Куда сохраняет напоминания голосовой ассистент Алиса (в аппаратном исполнении)?

    lastuniverse
    @lastuniverse Автор вопроса
    Спасибо, написал уже свою Алису, но все же ваша ссылка будет весьма полезна. Завтра проверю и коли все заработает, отмечу решением.
  • В чем ошибка парсера?

    lastuniverse
    @lastuniverse
    даже когда я делал так
    const pup = require('puppeteer');
    const fs = require('fs');
    
    const user = {
        name: '+38063 333 3333',
        pass: '111111111111'
    };
    
    const parse = async () => {
        try {
            let browser = await pup.launch({headless: false});
            let page = await browser.newPage();
            await page.goto('https://easypay.ua/ua/profile/wallets');
    
            await page.focus(`input[type="tel"]`)
            await page.keyboard.type(`${user.name}`)
    
            await page.focus(`input[type="password"]`)
    
        } catch (e) {
            console.error(e)
        }
    }
    parse();


    происходил редирект на строчке await page.focus(`input[type="password"]`)
  • В чем ошибка парсера?

    lastuniverse
    @lastuniverse
    Да фиг знает, никогда с таким не сталкивался.
  • В чем ошибка парсера?

    lastuniverse
    @lastuniverse
    эта ошибка появляется при попытке програмно кликнуть на поле с паролем
    Error: Node is either not visible or not an HTMLElement
        at ElementHandle._clickablePoint (/home/roman/work/puppeteer/node_modules/puppeteer/lib/cjs/puppeteer/common/JSHandle.js:337:19)
        at processTicksAndRejections (internal/process/task_queues.js:97:5)
        at async ElementHandle.click (/home/roman/work/puppeteer/node_modules/puppeteer/lib/cjs/puppeteer/common/JSHandle.js:390:26)
        at async DOMWorld.click (/home/roman/work/puppeteer/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:277:9)
        at async parse (/home/roman/work/puppeteer/app.js:18:9)