import numpy as np from keras.layers import LSTM, Dense from keras.models import Sequential from keras.preprocessing.sequence import pad_sequences from keras.preprocessing.text import Tokenizer # Функция для генерации текста def generate_text(seed_text, gen_length): generated_text = seed_text for _ in range(gen_length): sequence = tokenizer.texts_to_sequences([seed_text])[0] sequence = pad_sequences([sequence], maxlen=seq_length) prediction = model.predict(sequence)[0] predicted_index = np.argmax(prediction) predicted_char = tokenizer.index_word[predicted_index] generated_text += predicted_char seed_text += predicted_char seed_text = seed_text[1:] return generated_text # Чтение текста из файла # with open('russian.txt', 'r', encoding='utf-8') as file: # text = file.read() with open('english.txt', 'r', encoding='utf-8') as file: text = file.read() # Создание экземпляра Tokenizer и обучение на тексте tokenizer = Tokenizer(char_level=True) tokenizer.fit_on_texts([text]) # Преобразование текста в последовательности чисел sequences = tokenizer.texts_to_sequences([text])[0] # Параметры модели seq_length = 10 # Создание входных и выходных последовательностей X_data, y_data = [], [] for i in range(seq_length, len(sequences)): sequence = sequences[i - seq_length:i] target = sequences[i] X_data.append(sequence) y_data.append(target) # Преобразование данных в формат массивов numpy X = pad_sequences(X_data, maxlen=seq_length) y = np.array(y_data) # Создание модели vocab_size = len(tokenizer.word_index) + 1 model = Sequential() model.add(LSTM(256, input_shape=(seq_length, 1), return_sequences=True)) model.add(LSTM(128, input_shape=(seq_length, 1))) model.add(Dense(vocab_size, activation='softmax')) # Компиляция модели model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # Обучение модели model.fit(X, y, epochs=100, verbose=1) # Генерация текста # seed_text = "Птица размахнула могучими крыльями" seed_text = "It seemed a longer job" generated_text = generate_text(seed_text, 250) print(generated_text)