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

Чтение английского текста из файла,выделение слов и перевод - C++

Восстановить пароль Регистрация
 
AlexPAI
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 1
02.07.2016, 15:06     Чтение английского текста из файла,выделение слов и перевод #1
Всем привет! Есть такая задача: считать из входного файла английский текст,выделить в нем все слова и записать в выходной файл с переводом. Написал такой код:


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
#include <stdio.h>
#include <fstream> 
const int MAXBUF = 1000000;  
 
 
int main()
{
    FILE *f1;
    char buf[MAXBUF], *p;
    int c;
    const char *fname = "Input.txt";
    
    if ((f1 = fopen(fname, "rb")) == NULL) //ошибка при открытии
        return 1;
        
    for (p = buf; p-buf < MAXBUF-1 && (c = getc(f1)) != EOF; p++) //считываем из файла все в массив, пока не встретим EOF
        *p = c;
        
    *p = '\0'; //завершающий 0
    printf("%s", buf); //итоговый массив со словами из файла
    fclose(f1);
    
    std::ofstream output("Output.txt");
    output << buf;
    
    return 0;
}
Здесь только чтение текста из входного файла Input.txt и запись в выходной файл Output.txt. Нужно еще выделить английские слова и записать в выходной файл с переводом (каждое слово с новой строки). Подскажите,пожалуйста,как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2016, 15:06     Чтение английского текста из файла,выделение слов и перевод
Посмотрите здесь:

C++ Чтение из файла и сортировка слов
Чтение слов из файла C++
C++ Чтение текста из файла
C++ Чтение файла GIF. Перевод текста в HEX. Декодирование GIF анимации
C++ Чтение текста из файла [VC++]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DUMP
54 / 28 / 7
Регистрация: 22.02.2015
Сообщений: 240
03.07.2016, 01:44     Чтение английского текста из файла,выделение слов и перевод #2
Цитата Сообщение от AlexPAI Посмотреть сообщение
Подскажите,пожалуйста,как это сделать?
1. Читаем символы и запихиваем например в std::string, пока не встретим пробел, знаки препинания итд.
2. Ищем слово по словарю или можно с помощью сервисов в инете.
3. Пишем перевод в файл.

Цитата Сообщение от AlexPAI Посмотреть сообщение
std::ofstream output("Output.txt");
после использования следует закрыть поток ( output.close(); )
daniilorain
👻👻👻
 Аватар для daniilorain
17 / 24 / 11
Регистрация: 22.04.2016
Сообщений: 165
03.07.2016, 04:46     Чтение английского текста из файла,выделение слов и перевод #3
Цитата Сообщение от DUMP Посмотреть сообщение
после использования следует закрыть поток ( output.close(); )
Компилятор, если не ошибаюсь, это сам может сделать в случае, если нет явного закрытия

Добавлено через 5 минут
Из книги Страуструпа: "Когда файловый поток выходит из области видимости, то связанный с ним файл закрывается. Когда файл закрывается, связанный с ним буфер сбрасывается; иначе говоря, символы из буфера записываются в файл."
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
03.07.2016, 08:51     Чтение английского текста из файла,выделение слов и перевод #4
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
//Есть такая задача: считать из входного файла английский текст,
//выделить в нем все слова и записать в выходной файл с переводом.
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <fstream>
#include <functional>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                             T_str;
typedef T_str                                   T_word;
typedef std::vector     < T_word    >           T_words;
typedef std::map        < T_word,   T_word  >   T_dictionary;
///////////////////////////////////////////////////////////////////////////////
T_word  trim_word( T_word   const   &   word )
{
    auto    begin_it    =   std::find_if
                                (
                                    word.begin  (),
                                    word.end    (),
                                    isalpha
                                );
 
    auto    end_it      =   std::find_if_not
                                (
                                    begin_it,
                                    word.end(),
                                    isalpha
                                );
 
    return  {
                begin_it,
                end_it
            };
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_input_text_from_file_and_set_words
    (
        T_str   const   &   filename,
        T_words         &   words
    )
{
    std::ifstream   ifile       ( filename  );
    bool            bool_res    { ifile     };
 
    if( bool_res )
    {
        T_words     crude_words;
 
        std::copy
            (
                std::istream_iterator< T_word >     ( ifile ),
                std::istream_iterator< T_word >     (),
                std::back_inserter                  ( crude_words )
            );
 
        T_words     words_with_empty;
 
        std::transform
            (
                crude_words.begin   (),
                crude_words.end     (),
                std::back_inserter  ( words_with_empty ),
                trim_word
            );
 
        std::copy_if
            (
                words_with_empty.begin  (),
                words_with_empty.end    (),
                std::back_inserter      ( words ),
 
                []                      ( auto  const   &   word )
                {
                    return  !word.empty();
                }
            );
 
        bool_res    =   !words.empty();
    }//if
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_from_file_input_dictionary
    (
        T_str           const   &   filename,
        T_dictionary            &   dictionary
    )
{
    std::ifstream   ifile       ( filename  );
    bool            bool_res    { ifile     };
 
    if( bool_res )
    {
        T_word  L;
        T_word  R;
 
        while   (
                        ( ifile     >>  L )
                    &&  ( ifile     >>  R )
                )
        {
            dictionary[L]   =   R;
        }
 
        bool_res    =   !dictionary.empty();
    }//if
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_for_words_and_dictionary_make_dictionary
    (
        T_words         const   &   words,
        T_dictionary    const   &   dictionary,
        T_dictionary            &   target_dictionary
    )
{
    bool    bool_res{};
 
    for( auto   const   &   word    :   words )
    {
        auto    it  =   dictionary.find( word );
        bool_res    =   it  !=  dictionary.end();
 
        if( !bool_res )
        {
            return  bool_res;
        }
 
        target_dictionary.insert( *it );
    }//for
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
void    in_file_write_dictionary
    (
        T_str           const   &   filename,
        T_dictionary    const   &   dictionary
    )
{
    const   char    SPACE_SYMB{'\t'};
    std::ofstream   ofile( filename );
 
    for( auto   const   &   L_and_R_words   :   dictionary )
    {
        ofile   <<  L_and_R_words.first
                <<  SPACE_SYMB
                <<  L_and_R_words.second
                <<  std::endl;
    }//for
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    const   T_str   INPUT_FILE_NAME         {"i.txt"};
    const   T_str   DICTIONARY_FILE_NAME    {"d.txt"};
    const   T_str   OUTPUT_FILE_NAME        {"o.txt"};
    T_words         eng_words;
    T_dictionary    eng_rus_dictionary;
 
    if  (
                successfully_input_text_from_file_and_set_words
                    (
                        INPUT_FILE_NAME,
                        eng_words
                    )
 
            &&  successfully_from_file_input_dictionary
                    (
                        DICTIONARY_FILE_NAME,
                        eng_rus_dictionary
                    )
        )
    {
        T_dictionary    text_dictionary;
 
        if  (
                successfully_for_words_and_dictionary_make_dictionary
                    (
                        eng_words,
                        eng_rus_dictionary,
                        text_dictionary
                    )
            )
        {
            in_file_write_dictionary
                (
                    OUTPUT_FILE_NAME,
                    text_dictionary
                );
 
            std::cout   <<  "Text is successfully translated."
                        <<  std::endl;
        }
        else
        {
            std::cout   <<  "In dictionary not found words for text."
                        <<  std::endl;
        }
    }
    else
    {
        std::cout   <<  "Bad input files!"
                    <<  std::endl;
    }
}
Yandex
Объявления
03.07.2016, 08:51     Чтение английского текста из файла,выделение слов и перевод
Ответ Создать тему
Опции темы

Текущее время: 15:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru