Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с текстом 
:(
    Опции темы
pontik
Дата 9.4.2016, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Имеется код, который подсчитывает сколько раз в тексте встречается то или иное слово. Хотелось бы узнать, как можно посчитать вероятность встречи сочетания букв в тексте? Например, текст "five fight home", и нужно получить следующее: fi - 66проц., ho - 33проц., fiv - 33, fig - 33, hom - 33 и так далее. Вот код, который считает слова, может быть, его можно усовершенствовать или есть какой то иной метод?

Код

#include "stdafx.h"
 
 
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <cctype>
#include <algorithm>
 
using namespace std;
 
 
 
 
int main()
    {
    map <string,int> words;
    
    ifstream in;
    in.open("C:\\text.txt");
    
    string word;
    
 
    while (in>>word)

{
        
        std::transform(word.begin(), word.end(), word.begin(), tolower);
    for(int i=0;i<word.size();i++){
        if(word[i]=='.'||word[i]==','||word[i]=='('||word[i]==')'||word[i]=='['||word[i]==']'||word[i]=='!'||word[i]=='?'||    word[i]=='"'||word[i]==';'||word[i]==':'||word[i]=='#'||word[i]=='$'||word[i]=='%'||word[i]=='^'||word[i]=='&'||
            word[i]=='*'||word[i]=='*'||word[i]=='+'||word[i]=='-'||word[i]=='“'||word[i]=='/'||word[i]=='”'||word[i]=='_' ) {
            word.erase(word.begin()+i);
            i--;
        }
    }
    if(!word.empty()&&word!="--")   
 
        words[word]++;
    }
 
    ofstream out;
    out.open("C:\\output.txt");
    
    int count = 0;
map <string,int>::iterator cur;
    
    out<<"Words count:"<<endl;
    
    for (cur=words.begin();cur!=words.end();cur++)
    {
        out<<(*cur).first<<": "<<(*cur).second<<endl;count+=(*cur).second;
    }
    
    out<<"Words percenc:"<<endl;
    
    for (cur=words.begin();cur!=words.end();cur++)
    {
        out<<(*cur).first<<": "<<(float)((float)(*cur).second/(float)count)*100<<"%"<<endl;
    }
    
 
    return 0;
}




Заранее спасибо.
PM MAIL   Вверх
cia
Дата 9.4.2016, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А как расчитываются эти проценты? fi - 66% - это относительно чего?

Добавлено через 4 минуты и 16 секунд
Видимо, имеется в виду процентное соотношение слов, содержащих указанное сочетание букв, к количеству всех слов?
А исходный набор этих сочетаний - он конечный и известен с самого начала?
PM WWW ICQ   Вверх
pontik
Дата 9.4.2016, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, по поводу процентов все верно. Не совсем понял Ваш второй вопрос. Есть два варианта: либо работать напрямую с текстом, либо уже использовать результат данного кода. То есть у нас в файле имеются записи следующего типа: 
fight: 3
five: 2
home: 4
Всего слов: 9
Уникальных слов: 3

Уже работая с этим списком, мы должны "отрывать" от каждого слова по 2 буквы и сравнивать с 2 буквами остальных слов. После чего выводить результат. Затем по 3 буквы и так далее.
В этом и вопрос, как реализовать это 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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