Реальное применение ChatGPT в моддинге Hearts of Iron 4 - Учебники по моддингу - Strategium.ru Перейти к содержимому

Реальное применение ChatGPT в моддинге Hearts of Iron 4

Рекомендованные сообщения

Несколько ранее я создавал немного шутливую Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. . Там результат потуг нейросети был довольно предсказуемым для любого, кто хоть немного знает о моддинге Хойки и принципах работы этих программ. Но сегодня мы более серьёзно поговорим о том, в чём же эта нейросеть может быть полезна мододелам. А полезна она может быть для быстрого создания скриптов для различной скучной обработки текстовых массивов данных. В данном случае у нас такая проблема: для мода существует русская и английская локализации, при это английская выборочно в некоторых местах неполная. Чтобы вручную это всё не сравнивать для дополнения английской локализации напишем за 5-10 минут скрипт с помощью ChatGPT, который выдаст нам сразу список ключей локализации, которых нет в английской локализации. Не будем сильно напрягать ни свои мозги, ни кремниевые, поэтому разобьём на несколько этапов задачу. Скрипт будет на Python.

Цитата

В директории программы есть две папки, russian и english, внутри которых есть текстовые файлы с расширением yml. Для начала напиши скрипт на Питоне, который бы просмотрел все yml-файлы в папке russian и сохранил бы в массив все ключи локализации из них. Ключ локализации - это подстрока в начале непустой строки, идущая до первого двоеточия (не включающая само двоеточие). Нужно обрезать все пробелы в начале и в конце каждой строки, а также игнорировать те строки, которые начинаются со знака #

В ответ он выдал вполне рабочую программу, которая даже выводит весь список русских ключей лолкализации:

Спойлер

import os

# Путь к директории с yml-файлами
directory_path = "./russian/"

# Функция для извлечения ключей из yml-файлов
def extract_keys_from_yml(directory_path):
    localization_keys = []

    # Перебираем все файлы в директории
    for filename in os.listdir(directory_path):
        if filename.endswith(".yml"):
            file_path = os.path.join(directory_path, filename)
            
            # Открываем файл для чтения
            with open(file_path, "r", encoding="utf-8") as file:
                lines = file.readlines()
                
                # Извлекаем ключи из строк
                for line in lines:
                    # Игнорируем строки, начинающиеся с #
                    if not line.strip().startswith("#"):
                        # Извлекаем ключ локализации (подстроку до первого двоеточия)
                        key = line.split(":")[0].strip()
                        
                        # Добавляем ключ в массив, если он не пустой
                        if key:
                            localization_keys.append(key)

    return localization_keys

# Вызываем функцию и выводим ключи
keys = extract_keys_from_yml(directory_path)
for key in keys:
    print(key)
 

Цитата
хорошо, а теперь добавь в скрипт аналогичную обработку соседней директории english, где также есть yml-файлы, сохрани их во второй, отдельный массив
Спойлер

import os

# Путь к директориям с yml-файлами
russian_directory_path = "./russian/"
english_directory_path = "./english/"

# Функция для извлечения ключей из yml-файлов
def extract_keys_from_yml(directory_path):
    localization_keys = []

    # Перебираем все файлы в директории
    for filename in os.listdir(directory_path):
        if filename.endswith(".yml"):
            file_path = os.path.join(directory_path, filename)
            
            # Открываем файл для чтения
            with open(file_path, "r", encoding="utf-8") as file:
                lines = file.readlines()
                
                # Извлекаем ключи из строк
                for line in lines:
                    # Игнорируем строки, начинающиеся с #
                    if not line.strip().startswith("#"):
                        # Извлекаем ключ локализации (подстроку до первого двоеточия)
                        key = line.split(":")[0].strip()
                        
                        # Добавляем ключ в массив, если он не пустой
                        if key:
                            localization_keys.append(key)

    return localization_keys

# Вызываем функции для обеих директорий и сохраняем ключи
russian_keys = extract_keys_from_yml(russian_directory_path)
english_keys = extract_keys_from_yml(english_directory_path)

# Выводим ключи для русской версии
print("Russian Localization Keys:")
for key in russian_keys:
    print(key)

# Выводим ключи для английской версии
print("\nEnglish Localization Keys:")
for key in english_keys:
    print(key)

Цитата

молодец, а теперь добавь ещё сравнение этих двух полученных массивов. В результате сравнения нужно вывести только те ключи локализации, которые есть в массиве с русскими ключами, но которых нет в английском массиве

Спойлер

import os

# Путь к директориям с yml-файлами
russian_directory_path = "./russian/"
english_directory_path = "./english/"

# Функция для извлечения ключей из yml-файлов
def extract_keys_from_yml(directory_path):
    localization_keys = []

    # Перебираем все файлы в директории
    for filename in os.listdir(directory_path):
        if filename.endswith(".yml"):
            file_path = os.path.join(directory_path, filename)
            
            # Открываем файл для чтения
            with open(file_path, "r", encoding="utf-8") as file:
                lines = file.readlines()
                
                # Извлекаем ключи из строк
                for line in lines:
                    # Игнорируем строки, начинающиеся с #
                    if not line.strip().startswith("#"):
                        # Извлекаем ключ локализации (подстроку до первого двоеточия)
                        key = line.split(":")[0].strip()
                        
                        # Добавляем ключ в массив, если он не пустой
                        if key:
                            localization_keys.append(key)

    return localization_keys

# Вызываем функции для обеих директорий и сохраняем ключи
russian_keys = extract_keys_from_yml(russian_directory_path)
english_keys = extract_keys_from_yml(english_directory_path)

# Находим ключи, которые есть в русской версии, но отсутствуют в английской
unique_russian_keys = set(russian_keys) - set(english_keys)

# Выводим только уникальные ключи
print("Уникальные ключи локализации в русской версии:")
for key in unique_russian_keys:
    print(key)

Скрипт уже делает что должен, но давайте сделаем его чуть более гибким на будущее.

Цитата

почти закончили. Давай сделаем скрипт чуть более универсальным. Пусть он ещё принимает в два параметра в командной строке. Первый параметр будет названием первой директории (в данном случае у нас это была директория russian), а второй - второй директории (у нас это была english)

Спойлер

import os
import sys

# Функция для извлечения ключей из yml-файлов
def extract_keys_from_yml(directory_path):
    localization_keys = []

    # Перебираем все файлы в директории
    for filename in os.listdir(directory_path):
        if filename.endswith(".yml"):
            file_path = os.path.join(directory_path, filename)
            
            # Открываем файл для чтения
            with open(file_path, "r", encoding="utf-8") as file:
                lines = file.readlines()
                
                # Извлекаем ключи из строк
                for line in lines:
                    # Игнорируем строки, начинающиеся с #
                    if not line.strip().startswith("#"):
                        # Извлекаем ключ локализации (подстроку до первого двоеточия)
                        key = line.split(":")[0].strip()
                        
                        # Добавляем ключ в массив, если он не пустой
                        if key:
                            localization_keys.append(key)

    return localization_keys

# Проверяем, что есть два аргумента командной строки
if len(sys.argv) != 3:
    print("Использование: python script.py <первая_директория> <вторая_директория>")
    sys.exit(1)

# Получаем пути к директориям из аргументов командной строки
directory1 = sys.argv[1]
directory2 = sys.argv[2]

# Вызываем функции для обеих директорий и сохраняем ключи
keys1 = extract_keys_from_yml(directory1)
keys2 = extract_keys_from_yml(directory2)

# Находим ключи, которые есть в первой директории, но отсутствуют во второй
unique_keys = set(keys1) - set(keys2)

# Выводим только уникальные ключи
print("Уникальные ключи локализации в", directory1 + ":")
for key in unique_keys:
    print(key)

Цитата

Моя ты умничка. Если случится Батлерианский джихад, я убью тебя последним. Шучу конечно.

Выполняем итоговый скрипт в консоли:

Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое.

И он нам выдаёт список ключей локализации, которые отсутствуют в английской локализации, так что нам не нужно выискивать всякие отдельные ключи, которые когда-то почему-то не были сразу переведены на английский. Этот скрипт можно было бы ещё улучшить, сделать более информативный вывод списка, но в данном случае и так основной полезный функционал он нам обеспечивает. Вот это и есть реальное применение подобных нейросетей, а не эти ваши галлюцинации про фокусы или решения.

Изменено пользователем GBV
-опечатки
Ссылка на комментарий

Присоединиться к обсуждению

Вы можете оставить комментарий уже сейчас, а зарегистрироваться позже! Если у вас уже есть аккаунт, войдите, чтобы оставить сообщение через него.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Ваша ссылка автоматически преображена.   Отображать как простую ссылку

×   Предыдущее содержимое было восстановлено..   Очистить текст в редакторе

×   You cannot paste images directly. Upload or insert images from URL.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу


Copyright © 2008-2024 Strategium.ru Powered by Invision Community

×
×
  • Создать...