Контакты

Достижения

Все достижения (31)

Наибольший вклад в теги

Все теги (168)

Лучшие ответы пользователя

Все ответы (235)
  • Как генерировать случайные имена?

    qmax
    @qmax
    программер
    Марковские цепи помогут вычислить сочетаемость букв в именах, и выбирать наиболее "благозвучную" букву по контексту (префиксу).
    Метод архиэффективный и способен породить бесконечннешее количество слов.
    Но только если обучающая выборка достаточно большая.

    Мои рекомендации:
    Используйте длинну префикса 3-4 буквы (примерно длинна слога).
    Боле длинные префиксы будут порождать слова слишком похожие на исходные и их рекомбинации.
    Более короткие будут не очень благозвучны.
    Обязательно используйте символы начала и конца слова в качестве спец-буквы ('^' и '$'), просто пробела недостаточно, но уже не помню почему.

    Для имён имеет смысл генерить их с конца, поскольку окончания у имён специфичные, и рандом может долго не попадать на концевую цепочку, порождая излишне длинные слова. А при генерации с конца можно просто по критической длинне принудительно оборвать слово, или выйти на ближайшей остановке.

    Для хранения эффективно использовать префиксное дерево с частотами в качесве значений.
    Алгоритм составления словаря довольно простой:
    prefix = '^'
    for letter in text:
      freqdict[prefix+ letter] += 1 # увеличение счётчика этого сочетания
      if letter ='$':  # конец слова, сброс префикса
        prefix = '^'
      else:
        prefix = prefix[-depdth:] # обрезане префикса до максимальной длинны

    После этого нужно нормальизовать значения для каждого префикса, чтобы
    для каждого префикса сумма значений всех хвостов была = 1.
    При таком раскладе можно "склеить" частоты в единичный отрезок, разделёный на части пропорционально частоте, и рандомом выбирать "взвешенно-равномерно".

    Алгоритм генерации:
    prefix = '^'
    while prefix[-1] != '$':
      tails = freqdict[prefix].items() # под-дерево всех продолжений префикса в виде списка (key, value)
      thresh = random() # точка на единичном отрезке
      i = 0 # текущий элемент
      level = 0 # верхняя граница отрезка текущего элемента
      while thresh > level:
        level += tails[i][1]
        i++
      prefix += tails[i][0]


    Код написан по памяти, не принимайте на слово :)
    Наверно, мне уже пора выкладывать библиотеку для рыбогенерации...
    Ответ написан
  • Какая платформа больше подходит для электронного документооборота?

    qmax
    @qmax
    программер
    Вообще-то эти "общие СЭД программы" на то и общие, чтобы подстраиваться под всевоможные нужды.
    Если они вам чем-то не угодили, значит вам не нужен документооборот, а что-то другое.

    Ну а судя по первому опыту и упоминаиню PHP(yii) в качестве "платформы", думаю, что вас ждёт неминуемый провал и потеря времени и денег.
    Ответ написан
  • Проблема с импортом ( Python 3)

    qmax
    @qmax
    программер
    Рефакторить вам надо.
    Не должно быть циклических зависимостей.
    Ответ написан
  • В чем различие между классом, объектом и экземпляром?

    qmax
    @qmax
    программер
    У @vdem Плохой, негодный пример!
    У васи и маши есть общий метод - трахаться.
    Однако, реализация (и, может быть даже, сигнатура) этого метода у них совершенно разные.

    Тут налицо наличие базового абстрактногоо класса Человек с виртуальным методом трахаться.
    И два унаследованных класа М и Ж, вообще говоря, с сильно разными интерфейсами.
    Ответ написан
  • Как вы ведете учет прочитанных книг?

    qmax
    @qmax
    программер
    Чтение книг, котрое нужно учитывать - не имеет смысла.
    Лучше читайте то, что вам действительно интересно.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (54)