els_journal_date_range / tripitaka.py
neuralworm's picture
set source languages of rigveda and tripitaka to sanskrit, set source language of torah to auto
8a905a4
# TODO: Auto-tune by step / 2 , 4, 8, 16, 32, 64, so that the translation result has spaces
import logging
logger = logging.getLogger(__name__)
import json
import os
import re
from deep_translator import GoogleTranslator
from gematria import calculate_gematria
import math
import glob
import math
def process_json_files(start=1, end=52, step=1, rounds="1,-1", length=0, tlang="en", strip_spaces=True,
strip_in_braces=True, strip_diacritics=True, average_compile=False, translate=False):
base_path = "texts/tripitaka"
translator = GoogleTranslator(source='ne', target=tlang) # Assuming Nepali for tripitaka as well
results = []
for i in range(start, end + 1):
file_pattern = f"{base_path}/{i:02}*.json" # Using glob for flexible file names
for file_name in glob.glob(file_pattern):
try:
with open(file_name, 'r', encoding='utf-8') as file:
data = json.load(file)
full_text = ""
for gatha in data.get("gathas", []): # Accessing 'gathas' safely
full_text += gatha + " "
clean_text = full_text
if strip_in_braces:
clean_text = re.sub(r"\[.*?\]", "", clean_text, flags=re.DOTALL)
if strip_diacritics:
clean_text = re.sub(r'[^\u0900-\u097F\s]', '', clean_text)
clean_text = re.sub(r'[\u0951-\u0954\u0964\u0965]+', '', clean_text)
clean_text = re.sub(r'[०१२३४५६७८९]+', '', clean_text)
clean_text = clean_text.replace(":", "")
clean_text = clean_text.replace("?", "")
clean_text = clean_text.replace("!", "")
clean_text = clean_text.replace("-", "")
clean_text = clean_text.replace("'", "")
clean_text = clean_text.replace("\n\n ", " ")
clean_text = clean_text.replace("\n", " ")
clean_text = re.sub(r'\s+', ' ', clean_text)
if strip_spaces:
clean_text = clean_text.replace(" ", "")
text_length = len(clean_text)
#step=math.ceil(step/64)
selected_characters_per_round = {}
for round_num in map(int, rounds.split(',')):
if not (round_num == 1 and step > text_length) and not (round_num == -1 and step > text_length):
if round_num > 0:
current_position = step - 1
else:
current_position = text_length - 1 if step == 1 else text_length - step
completed_rounds = 0
selected_characters = ""
while completed_rounds < abs(round_num):
selected_characters += clean_text[current_position % text_length]
current_position += step if round_num > 0 else -step
if (round_num > 0 and current_position >= text_length * (completed_rounds + 1)) or \
(round_num < 0 and current_position < text_length * completed_rounds -1): # corrected condition here
completed_rounds += 1
selected_characters_per_round[round_num] = selected_characters
if average_compile and len(selected_characters_per_round) > 1:
result_text = ""
keys = sorted(selected_characters_per_round.keys())
for j in range(len(keys) - 1): # Changed i to j to avoid conflict with outer loop
result_text = average_gematria(selected_characters_per_round[keys[j]],
selected_characters_per_round[keys[j + 1]])
else:
result_text = ''.join(selected_characters_per_round.values())
if length != 0:
result_text = result_text[:length]
translated_text = translator.translate(result_text) if result_text and translate else ""
if result_text:
results.append({
"book": f"Tripitaka {i}.",
"title": f'{data.get("title")} {data.get("book_name")} {data.get("chapter")}',
"result_text": result_text,
"result_sum": calculate_gematria(result_text),
"translated_text": translated_text,
"source_language": "sa",
})
except (FileNotFoundError, json.JSONDecodeError, KeyError) as e:
results.append({"error": f"Error processing {file_name}: {e}"})
return results