Git Product home page Git Product logo

ts-idx-2018's Introduction

ДЗ по курсу Инфопоиск (Техносфера)

Дано: дамп lenta.ru (10k документов)

Документы доступны по адресу: https://cloud.mail.ru/public/6ab6/N6h8vogNP/dataset

Для чтения документов используем docreader.py Используем поля .url и .text

Разбор документов на слова лучше организовать с помощью regexp-а r'\w+', см. doc2words.py
Необходимая нормализация: приводим все слова к нижнему регистру.
Лемматизацию и пр. - в этом ДЗ не используем.

Необходимо:

  • Создать индекс
  • Реализовать булев поиск

А конкретно

На оценку 15 (набор - 1.5К документов):

  • имплементировать кодирование varbyte
  • создать словарь термов (в любом виде)
  • разобрать текстовый запрос простого формата (см. далее)
  • вывести подходящие под булев запрос URL-ы

На оценку 20 (100К документов):

Дополнительно к предыдущему:

  • имплементировать метод Simple9
  • реализовать текстовый запрос полного формата (см. далее)

На оценку 25 (600К документов):

Дополнительно к предыдущему:

  • потоковая обработка дерева запроса
  • обязательно: индекс в бинарном виде
  • обязательно: словарь в бинарном виде (см. 2ю лекцию)

Состав пакета

Помимо исходников на Python Ваш пакет должен содержать 3 .sh-файла:

  • index.sh (varbyte|simple9) path/to/*.gz : создение индекса
  • make_dict.sh: создание словаря и оптимизация индекса
  • search.sh: непосредственно поиск
  • [опционально] preinstall.sh: скрипт, в котором вы можете установить необходимые пакеты

Вывод (stdout) подразумевается только от утилиты поиска.

Формат ввода

На stdin search.sh будет дана последовательность запросов в виде

запрос #1
запрос #2
...

Форматы запросов:

простой:

присутствуют только термы и конъюнкция ("&")

Пример: власти & бельгии

полный:

Формат каждого запроса - булево выражение содержашее слова и операторы: "(", ")", "&", "|", "!"

Пример: власти & (бельгии | парижа) & !теракт

Гарантируется что запрос валидный

Формат вывода:

ИСХОДНЫЙ ЗАПРОС
КОЛ-ВО результатов
URL1
URL2
...

Пример:
Путин & Медведев
2
https://lenta.ru/news/2015/08/30/putin/
https://lenta.ru/photo/2015/08/30/medput/

Внимание: выводимые url-ы должны быть в порядке возрастания docid!

Куда отправлять код

Код запакованный в .tgz отправляйте на [email protected]

В теме письма обязательно указывайте вариант (баллы). Формат: [Ir-ts] idx, Иван Иванов (var: 35)

Как будет происходить проверка

Для проверки будет использоваться набор документов lenta.ru в 10 и 50 раз больше данного. Ограничение по RAM: 2Gb

Из-за необходимости проверки реализации, оценка не будет автоматической. После получения оценки от робота, пришлите письмо еще раз со словом FINALTRY в теме.

Срок сдачи: 30 марта

FAQ

Q: Почему Python? Если жесткие ограничения, то не лучше ли на C++ ?
A: Python выбран намеренно, чтобы вы не урывались в системные оптимизации и не разбирались с memleak/segfault и т.п., а больше времени потратили бы именно на проработку логики. Ограничения по времени и памяти соответствуют именно Python-варианту.

Q: Нужно ли реализовывать SkipList ?
A: Нет, этого нет в задании и необходимости для данного кол-ва документов тоже нет. Однако, в свободное время я настоятельно советую это реализовать т.к. грамотная реализация улучшит ваши навыки декомпозиции кода и, в целом, программирования.

Q: Что если я сдал на вариант на 15 баллов, а после deadline сделаю вариант на 25?
A: К сожалению, вы получите лишь ceil(25 / 2) = 13 баллов. Так что планируйте свое время заранее и не доводите до deadline.

Q: Для чего нужен preinstall.sh?
A: Этот скрипт небходим, если вам нужны дополнительные Python-модули. Но, как правило, достаточно уже предустановленных protobuf, numpy, mmh3

ts-idx-2018's People

Contributors

dkrotx avatar

Watchers

James Cloos avatar Nastya Afanaseva avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.