CoolFace
Apppublic

torahCodes/Torah_Codes

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
4likes
torah.py247 linesDownload Raw Back to lib
1from deep_translator import GoogleTranslator2import torahcodes.resources.func.utils as util3from hebrew_numbers import gematria_to_int4from textblob import TextBlob5from os import listdir6from os.path import isfile, join7import re8import time9import random10import os11import json12 13BLUE, RED, WHITE, YELLOW, MAGENTA, GREEN, END = '\33[1;94m', '\033[1;91m', '\33[1;97m', '\33[1;93m', '\033[1;35m', '\033[1;32m', '\033[0m'14ORANGE  = '\033[1;33m' # orange15 16 17data_dir = "resources/texts"18 19class BibleBooks():20    def __init__(self):21        self.folder = data_dir22        self.book = {}23    def load(self):24        25        for f in listdir(self.folder):26            print(f)27            if isfile(join(self.folder, f)) and f.endswith(".json"):28                fn = f.split('.')29                #print('Load', fn[0])30                with open(self.folder+f, encoding="utf-8-sig") as File:31                    self.book[fn[0]] = File.read()32 33    def rawdata(self, bookname):34        return self.book[bookname]35 36    def booklist(self):37        return list(self.book.keys())38 39books = BibleBooks()40 41class Torah():42	def __init__(self):43		self.book = ''44		self.gcode = {45            'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 600,46            'k': 10, 'l': 20, 'm': 30, 'n': 40, 'o': 50, 'p': 60, 'q': 70, 'r': 80, 's': 90,47            't': 100, 'u': 200, 'v': 700, 'w': 900, 'x': 300, 'y': 400, 'z': 50048		}49 50	def loadbooks(self):51		books.load()52 53	def func_getnumber(self, listL, listW):54		return util.fn_GetNumberValues(listL, listW)55 56	def func_checklang(self, word, lang):57		b = TextBlob(word)58		59		try:60			b.detect_language()61			if (b.detect_language() == lang):62				return True63		except:64			return True65		return False66 67	def numtobook(self, number):68		for x in books.booklist():69			xt = re.findall("[-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?", x)70			if xt[0] == str(number):71				return x72 73	def func_translate(self, lang_in, lang_out, data):74		translated = GoogleTranslator(source=lang_in, target=lang_out).translate(data.strip()) 75		return translated76 77	def gematria(self, word: str) -> int:78		try:79			if word.isdigit():80				return int(word)81 82			# Aufteilen des Wortes in Buchstaben und Zahlen83			letters = [char for char in word if char.isalpha()]84			numbers = [int(char) for char in word if char.isdigit()]85 86			# Berechnen des Gematria-Werts für die Buchstaben87			letters_value = sum([self.gcode[char] for char in letters if char in self.gcode])88 89 90			# Hinzufügen der Summe der Zahlen zum Gematria-Wert der Buchstaben91			total_value = letters_value + sum(numbers)92 93			return total_value94		except:95			print(word)96			raise ValueError97 98 99	def gematrix(self, phrase: str) -> int:100		phrase = self.strip_accents(phrase.lower())101		phrase = ''.join([i for i in phrase if i.isalpha() or i.isdigit() or i.isspace()])102 103		# Aufteilen der Eingabe in separate Wörter und Zahlen104		elements = phrase.split()105		total_value = 0106 107		for element in elements:108			if element.isalpha():109				# Berechne den Wert für Buchstaben110				total_value += sum([self.gcode[char] for char in element if char in self.gcode])111			elif element.isdigit():112				# Addiere Zahlen direkt zum Gesamtwert113				total_value += int(element)114 115		return total_value116 117 118 119 120 121 122	def strip_accents(self, s):123	    try:124	        return ''.join(125	            c for c in unicodedata.normalize('NFD', s)126	            if unicodedata.category(c) != 'Mn'127	        )128	    except:129	        return s130 131 132	def gematria_iw_int(text):133		return gematria_to_int(text)134 135 136	def func_ParseTranslation(self, translated, lang, active):137		abd = 'abcdefghijklmnñopqrstuvwxyz1234567890'138		str_split = translated.split(' ')139		str_final = ''140		for word in str_split:141			try:142				if word[0].lower() in abd:143					if active == 'true':144						if self.func_checklang(word, lang) == True:145							str_final = str_final+ word+' '146					else:147						str_final = str_final+ word+' '148			except:149				pass150		151		if not str_final == '':152			return str_final153		else:154			return 0155	def els(self, namebook, number, tracert='false', visualice=False):156		space = number157		abd = 'abcdefghijklmnñopqrstuvwxyz'158		i=1159		rese=""160		totalvalue = 0161		D = self.GetDataBook(namebook)162		for (z,b,y) in D:163			try:164				charnum = 0165				res=""166 167				for char in D[z,b,y]:168					charnum = charnum+1169					if (i % int(space)) == 0:170						if tracert == 'true':171							totalvalue = totalvalue + int(charnum)172							print('Source:',int(z),'chapter:', int(b),'Verse:', int(y),'CharNum:',int(charnum),'Char:', char)173 174						res=res+char175 176					i=i+1177				rese=rese+" "+res178			except:179				pass180		#print('Total', totalvalue)181		ret = re.sub('\s+', ' ', rese.strip())182		return ret, totalvalue183 184	def GetDataBook(self, bibleNumberBook):185 186 187		JSON = books.rawdata(bibleNumberBook) 188		ListOfJSONStringsParsed, ListOfJSONStringsParsedWithSpaces = util.fn_TextFilePreprocess(JSON)189		ListOfDictsOfJSONStringsParsed, ListOfDictsOfJSONStringsParsedWithSpaces = util.fn_ConvertJSONStringsToDicts(ListOfJSONStringsParsed, ListOfJSONStringsParsedWithSpaces)190		SearchTextChosen = util.fn_GetNumberOfTextChosen(ListOfDictsOfJSONStringsParsed)191		ZippedTupleNoSpaces, ZippedTupleWithSpaces = util.fn_ZippedTupleCreate(ListOfDictsOfJSONStringsParsed, ListOfDictsOfJSONStringsParsedWithSpaces, SearchTextChosen)192		D, DS = util.fn_DictionaryOfVersesCreate(ZippedTupleNoSpaces, ZippedTupleWithSpaces)193		S, L, DL, D5, ListOfWords = util.fn_DataObjectsCreate(D, DS)194		N, NW = util.fn_GetNumberValues(S, ListOfWords) 195		ListOfIndexesCustom = util.fn_ListOfIndexesCustomCreate(D5)196		W = util.fn_TupleOfWordsAndGematriaValuesCreate(ListOfWords, NW)197 198		return D199 200 201def process_json_files(start, end, step, length=0, tlang="en", spaces_include=False, strip_in_braces=True, strip_diacritics=True):202    base_path = "resources/texts"203    translator = GoogleTranslator(source='auto', target=tlang)204    results = []205 206    for i in range(start, end + 1):207        file_name = f"{base_path}/{i:02}.json"208        try:209            with open(file_name, 'r', encoding='utf-8') as file:210                data = json.load(file)211                text_blocks = data["text"]212 213                full_text = ""214                for block in text_blocks:215                    full_text += ' '.join(block)216 217                clean_text = full_text218                if strip_in_braces:219                    clean_text = re.sub(r"\[.*?\]", "", clean_text, flags=re.DOTALL)220                if strip_diacritics:221                    clean_text = re.sub(r"[^\u05D0-\u05EA ]+", "", clean_text)222                if not spaces_include:223                    clean_text = clean_text.replace(" ", "")224 225                if length != 0:226                    selected_characters = clean_text[step - 1::step][:length]227                else:228                    selected_characters = clean_text[step - 1::step]  # If length is 0, select all characters from step229 230                translated_text = translator.translate(''.join(selected_characters))231                if selected_characters != "":232                    results.append({233                        "book": i,234                        "title": data["title"],235                        "original_text": selected_characters,236                        "translated_text": translated_text237                    })238 239        except FileNotFoundError:240            results.append({"error": f"File {file_name} not found."})241        except json.JSONDecodeError:242            results.append({"error": f"File {file_name} could not be read as JSON."})243        except KeyError:244            results.append({"error": f"Expected key 'text' is missing in {file_name}."})245 246    return results247