Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Найти ключевые слова в тексте - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Z-buffer http://www.cyberforum.ru/cpp-beginners/thread864031.html
Приветствую. Требуется любой пример реализации программы, использующей для отрисовки объекта (любого, самого простого) Z-буфер. Сколько не пытаюсь, в интернете ничего подобного не обнаружил, а без...
C++ Поиск вершины в дереве Никак не могу понять как вставить этот алгоритма в программу, что приписать чтобы заработало. В особенности не понятно node** Tree куда что указывает. Объясните пожалуйста Функция возвращает... http://www.cyberforum.ru/cpp-beginners/thread864029.html
C++ Преобразование типов
Как преобразовать массив char message в строку char *strmessage ?????
списки (найти ошибку в коде) C++
что не так? #include "stdafx.h" #include <iostream> #include <conio.h> #define st struct st #define list struct spis list { int info;
C++ Подсчитать количество нулевых элементов в матрице и вывести их индексы http://www.cyberforum.ru/cpp-beginners/thread864012.html
дан массив A целых чисел. вывести этот массив на экран, подсчитать количество нулевых элементов и вывести их индексы.
C++ Массивы. Найти среднее количество элементов этой таблицы больше за среднее арифметическое всех ее элементов Дана цело числовая таблица. Найти среднее количество элементов этой таблицы больше за среднее арифметическое всех ее элементов. подробнее

Показать сообщение отдельно
hofmn
Helter Skelter
61 / 61 / 1
Регистрация: 19.09.2012
Сообщений: 133

Найти ключевые слова в тексте - C++

14.05.2013, 08:59. Просмотров 930. Ответов 3
Метки (Все метки)

Задача: дан файл с произвольным текстом. Найти первые 10 ключевых слов (т.е. таких, которые чаще всего встречаются).
Код, приведенный ниже, работает корректно.
Посоветуйте, что подправить/оптимизировать/улучшить.
Как данную задачу решили бы вы?
Листинг
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
using namespace std;
 
bool filter (char c)
{
    return c == '.' || c == ','  || c == ':'  ||
           c == ';' || c == '-'  || c == '_'  ||
           c == '!' || c == '?'  || c == '\"' ||
           c == '(' || c == ')'  || c == '/'  ||
           c == '$' || c == '\\' || c == '%';
}
 
int main()
{
    ifstream infile  ("text.txt");
    string s;
    std::map<string, int>::iterator it;
    std::map<int, string>::reverse_iterator rit;
    std::map<string, int> dictionary;
    std::multimap<int, string> resultDictionary;
 
    while (infile >> s)
    {
        // Remove chars (.,-, etc)
        s.resize (remove_if(s.begin(), s.end(), filter) - s.begin());
 
        if (!s.empty() && s.length() > 3)
        {
            if (dictionary.find(s) != dictionary.end())
            {
                // Increment counter of words
                dictionary.at(s)++;
            }
 
            // Insert word in the map
            else
            {
                dictionary.insert (pair<string,int>(s, 1));
            }
        }
    }
 
    for (it = dictionary.begin(); it != dictionary.end(); ++it)
    {
        resultDictionary.insert(pair<int, string> (it->second, it->first));
    }
 
    int i;
 
    cout << "Top 10 keywords of the text:" << endl;
 
    for (rit = resultDictionary.rbegin(), i = 1;
         rit != resultDictionary.rend(), i < 11;
         rit++, i++)
    {
        cout << rit->second << " => " << rit->first << endl;
    }
 
    return 0;
}


Добавлено через 10 часов 40 минут
Актуально
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru