April 16, 2023

Локальный ИИ Vicuna - программист!

ИИ - ПРОГРАММИСТ

### Человек:

> Представьте, что вы программист - гений! Напишите код на Python, который ищет и суммирует все числа из всех txt файлов на компьютере, выдавая список чисел, найденных в каждом файле.

Ответ ИИ:
Вот пример программы для поиска и суммирования всех чисел из нескольких текстовых файлов с использованием модуля `os` для обхода файловой системы, библиотеки `glob` для сопоставления имен файлов и функции `summarize_numbers()` для расчета итоговой статистики для числовых данных. Входные параметры включают каталог, в котором находятся текстовые файлы (`directory`), шаблон, используемый для идентификации текстовых файлов, содержащих числовые данные (`pattern`), и формат вывода сводного отчета (`output`). Если во время выполнения не возникло ошибок, выведите "Сводный отчет", а затем статистический анализ чисел по всем текстовым файлам. В противном случае выведите информацию об ошибке с подробным описанием проблемного файла или операции. И наконец, возвращает статус завершения в зависимости от того, возникли ли ошибки во время обработки.

``python
import os
from glob import glob
def summarize_numbers(filepaths):
    """Функция для извлечения и суммирования чисел из текстовых файлов."""
    # Инициализируем пустые словари для хранения статистики по файлам и в целом.
    num_files = 0
    total_nums = []
    running_total = {}
    current_file = None
    # Перебираем все файлы в заданном списке.
    for dirpath, _, files in os.walk(directory):
        if not any([f.startswith("text") for f in files]):
            continue
        num_files += 1
        # Найдите все текстовые файлы, соответствующие заданному шаблону.
        matches = [f for f in files if re.search(pattern, f)]
        # Обрабатываем каждый найденный текстовый файл по отдельности.
        for match in matches:
            filename = os.path.join(dirpath, match)
            try:
                # Открыть файл и прочитать его содержимое.
                with open(filename, "r") as f:
                    content = f.read()
                # Извлеките все числовые символы (целые или плавающие числа).
                num_list = re.findall(r'\d+', content)
                # Обновление сводной статистики для этого файла.
                if 'current_file' not in running_total:
                    running_total[current_file] = []
                running_total[current_file].extend(num_list)
                       current_file = filename
        total_nums += sum(running_total.values

(ответ ИИ не был дописан до конца по техническим причинам - но и по уже написанному можно составить примерное представление о способностях ИИ).

В другой раз, тот же ИИ, но запущенный с температурой=0, дал другой - более лаконичный (и полностью работоспособный!) ответ на похожий запрос:

Ответ ИИ: Вот код на языке Python, который ищет и суммирует все числа из всех текстовых файлов на компьютере, задавая список чисел, найденных в каждом файле:

``python
import os
numbers = set()
for file in os.listdir():
    if file.endswith(".txt"):
        with open(file, "r") as f:
            for line in f:
                for word in line.split():
                    if word.isdigit():
                        numbers.add(int(word))
for num in numbers:
    print(num)
```

Этот код использует модуль `os` для перебора всех текстовых файлов в текущем каталоге и читает каждую строку каждого файла, используя цикл `for`. Если строка содержит число, оно добавляется в набор `numbers` с помощью метода `add`.

Наконец, код просматривает набор `numbers` и выводит каждое число.

И ещё один вариант:

Кстати, он может составить и объяснить регулярные выражения - находка для программистов! Причем работает же и без интернета))) Уехал на природу - и программируй себе))) Вот пример:

Так же, ИИ просто невероятно удобен для обучению программированию! Он может дать обзор многих возможных способов решения какой-либо задачи на разных языках программирования - гугл не нужен, всё локально на компьютере! Например:

### Человек:

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

Ответ ИИ:

Существует несколько подходов и функций, которые можно использовать для извлечения чисел из текста. Вот некоторые из них:

1. Регулярные выражения: Один из подходов заключается в использовании регулярных выражений для поиска чисел в тексте. В Python есть встроенный модуль `re`, который обеспечивает функциональность сопоставления регулярных выражений. Например, следующий код использует регулярные выражения для поиска чисел в заданной строке:

``python
импортировать re

text = "Число равно 42".
pattern = r"\d+"
matches = re.findall(pattern, text)
print(matches)
```

Этот код использует функцию `re.findall` для поиска всех вхождений одной или нескольких цифр (`\d+`) в строке `text`. Список `matches` содержит все совпадения, найденные в тексте.

2. Строковые методы: Другой подход заключается в использовании строковых методов для поиска цифр в тексте. В Python есть встроенный модуль `str`, который предоставляет различные строковые методы для работы со строками. Например, следующий код использует метод `str.split` для поиска чисел в заданной строке:
``python
text = "Число равно 42".
numbers = [int(num) for num in text.split(" ")]
print(numbers)
```

Этот код разбивает строку `text` на список слов с помощью метода `str.split`, а затем использует понимание списка для перебора каждого слова и преобразования его в целое число с помощью функции `int`. Полученный список `numbers` содержит целые числа, найденные в тексте.

3. Фильтры числовых типов: Другой подход заключается в использовании фильтров числовых типов для поиска чисел в тексте. В Python есть встроенная функция `filter`, которую можно использовать для фильтрации списка элементов на основе определенного условия. Например, следующий код использует фильтр для поиска чисел в заданной строке:

``python
text = "Число равно 42".
numbers = list(filter(lambda x: x.isdigit(), text))
print(numbers)
```

Этот код использует лямбда-функцию для фильтрации символов в строке `text` на основе того, являются ли они цифрами (функция `isdigit`). Полученный список `numbers` содержит символы, которые являются цифрами.

4. Методы обработки естественного языка: Другой подход заключается в использовании методов обработки естественного языка для поиска цифр в тексте. В Python есть встроенный модуль `nltk`, который предоставляет различные инструменты обработки естественного языка. Например, следующий код использует функцию `nltk.tokenize.word_tokenize` для поиска чисел в заданной строке:

``python
import nltk

text = "Число равно 42".
токены = nltk.tokenize.word_tokenize(text)
numbers = [token for token in tokens if token.isdigit()]
print(numbers)
```

Этот код использует функцию `nltk.tokenize.word_tokenize` для разбиения строки `text` на список слов, а затем использует понимание списка для итерации каждого слова и проверки, является ли оно цифрой. Полученный список `numbers` содержит цифры, найденные в тексте.
### Человек: > это все?
Существуют и другие подходы и функции, которые можно использовать для извлечения чисел из текста, но перечисленные выше - одни из самых распространенных и широко используемых. В зависимости от конкретных требований и контекста проблемы, различные подходы и функции могут быть более или менее подходящими.