К сожалению, когда копируешь (кнопкой “Копировать”) исследования Perplexity он генерирует документы, которые не совсем Markdown - ссылки на источники он помещает в конце документа, а в тексте остаются только некликабельные указатели типа [10]
. Это неудобно, если хочешь поместить исследование например в Obsidian.
Нагенерил скрипт, который это исправляет. Не сильно фонтан, но может кому сэкономит немного времени.
import logging
import re
import sys
logging.basicConfig(
filename="perplexity.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
)
def process_file(filepath):
"""
Обрабатывает файл, заменяя ссылки на источники в тексте ссылками HTML.
Args:
filepath (str): Путь к файлу, содержащему текст и источники.
Returns:
str: Обработанный текст или None, если файл не найден или формат неправильный.
"""
try:
with open(
filepath, "r", encoding="utf-8"
) as f: # Указываем кодировку для поддержки русских символов
content = f.read()
# Разделяем текст и источники
parts = content.split(
"\n\nИсточники\n", 1
) # Разделяем только один раз, чтобы не сломать текст
if len(parts) != 2:
print("Ошибка: Файл не содержит раздел 'Источники'.")
return None
text = parts[0]
sources_section = parts[1]
# Извлекаем источники и создаем словарь
sources = {}
for line in sources_section.splitlines():
if (
line.strip() and "[" in line and "]" in line
): # Проверяем, что строка не пустая и содержит квадратные скобки
match = re.match(r"\[(\d+)\]\s+(.*)\s+(http.*)", line)
if match:
key = match.group(1)
name = match.group(2).strip() # Удаляем лишние пробелы в названии
link = match.group(3) # Добавляем префикс https://
sources[key] = (name, link)
# Заменяем ссылки в тексте
def replace_link(match):
key = match.group(1)
if key in sources:
_, link = sources[key]
return f"{key}({link})"
else:
return match.group(
0
) # Возвращаем исходный текст, если ссылка не найдена
processed_text = re.sub(r"\[(\d+)\]", replace_link, text)
return processed_text
except FileNotFoundError:
print(f"Ошибка: Файл не найден по пути {filepath}")
return None
except Exception as e:
print(f"Произошла ошибка при обработке файла: {e}")
return None
if __name__ == "__main__":
if len(sys.argv) > 1:
filepath = sys.argv[1] # Получаем путь к файлу из аргументов командной строки
else:
print("Использование: python perplexity.py <путь_к_файлу>")
sys.exit(1)
processed_text = process_file(filepath)
if processed_text:
# Сохраняем результат в новый файл
with open("output.md", "w", encoding="utf-8") as f:
f.write(processed_text)