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

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    База знаний это набор фактов. Фактом может быть утверждение: Москва является столицей России. Факты могут иметь формат RDF триплета:

    _:Москва _:являетсяСтолицей _:Россия

    Данные/триплеты могут быть связные, например:

    _:Россия _:располагаетсяНаМатерике _:Евразия

    и получается уже маленькая База Знаний:

    _:Москва _:являетсяСтолицей _:Россия
    _:Россия _:располагаетсяНаМатерике _:Евразия

    Такие триплеты имеют формат графа. Чем больше триплетов, тем больше База Знаний. Откуда брать такие триплеты или как моделировать это уже другой вопрос. Можно извлечь из других Баз Знаний (dbpedia, freebase, etc). Можно самостоятельно извлекать именованные сущности из не структурированных данных (например СМИ, форумы), но это не тривиальная задача, однако выполнимая.

    Хранить это можно как в текстовых файлах в виде представленных выше триплетах, так и в NoSQL базах данных.

    Семантическая сеть оперирует фактами/триплетами. Найти ответ на вопрос в ней можно следующим образом:

    question = (my_apartment, has, what)
    knowledge = (
            (I, own, my_apartment),
            (my_apartment, has, my_computer),
            (my_apartment, has, my_bed),
            (my_apartment, is_in, Philadelphia)
        )
    for each statement in knowledge {
        if ((statement.subject == question.subject
                or question.subject == what) {
              and (statement.predicate == question.predicate
                or question.predicate == what)
              and (statement.object == question.object
                or question.object == what))
            call FoundAnswer(statement)
        }
    }
    
    Output:
        Answer: my_apartment has my_computer
        Answer: my_apartment has my_bed
    Ответ написан
    Комментировать
  • Предположим, что поисковики выключили. Как находить необходимую информацию в интернете?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    А вариант написать свой прототип поисковой системы не рассматривается? За неделю упрощенный вариант можно запустить -- и вы один на рынке :)
    Ответ написан
    1 комментарий
  • Книга "Конкретная математика. Математические основы информатики"?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Посмотрите условия доставки вот тут.
    Ответ написан
    Комментировать
  • Видеоуроки по алгоритмам?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Youtube принципиально? На Coursera есть хорошие уроки (тут и тут). Запись этих уроков можно и в торрентах найти.
    + есть книга хорошая по алгоритмам именно на Java.

    Updated:
    Нашел и на Youtube тут. Простой поиск по stanford algorithms coursera
    Ответ написан
    Комментировать
  • Какие технологии использовать для больших web-приложений?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    По данному вопросу лучше всего искать/изучать архитектуру систем Facebook, Google, YouTube, etc. Они очень часто выступают с докладами на данные темы.

    Если всё же немного конкретики, то думаю, что необходимыми технологиями является знания в проектировании HighLoad систем (тут можно их доклады с конференций посмотреть), memcache, mapreduce (hadoop например), БД для больших, распределенных, нагруженых данных, хранение данных. Многое из всего этого и Яндекс выкладывает тут. И посмотрите доклады Яндекса со всех YaC'ов.

    Можно посмотреть что в Facebook сделали для переноса php на с++ (транслятор).

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

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Если предыдущий опыт/знания были в ООП языках,  то можно поизучать языки с полностью противоположной парадигмой -- smalltalk, lisp, haskell.
    Ответ написан
    2 комментария
  • Стоит ли переходить на python3?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Могу просто процентировать, как на этот вопрос ответил Марк Лутц в своей книге:
    "переходить на Python 3 или нет, зависит от ваших целей. Многие большие проекты написаны много лет назад, насчитывают огромное количество строк кода. Никто переписывать их не собирается. Так что для сопровождения таких проектов вам придется знать особенности Python 2.x. Новые же проекты стараются все же писать под Python 3.x".

    Для своих проектов я тоже стараюсь выбирать Python 3.x -- зачем заставлять вновь-пришедшее поколение разбираться в тонкостях "уходящего".
    Ответ написан
    Комментировать
  • Какую книгу по Java посоветуете для начинающего Java Junior?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Я Java начал осваивать по "Философия Java", Брюс Эккель. Трудностей с пониманием материала никаких не испытывал. Так же надо понимать, что чисто языком ограничиться не получится, придется как минимум ещё и Swing почитать.
    Ответ написан
    8 комментариев
  • Как Яндекс и Гугл относятся к запросам во множественном и единственном числе?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Когда пользователь вводит запрос в поисковую систему, то данный запрос подвергается анализу (со стороны поисковика). Если не вдаваться в тонкости математики, то слова могут подвергаться стеммингу / лемматизации. Это значит, что окончания слов (суффиксы, мн.число->единственное число) могут урезаться. Некоторые поисковики это делают лучше, некоторые хуже. Например Yandex больше ориентируется на российский сегмент и окончания он учитывает для более точного ранжирования результатов (но всё же будет учитывать и базовую словоформу). Так что по хорошему из вашего примера, поисковик должен учесть 1443 + 387 (если каждый из примеров это 1 в 1 статическое совпадение словосочетания с учетом окончания). Пытаясь вручную оптимизировать окончания, вы намеренно пытаетесь игнорировать алгоритмы анализа поисковых запросов поисковой системой (плохо это или хорошо, сложно сказать -- тут надо анализировать расхождения в поисковой выдачи).

    Поисковые системы так же используют окончания слов для выявление зависимостей между словами в запросе. Это вопрос анализа данных (из области Natural Language Processing), но это уже, я так понимаю, не суть вашего вопроса.

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

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Ваша задача, это пересечение множеств:
    a = [1,2,3,10,5]
    b = [1,2,5,10,8]
    result = list( set(a) & set(b) )
    Ответ написан
    Комментировать
  • Как лучше хранить данные для последующей обработки?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Хранение данных в BigData порой граничит с искусством. В целом, тут как и везде -- всё зависит от задачи, которая ставится. В любом случае, работа/анализ с текстовыми данными неминуемо приведет вас к Инвертируемому индексу (причем к нескольким).

    Если пока вкратце, то вам надо проиндексировать содержимое "сырых данных" (файлы, веб, БД, etc). Пока проиндексировать как есть, без изменения самих данных. Если это реально BigData, то надо подумать о распределенном индексе, понимать стоит ли (а если да, то как) реплицировать индекс (но это уже вопрос производительности).

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

    Опять же, в зависимости от задач (направления анализа) вам надо подумать о тезаурусах, для решения синонимии терминов в вашем индексе. Но, это я уже пошел в сторону более глубокого анализа данных. Там много что вам понадобится.

    Если бы был пример конкретной задачи, то я бы по конкретнее написал о инструментах, подходах, методах.

    Немого ссылок:
    1. По информационному поиску / анализу данных читайте вот это:
    Введение в информационный поиск, Маннинг
    Обработка неструктурированных текстов. Поиск, орга...
    2. Импорт / фреймворки / библиотеки индексирования и поиска:
    Apach Solr
    Apach Tika
    3. Инвертированный индекс

    PS: всё же хотелось бы узнать о конкретной задачи, тогда было бы больше конкретики.

    UPD: в ряде случаев в BigData надо манипулировать графовой структурой данных. Соответственно, посмотрите в сторону соответствующих СУБД, например neo4j. Главное требования к СУБД в BigData -- минимализм функционала, иначе на больших данных работать будет всё крайне медленно.
    Ответ написан
    1 комментарий
  • Книги по математике для программистов?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Читать обо всем подряд в математике будет крайне не продуктивно. Надо отталкиваться от задачи, или хотя бы от направления, в котором придётся заниматься. Математика для разработчика шейдеров или библиотек в компьютерной графике мало пригодится для разработчика в области анализа данных (например в области Информационного поиска). Как писалось выше, действительно правильно было бы направить свои усилия на алгоритмы (не полениться досконально разобраться даже в элементарных алгоритмах). Если есть ощущение, что Кормен или Кнут тяжело идут и есть пробелы (а они наверняка будут), то можно на вооружение взять книгу Ахо, Построение и анализ вычислительных алгоритмов.

    Если всё же привести примеры "Конкретной математики", то программисту в любом случае пригодится хорошее понимание дискретной математики и линейной алгебры.

    Мне, как специалисту в области анализа данных, полезными являются такие пласты математики как мат.статистика, теория вероятности, немного тензорного анализа (но редко), ну и дискретная математика. Если брать по глубже, то и более специфичные знания являются полезными -- теория групп, теория категорий и т.д. Всё очень сильно зависит от задач.

    Если есть желание направить свои силы на изучение математики в области информационного поиска, то можно почитать книгу Маннинга, Введение в информационный поиск. Там множество отсылок к конкретным математическим пластам.

    Но алгоритмы и их хорошее понимание (включая асимптотику) является хорошим примером (началом) изучения математики отталкиваясь от задачи.
    Ответ написан
    Комментировать