@בן-החבורה
רבינו ירוחם.txt
@אור-אור-אור
לא מצאתי את ספר חוות דעת בויקיטקסט.

האדם החושב
-
המלצה | רוצה להכניס ספר מוויקיטקסט לאוצריא? כתוב כאן! -
שיתוף | נגן הקלדה עם מספר פיצ'רים נחמדים... -
המלצה | לקבל הודעות מוואטסאפ בלי וואטסאפ@יוסף-אלחנן וזה לא בוט?!
-
המלצה | לקבל הודעות מוואטסאפ בלי וואטסאפנראה לי מחיר קצת מוגזם לדבר שעם קצת מאמץ אפשר ליצור עם greenapi + ai בשביל הסינון.
-
בקשת מידע | שימוש בAPI של ימות ללא יחידות@aiib מגדיר שלוחה כהוספה לרשימת צינתוקים, המשתמש יצטרך להוסיף את עצמו, אין אפשרות אחרת.
https://f2.freeivr.co.il/topic/91/צינתוקים-במערכת-תוכן-ivr-ללא-עלות-יחידות?_=1750559032746 -
בקשת מידע | הגדרה מיוחדת לשימוש בAPI?@aiib אתה מתכוין אולי לQueueCallBack?
-
מדריך | CobaltRedAlert | קבלת התראות פיקוד העורף למייל או לSMS -
להורדה | אפליקצית תפילה לנוקיה 225\215 (2020) -
שיתוף | שדרוג מיילטוק - המייל הטלפוני@אביי
בתשובה מהטלפון אם מחקו הודעה ידנית מימות המשיח זה לא נמחק מהגיליון log כך שיש את מספר ההודעה פעמיים והנוסחה=VLOOKUP(A2,A5:B,2,FALSE)
לא מחזירה את הid הנכון.
פונקציה מתוקנת:function sendToYemot(id_message, message_tts) { let newName = getMaxFile(path_messages); if (newName !== "") { let newData = [Number(newName), id_message] const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("log"); const lastRow = sheet.getLastRow(); if (lastRow < 5) { sheet.appendRow(newData) }else{ const numRows = lastRow - 4; let range = sheet.getRange(5, 1, numRows, 2) let filtered = range.getValues().filter(item => item[0] !== newData[0]); range.clearContent() filtered.push(newData) sheet.getRange(5, 1, filtered.length, 2).setValues(filtered) } let filePath = `ivr2:/${path_messages}/${newName}.tts`; let data = { 'token': token_yemot, 'what': filePath, 'contents': message_tts }; let options = { 'method': 'post', 'payload': data }; let request = JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}UploadTextFile`, options)); Logger.log("request: " + request) if (request.responseStatus === 'OK') { return newName; } else { return false; } } else { return false; } }
בפונקציות השונות לשליחת המייל להוסיף יישור לימין
GmailApp.sendEmail(emailaddress, emailsubject, emailbody, {name: emailname, htmlBody: `<div style="direction: rtl; text-align: right; font-family: Arial, sans-serif;">${emailbody}</div>`})
-
בקשה | מחפש אקסל עם כל סימני וסעיפי שולחן ערוך@עניו-כמשה באקסל?, איזה אקסל?
-
בקשה | מחפש אקסל עם כל סימני וסעיפי שולחן ערוךאולי זה יותר טוב
שולחן ערוך, אבן העזר.csv
שולחן ערוך, אורח חיים.csv
שולחן ערוך, חושן משפט.csv
שולחן ערוך, יורה דעה.csvimport os import csv base_folder = r"C:\אוצריא\אוצריא\הלכה\שולחן ערוך" target_folder = r"C:\Users\User\Desktop\שוע" os.makedirs(target_folder, exist_ok=True) for i in os.listdir(base_folder): if i.endswith(".txt"): file_name = os.path.splitext(i)[0] with open(os.path.join(target_folder, f"{file_name}.csv"), 'w', encoding='windows-1255', newline="") as f: writer = csv.writer(f) writer.writerow(["סימן", "מספר הסעיפים"]) with open(os.path.join(base_folder, i), 'r', encoding='utf-8') as file: content = file.readlines() siman = "" seif = 0 for line in content[2:]: if line.strip().startswith(("<h2>", "<h3>")): if siman: writer.writerow([siman, seif]) siman = line.strip().replace("<h2>", "").replace(f"</h2>", "").replace("<h3>", "").replace(f"</h3>", "") seif = 0 else: seif += 1 if siman: writer.writerow([siman, seif])
-
בקשה | מחפש אקסל עם כל סימני וסעיפי שולחן ערוך@הריי-צ
שולחן ערוך, אבן העזר.csv
שולחן ערוך, אורח חיים.csv
שולחן ערוך, חושן משפט.csv
שולחן ערוך, יורה דעה.csvנראה לי שיש בעיה ביורה דעה בגלל סדר הגט וכו'
import os import csv base_folder = r"C:\אוצריא\אוצריא\הלכה\שולחן ערוך" for i in os.listdir(base_folder): if i.endswith(".txt"): file_name = os.path.splitext(i)[0] header = 2 if file_name == "שולחן ערוך, אבן העזר": header = 3 with open(f"{file_name}.csv", 'w', encoding='windows-1255', newline="") as f: writer = csv.writer(f) writer.writerow(["סימן", "מספר הסעיפים"]) with open(os.path.join(base_folder, i), 'r', encoding='utf-8') as file: content = file.readlines() siman = "" seif = 0 for line in content[2:]: if line.strip().startswith(f"<h{header - 1}>"): continue if line.strip().startswith(f"<h{header}>"): if siman: writer.writerow([siman, seif]) siman = line.strip().replace(f"<h{header}>", "").replace(f"</h{header}>", "") seif = 0 else: seif += 1 if siman: writer.writerow([siman, seif])
-
שיתוף | שדרוג מיילטוק - המייל הטלפוני@האדם-החושב כתב בשיתוף | שדרוג מיילטוק - המייל הטלפוני:
אופציה נוספת - לחכות לgoogle שיוסיפו פלט אודיו לgemini (בlive יש כבר, זכור לי שגם באחד המודלים הרגילים הם כתבו בתיעוד שהם יוסיפו בקרוב פלט אודיו).
הוסיפו את זה לפני כמה ימים.
המודלים Gemini 2.5 Flash Native Audio, Gemini 2.5 Pro Preview TTS ו Gemini 2.5 Flash Preview TTS -
בירור | הוספת הספרים של אוצריא לאורייתאimport zipfile import os from bs4 import BeautifulSoup otzaria_path = r"C:\אוצריא\אוצריא" output_path = "אורייתא" def convert_text(text: str) -> str: soup = BeautifulSoup(text, "html.parser") conversion_dict = { "h1": "$", "h2": "#", "h3": "@", "h4": "~", "h5": "!", "h6": "!", } for tag, replacement in conversion_dict.items(): for element in soup.find_all(tag): element.replace_with(f"{replacement} {element.text}") # type: ignore return str(soup) def to_zip(comment: str, file_path: str, file_content: str) -> None: with zipfile.ZipFile(file_path, "w") as zip_file: zip_file.comment = bytes(comment, "utf-8") zip_file.writestr("BookText", file_content) def main() -> None: unique_id = 3000 for root, dirs, files in os.walk(otzaria_path): rel_path = os.path.relpath(root, otzaria_path) for dir in dirs: if not os.listdir(os.path.join(root, dir)): continue os.makedirs(os.path.join(output_path, rel_path, dir), exist_ok=True) with open(os.path.join(output_path, rel_path, f"{dir}.folder"), "w", encoding="utf-8") as f: f.write(f"BranchName={dir}") for file in files: if not file.lower().endswith(".txt"): continue unique_id += 1 file_name = os.path.splitext(file)[0] with open(os.path.join(root, file), "r", encoding="utf-8") as f: text = f.read() converted_text = convert_text(text) comment = f"UniqueId={unique_id}\nDisplayName={file_name}" to_zip(comment, os.path.join(output_path, rel_path, f"{file_name}.obk"), converted_text) if __name__ == "__main__": main()
-
בירור | AI בימות המשיח - איך לעשות?@רפאל-vnkl לא, מצאתי שרת חינמי
-
בירור | הוספת הספרים של אוצריא לאורייתא@משה-ש. שם הקובץ נמצא בהערות ארכיון (באנדרואיד ולינוקס, בווינ' יש קובץ נפרד)
שם התיקייה נמצא בתקיה מעל התיקיה הנוכחית בסיומת .folder
קובץ הספרים הוא בעצם קובץ zip בסיומת obk. -
שיתוף | שדרוג מיילטוק - המייל הטלפוני@אלף-שין הם משתמשים בחלק מהקולות ב Cloud Text-to-Speech API של גוגל.
-
בירור | AI בימות המשיח - איך לעשות?@אופיר123 כתב בבירור | AI בימות המשיח - איך לעשות?:
התכוונתי לזיהוי דיבור של ימות, וזה מייתר את כל הצורך בזיהוי דיבור של גוגל שדובר פה
זה עולה כסף...
מה שאני עשיתי לעצמי לשימושי האישי זה שעשיתי שלוחת api עם הקלטה (בלי תמלול של ימות), נשלח וובהוק לשרת שלי והוא מוריד את הקובץ מימות ושולח אותו בתוספת פרומפט מערכת למודל של gemini שתומך בקלט אודיו, ואת התשובה הוא מכניס כtts למערכת.
השתמשתי במודל gemini-2.0-flash שיש לו עד 1,500 בקשות ליום במסלול החינמי והתוצאות די משביעות רצון.
לשימוש מרובה משתמשים אני מאמין שצריך למצוא פיתרון אחר. -
שיתוף | שדרוג מיילטוק - המייל הטלפוני@אביי לאור הבעיה של הקול בהקראה חשבתי על להוסיף אפשרות לעשות tts חיצוני ולהעלות לימות את האודיו, מה שיכול להפוך את ההקראה לנוחה הרבה יותר ויחסוך את זמן ההמתנה.
יש את הapi של openai, אבל הבעיה היא שהוא עולה כסף...
יש גם את המנוע Cloud Text-to-Speech API של גוגל, יש שם גם אופציה לssml וזה חינם עד 4,000,000 או 1,000,000 תווים לחודש (תלוי בקול)const urlYemotApi = `https://www.call2all.co.il/ym/api/`; const ttsApiKey = ''; const yemotApiKey = "" function textToSpeech(text) { const endpointUrl = 'https://texttospeech.googleapis.com/v1/text:synthesize?key=' + ttsApiKey; let requestBody = { 'input': { 'text': text }, 'voice': { 'languageCode': 'he-IL', 'name': 'he-IL-Wavenet-D', 'ssmlGender': 'MALE' }, 'audioConfig': { 'audioEncoding': 'LINEAR16', 'effects_profile_id':['telephony-class-application'] } }; let response = UrlFetchApp.fetch(endpointUrl, { method: 'POST', contentType: 'application/json', payload: JSON.stringify(requestBody) }); let obj = JSON.parse(response.getContentText()); let audioData = Utilities.base64Decode(obj.audioContent); let audioBlob = Utilities.newBlob(audioData, 'audio/wav', 'output.wav'); return audioBlob } function UploadFile(token, path, blob){ const formData = { token: token, path: `ivr2:/${path}`, convertAudio: "1", autoNumbering: "true", file: blob }; const options = { method: 'post', payload: formData, }; return JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}UploadFile`, options)).responseStatus === "OK"; }
אופציה נוספת - לחכות לgoogle שיוסיפו פלט אודיו לgemini (בlive יש כבר, זכור לי שגם באחד המודלים הרגילים הם כתבו בתיעוד שהם יוסיפו בקרוב פלט אודיו).
-
בירור | AI בימות המשיח - איך לעשות?@אופיר123 יש גם את החלק של שליפת ההקלטה מימות, אלא אם כן אתה רוצה רק הקשה.
בתשובת שרת עדיף פשוט ליצור tts חדש כדי שהוא לא יסתבך עם עברית אנגלית תווים לא חוקיים בהקראת התשובה.
@oryadaniely
ניתן לעשות שלוחת API.
גם בחלק של הכנרת דיבור לטקסט אין בכך צורך, יש מודלים שמקבלים אודיו כinput.
את התשובה אפשר להחזיר כטקסט, אין צורך בהמרה לאודיו.