Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Словарь синонимов в C++ приложении 
:(
    Опции темы
nikitos1980
Дата 29.7.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Добрый день
Требуется написать программу, позволяющую перефразировать (заменять одноименными п смыслу словами) часть текста, проще говоря, заменять синонимами. Хотелось бы применить существующий словарь. Что в данном случае можно использовать? 
PM MAIL WWW   Вверх
azesmcar
Дата 29.7.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



std::map и алгоритмы STL.
Код

#include <iostream>
#include <map>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
#include <functional>
#include <iterator>


typedef std::vector<std::string> string_vector;
typedef std::map<std::string, string_vector> synonyms_map;

struct transformer : public std::binary_function<std::string, synonyms_map, std::string>
{
    std::string operator () (const std::string& word, const synonyms_map& m) const
    {
        synonyms_map::const_iterator it = m.find(word);
        if (it != m.end())
        {
            string_vector::const_iterator itv = it->second.begin();
            return *(itv + rand() % it->second.size());
        }
        return word;
    }
};

int main()
{
    srand(static_cast<unsigned int>(time(0)));

    synonyms_map synonyms;

    synonyms["Ser"].push_back("Mister");
    synonyms["Ser"].push_back("Msye");
    synonyms["Ser"].push_back("Tovarish");
    synonyms["Ser"].push_back("Ey ty kozel");
    synonyms["sobaka"].push_back("psina");
    synonyms["sobaka"].push_back("suka");
    synonyms["vasha"].push_back("tvoya");

    std::string line = "Ser , vasha sobaka napisala na moyu obuv";

    std::istringstream stream(line);
    std::transform(
        std::istream_iterator<std::string>(stream),
        std::istream_iterator<std::string>(),
        std::ostream_iterator<std::string>(std::cout, " "),
        std::bind2nd(transformer(), synonyms));
}

вот пример, дополняй, изменяй.

Это сообщение отредактировал(а) azesmcar - 30.7.2009, 08:41
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.