Skip to content
andrewzhernov edited this page Sep 26, 2014 · 3 revisions

Название:

Умный Словарь -- SmartDict.

Цель:

Выучить английские слова и устойчивые выражения.

Задача:

Выдать список предложений из литературы, в которых содержится запрос.

План реализации:

  • Back-end

    • Индексатор(С++): получает на вход текст (тексты) и строит инвертированный индекс.

      • Парсер текста: выделение предложений и слов.

        class TParser
          void SplitText(const string& text, vector<string>& sentences) const;
          void SplitSentence(const string& sentence, vector<string>& words) const;
        
      • version 2.0 Предфильтр: выкидывает из индексируемого текста заведомо сложные предложения.

      • Хранение данных: два файла. Один находится в памяти -- map<word, block_id>. Второй -- на диске, состоит из блоков. Блок -- набор предложений.

        class TIndexer
          bool IndexSentence(const string& word, const string& sentence);
          bool LoadFromDisk();
          bool SaveToDisk();
        
      • version 2.0 Морфология: приведение слов к нормальной форме.

        /* Example: going -> go, chairs -> chair */
        class TLemmer
          void GetLemma(const string& word, string& lemma);
        
    • Поиск(С++): получает слово -- возвращает блок.

      class TSearcher
        bool InitIndex(const string& indexFile);
        void Find(const string& word, vector<string>& sentences) const;
      

      version 2.0 Получает набор слов. Тогда надо пересекать блоки. Для этого надо хранить каждый блок сортированным.

        void FindPhrase(const string& phrase, vector<string>& sentences) const;
      
    • Библиотека для ранжирования(С++): вычисляет сложность слов и сложность предложений.

      • Заранее обработать корпус текстов для получения частотностей слов. (Python)
      • На основе частотностей слов, написать библиотеку, которая будет вычислять сложность слова и сложность предложения.
        class TRanker
          double GetWordDifficulty(const string& word) const;
          double GetSentenceDifficulty(const string& sentence) const;
      
    • Веб-сервер, предоставляющий API поиска.

  • Front-end(HTML)

    • Для начала будет очень простым -- поисковая строка и результаты.