דילוג לתוכן
0
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
עיצובים
  • בהיר
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • כהה
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו אתר

פורום אוצריא

אוצריא - דף הבית
|
קח שותפות בהוספת ספרים
|
תרום לאוצריא
האדם החושבה

האדם החושב

@האדם החושב
מפתח
הפסקת מעקב מעקב
אודות
פוסטים
39
נושאים
6
שיתופים
0
קבוצות
1
עוקבים
1
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • בירור | להכניס ספר בשפת מארקדאון לאוצריא עם פאנדוק אפשרי?
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הוספת ספרים markdown המרה

    @meir יש רשימה של התגיות הנתמכות.

    SUPPORTED_TAGS = {
        "a", "abbr", "acronym", "address", "article", "aside", "audio", "b", "bdi", "bdo", "big",
        "blockquote", "br", "caption", "cite", "code", "data", "dd", "del", "details", "dfn", "dl", "dt", "em", "figcaption", "figure", "footer", "font", "h1", "h2", "h3", "h4",
        "h5", "h6", "header", "hr", "i", "iframe", "img", "ins", "kbd", "li", "main", "mark", "nav",
        "noscript", "ol", "p", "pre", "q", "rp", "rt", "ruby", "s", "samp", "section", "small", "span",
        "strike", "strong", "sub", "sup", "summary", "svg", "table", "tbody", "td", "template", "tfoot",
        "th", "thead", "time", "tr", "tt", "u", "ul", "var", "video", "math", "mrow", "msup", "msub",
        "mover", "munder", "msubsup", "moverunder", "mfrac", "mlongdiv", "msqrt", "mroot", "mi", "mn", "mo"
    }
    

    https://github.com/Sub6Resources/flutter_html/wiki/Supported-HTML-Elements
    תגי css:
    https://github.com/Sub6Resources/flutter_html/wiki/Supported-CSS-Attributes

    זאת לפחות הספרייה שאוצריא השתמשה בה בעבר למיטב זכרוני, עכשיו אני רואה שלכאו' עברו לhttps://pub.dev/packages/flutter_widget_from_html, שם יש רשימה אחרת של התגים הנתמכים.


  • בירור | להכניס ספר בשפת מארקדאון לאוצריא עם פאנדוק אפשרי?
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הוספת ספרים markdown המרה

    @meir הנקודה היא שאוצריא לא תומכת בכל תגי הhtml, בנוסף - אוצריא מרנדרת שורה אחרי שורה, מה שיוצר מצב שכל העץ אמור להיות בשורה בודדת.


  • בירור | להכניס ספר בשפת מארקדאון לאוצריא עם פאנדוק אפשרי?
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הוספת ספרים markdown המרה

    @ספי

    import re
    from pathlib import Path
    
    import markdown
    from bs4 import BeautifulSoup
    from bs4.element import NavigableString
    
    SUPPORTED_TAGS = {
        "a", "abbr", "acronym", "address", "article", "aside", "audio", "b", "bdi", "bdo", "big",
        "blockquote", "br", "caption", "cite", "code", "data", "dd", "del", "details", "dfn", "dl", "dt", "em", "figcaption", "figure", "footer", "font", "h1", "h2", "h3", "h4",
        "h5", "h6", "header", "hr", "i", "iframe", "img", "ins", "kbd", "li", "main", "mark", "nav",
        "noscript", "ol", "p", "pre", "q", "rp", "rt", "ruby", "s", "samp", "section", "small", "span",
        "strike", "strong", "sub", "sup", "summary", "svg", "table", "tbody", "td", "template", "tfoot",
        "th", "thead", "time", "tr", "tt", "u", "ul", "var", "video", "math", "mrow", "msup", "msub",
        "mover", "munder", "msubsup", "moverunder", "mfrac", "mlongdiv", "msqrt", "mroot", "mi", "mn", "mo"
    }
    
    # Void/media tags: meaningful even with no text — never delete as "empty".
    VOID_TAGS = {
        "br", "hr", "img", "iframe", "svg", "video", "audio", "source",
        "input", "col", "area", "embed",
    }
    
    # Tags where newlines are significant — keep line breaks as <br> instead of dropping.
    PRE_TAGS = {"pre", "code", "textarea"}
    
    MD_EXTENSIONS = ["extra", "sane_lists"]
    
    # Block-level HTML wrappers whose inner markdown must still be parsed.
    # python-markdown treats content inside these as raw unless markdown="1" is set.
    _BLOCK_HTML_RE = re.compile(
        r"<(div|section|article|aside|main|header|footer|nav|details|figure)\b([^>]*)>",
        re.IGNORECASE,
    )
    
    
    def _enable_md_in_html(md_text: str) -> str:
        """Add markdown="1" to block wrappers so md_in_html parses their content."""
        def add_attr(m: "re.Match[str]") -> str:
            attrs = m.group(2)
            if "markdown" in attrs.lower():
                return m.group(0)
            return f'<{m.group(1)}{attrs} markdown="1">'
        return _BLOCK_HTML_RE.sub(add_attr, md_text)
    
    
    def _strip_unsupported(soup: BeautifulSoup) -> None:
        """Unwrap tags not in SUPPORTED_TAGS, keeping their content."""
        for tag in soup.find_all():
            if tag.name not in SUPPORTED_TAGS:
                tag.unwrap()
    
    
    def _flatten_newlines(soup: BeautifulSoup) -> None:
        """Keep every tag on one line: newlines -> space, but -> <br> inside pre/code."""
        texts = [n for n in soup.descendants if isinstance(n, NavigableString) and "\n" in n]
        for text in texts:
            in_pre = any(p.name in PRE_TAGS for p in text.parents)
            if not in_pre:
                text.replace_with(text.replace("\n", " "))
                continue
            new_nodes = []
            for i, part in enumerate(text.strip("\n").split("\n")):
                if i > 0:
                    new_nodes.append(soup.new_tag("br"))
                new_nodes.append(NavigableString(part))
            text.replace_with(*new_nodes)
    
    
    def _remove_empty(soup: BeautifulSoup) -> None:
        """Drop empty tags, but keep void/media tags and any tag wrapping one."""
        for tag in soup.find_all():
            if tag.name in VOID_TAGS:
                continue
            if not tag.get_text(strip=True) and not tag.find(VOID_TAGS):
                tag.decompose()
    
    
    def md_to_otzaria(md_text: str) -> str:
        md_text = _enable_md_in_html(md_text)
        html = markdown.markdown(md_text, extensions=MD_EXTENSIONS)
        soup = BeautifulSoup(html, "html.parser")
    
        _strip_unsupported(soup)
        _flatten_newlines(soup)
        _remove_empty(soup)
    
        # One top-level node per line.
        lines = []
        for node in soup.contents:
            if isinstance(node, NavigableString):
                stripped = node.strip()
                if stripped:
                    lines.append(stripped)
            else:
                lines.append(str(node))
    
        return "\n".join(lines)
    
    
    def main(md_file_path: Path | str, output_file_path: Path | str | None = None) -> None:
        md_file_path = Path(md_file_path)
        if output_file_path is not None:
            output_file_path = Path(output_file_path)
        else:
            output_file_path = md_file_path.with_suffix(".txt")
    
        with md_file_path.open("r", encoding="utf-8") as f:
            md_text = f.read()
    
        otzaria_text = md_to_otzaria(md_text)
    
        with output_file_path.open("w", encoding="utf-8") as f:
            f.write(otzaria_text)
    
    
    if __name__ == "__main__":
        md_file = r"C:\Users\User\Downloads\README (2).md"
        main(md_file)
    
    

  • עדכון | חדש באתר העריכה - עזרה באימון מודל OCR משוכלל!
    האדם החושבה האדם החושב
    בקשות מהציבור ocr בינה מלאכותית מתנדבים הקלדה

    האם הטקסט הוא מספרים שבכל מקרה אמורים להיכנס לאוצריא?, נראה לי שכך יצא רווח כפול.


  • המלצה | מודל ניתוח טקסט של ספריא
    האדם החושבה האדם החושב
    הצעות לשיפור - תוכנת אוצריא הצעה לפיתוח ספריא בינה מלאכותית ביוגרפיות קישור

    מופיע באתר של תא שמע תוכנת אינציקלופדיית רבנן, חינמי בבטא, כרגע הדף לא פעיל וגם בעבר אף פעם לא הצלחתי למצוא קישור להורדה
    https://jewishoffice.co.il/#:~:text=רוצה לשמוע עוד!-,רבנן,-אנציקלופדית אישים חינמית

    שווה בדיקה מולו.


  • בירור | יש ספרים חשובים שהייתם רוצים שייכנסו לאוצריא?
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הוספת ספרים היברובוקס

    @י.-פל. נכון, אבל שני המספרים הם מספרים של קווים.


  • הצעת ייעול | אוצריא באנגלית?
    האדם החושבה האדם החושב
    הצעות לשיפור - תוכנת אוצריא הצעה לפיתוח שפות

    קיימים אפשר ללכאו' למצוא עם רג'קס פשוט, כל התווים בעברית שהשורה לא מתחילה ככותרת


  • המלצה | github action להעלאה אוטומטית של גירסאות חדשות ישירות מgithub
    האדם החושבה האדם החושב
    תוספים לאוצריא - דיונים תוספים github פיתוח

    אני מוגדר כמנהל, כך שאין לי דרך לבדוק אם זה עובד אצל כולם, אבל קלוד עבר על קוד המקור של האתר וטען שזה יעבוד.
    קישור לaction
    הוראות:
    להגדיר בסודות github
    OTZARIA_USER — שם משתמש
    OTZARIA_PASSWORD — סיסמה
    OTZARIA_PLUGIN_ID -- המזהה של התוסף (ניתן לראות בurl של דף התוסף)

    האקשן רץ על ידי דחיפת tag חדש לgithub, גירסת התוסף תהיה כפי גירסת הtag/


  • בקשה | אוהב ספר? עזרה קלה בבקשה..
    האדם החושבה האדם החושב
    בעיות - ספריית אוצריא ספריית אוצריא שמות מחברים הוספת ספרים

    @י.-פל. הסקריפט שיצר את האקסל מהdb נמצא בריפו שם, תריץ אותו בעצמך.


  • להורדה | תוסף לקריאת קבצי zim (ויקישיבה וכו')
    האדם החושבה האדם החושב
    תוספים לאוצריא - פרסום תוספים הורדה קבצים zim

    יצרתי תוסף שמתבסס על kiwix-js לקריאת קבצי zim
    בעיות ידועות:

    • קבצים כבדים מידי לא נטענים.
    • הממשק קצת איטי.
    • לא נשמרים המיקומים של הקבצים בין הפעלה להפעלה.
      לצערי אין לי כ"כ זמן לטפל בזה, אם יש למישהו כח תע"ב.
      https://otzaria.org/plugins/6a046c40ac3cf8ffe1582035

  • הצעת ייעול | פירסום על תוספים חדשים
    האדם החושבה האדם החושב
    תוספים לאוצריא - דיונים הצעה לפיתוח תוספים התראות

    @יום-חדש-מתחיל ומאיפה בדיוק יגיעו העדכונים?


  • הצעת ייעול | קבלת עידכונים חשובים במייל מאוצריא
    האדם החושבה האדם החושב
    הצעות לשיפור - תוכנת אוצריא הצעה לפיתוח מייל עדכון

    @יום-חדש-מתחיל בעיקרון בניתי לזה בסיס
    https://github.com/Sivan22/otzaria-dev-channel/blob/main/.github/workflows/release-webhook.yml
    הבעיה היתה שלא מפורטים השינויים, כך שאין עניין להכניס הודעה לקו.
    לגבי צינתוק בלבד - זה אפשרי, אבל נצטרך לרכוש מספר נוסף למערכת כדי שידעו ממה מגיע הצינתוק.


  • הצעת ייעול | שער הציון
    האדם החושבה האדם החושב
    הצעות לשיפור - תוכנת אוצריא הוספת ספרים שער הציון

    @י.-פל. תלוי מאוד במבנה הטקסט שיביאו. (כותרות של החלקים, סימנים וסעיפים)
    קישור למילה המדוייקת בכל מקרה לא רלוונטי בגלל שקישור הוא לשורה.


  • הצעת ייעול | בעקבות השיפור בכינויים באיתור
    האדם החושבה האדם החושב
    אתר העריכה 'ספריית אוצריא' הצעה לפיתוח איתור מפרשים

    לדעתי כדאי פשוט להכניס את השנים וכך אח"כ תהיה אפשרות לקבוע סטנדרט אחיד


  • המלצה | מידע על מחברים
    האדם החושבה האדם החושב
    הצעות לשיפור - תוכנת אוצריא הצעה לפיתוח שמות מחברים ספריא python

    mediawiki.rar

    import requests
    import json
    from pathlib import Path
    from tqdm import tqdm
    from bs4 import BeautifulSoup
    
    WEKEPEDIA_API_URL = "https://he.wikipedia.org/w/api.php"
    WIKISOURCE_API_URL = "https://he.wikisource.org/w/api.php"
    HAMICHLAL_API_URL = "https://www.hamichlol.org.il/w/api.php"
    
    def get_authors_list(json_path: Path) -> set[str]:
        all_authors = set()
        with json_path.open('r', encoding='utf-8') as f:
            data = json.load(f)
        for book in data:
            authors = book.get("heAuthors")
            if authors is None:
                continue
            for author in authors:
                if author and author.strip():
                    all_authors.add(author.strip())
        return all_authors
    
    
    def get_search_results(url: str, author_name: str, session: requests.Session, params: dict | None = None) -> requests.Response:
        if params is None:
            params = {}
        headers = {
            "User-Agent": "MyWikipediaScript/1.0 (your_email@example.com)"
        }
        params.update({
            "action": "query",
            "format": "json",
            "list": "search",
            "srsearch": author_name,
            "utf8": 1
        })
        return session.get(url, params=params, headers=headers)
    
    
    def prosess_response(response: requests.Response) -> list[dict]:
        result = []
        data = response.json()
        for item in data['query']['search']:
            snippet = BeautifulSoup(item['snippet'], "html.parser").get_text()
            title = item['title']
            page_id=  item['pageid']
            result.append({
                "title": title,
                "snippet": snippet,
                "page_id": page_id
            })
        return result
    
    def main():
        all_results = {}
        metadata_path = Path(r"C:\Users\User\Downloads\all_metadata.json")
        # outpoot_path = Path(r"C:\Users\User\Downloads\authors_wikipedia_results.json")
        # outpoot_path = Path(r"C:\Users\User\Downloads\authors_wikisource_results.json")
        outpoot_path = Path(r"C:\Users\User\Downloads\authors_hamichlol_results.json")
        authors = get_authors_list(metadata_path)
        if outpoot_path.exists():
            with outpoot_path.open("r", encoding="utf-8") as f:
                all_results = json.load(f)
        with requests.Session() as session:
            for author in tqdm(authors, desc="Processing authors"):
                if author in all_results:
                    continue
                try:
                    # search_results = get_search_results(WEKEPEDIA_API_URL,author, session)
                    # search_results = get_search_results(WIKISOURCE_API_URL, author, session, {"srnamespace": 108})
                    search_results = get_search_results(HAMICHLAL_API_URL, author, session)
                    all_results[author] = prosess_response(search_results)
                except Exception as e:
                    print(f"Error processing author {author}: {e}")
            with outpoot_path.open('w', encoding='utf-8') as f:
                json.dump(all_results, f, ensure_ascii=False, indent=4)
    
    
    
    if __name__ == "__main__":
        main()
    

    מבוסס על שמות המחברים מהקובץ הזה.
    צריך סינון של הדף הרלווטי (אולי ai), מה שמופיע שם זה תוצאות חיפוש, בויקיטקסט כל התוצאות הם ממרחב השם "מחברים".


  • להורדה | השלמת שו"ת פרי עץ חיים
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הוספת ספרים דיקטה

    @קטנטן
    אלפי מנשה על התורה.rar

    import io
    import json
    import re
    import zipfile
    from pathlib import Path
    
    import requests
    from tqdm import tqdm
    
    BASE_URL = "https://files.dicta.org.il/library-1-0/"
    
    
    def get_toc(url: str) -> list[dict]:
        url = url + "pages.json"
        response = requests.get(url)
        return response.json()
    
    
    def get_page_content(url: str, page: str) -> dict:
        response = requests.get(url + page)
        if page.endswith(".zip"):
            with zipfile.ZipFile(io.BytesIO(response.content)) as z, z.open(z.namelist()[0]) as f:
                return json.loads(f.read().decode("utf-8"))
    
        return response.json()
    
    
    def process_page(output_file: io.TextIOWrapper, content: list[dict]) -> None:
        for entry in content:
            if 'display' not in entry:
                output_file.write(entry['str'])
                continue
            for i in entry['display']:
                val = i["c"]
                heading = i.get("heading", False)
                bold = i.get("bold", False)
                if heading is True:
                    output_file.write(f"<big>{val}</big>")
                elif bold is True:
                    output_file.write(f"<b>{val}</b>")
                else:
                    output_file.write(val)
    
    
    def main() -> None:
        book_name = "alfeimenashetorah"
        book_url = f"{BASE_URL}{book_name}/"
        book_name = "אלפי מנשה על התורה"
        author = ""
        target_file_path = Path(f"{book_name}.txt")
        toc = get_toc(book_url)
        with target_file_path.open("w", encoding="utf-8") as output_file:
            output_file.write(f"<h1>{book_name}</h1>\n{author}")
            for entry in tqdm(toc, total=len(toc)):
                page = entry["fileName"]
                output_file.write("\n")
                content = get_page_content(book_url, page)
                process_page(output_file, content["tokens"])
        with target_file_path.open("r", encoding="utf-8") as output_file:
            content = output_file.read()
            content = re.sub(r'\n+', '\n', content)
        with target_file_path.open("w", encoding="utf-8") as output_file:
            output_file.write(content)
    
    
    if __name__ == "__main__":
        main()
    
    

  • הצעת ייעול | הוספת מילון ראשי תיבות
    האדם החושבה האדם החושב
    הצעות לשיפור - תוכנת אוצריא הצעה לפיתוח מילון ראשי-תיבות

    https://abbreviation.dicta.org.il/

    אפשר לעבוד מול הapi שלהם אם יש למישהו רשימה של ראשי תיבות בלי פיענוח.


  • להורדה | השלמת שו"ת פרי עץ חיים
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הוספת ספרים דיקטה

    @יום-חדש-מתחיל
    פרי עץ חיים.rar

    import io
    import json
    import re
    import zipfile
    from pathlib import Path
    
    import requests
    from tqdm import tqdm
    
    BASE_URL = "https://files.dicta.org.il/prietshaim/"
    
    
    def get_toc() -> list[dict]:
        url = BASE_URL + "pages.json"
        response = requests.get(url)
        return response.json()
    
    
    def get_page_content(page: str) -> dict:
        response = requests.get(BASE_URL + page)
        if page.endswith(".zip"):
            with zipfile.ZipFile(io.BytesIO(response.content)) as z, z.open(z.namelist()[0]) as f:
                return json.loads(f.read().decode("utf-8"))
    
        return response.json()
    
    
    def process_page(output_file: io.TextIOWrapper, content: list[dict]) -> None:
        for entry in content:
            if 'display' not in entry:
                output_file.write(entry['str'])
                continue
            for i in entry['display']:
                val = i["c"]
                heading = i.get("heading", False)
                bold = i.get("bold", False)
                if heading is True:
                    output_file.write(f"<big>{val}</big>")
                elif bold is True:
                    output_file.write(f"<b>{val}</b>")
                else:
                    output_file.write(val)
    
    
    def main() -> None:
        book_name = "פרי עץ חיים"
        author = ""
        target_file_path = Path(f"{book_name}.txt")
        toc = get_toc()
        with target_file_path.open("w", encoding="utf-8") as output_file:
            output_file.write(f"<h1>{book_name}</h1>\n{author}")
            for entry in tqdm(toc, total=len(toc)):
                if entry["type"] == "index":
                    continue
                page = entry["fileName"]
                display_name = entry["displayName"]
                output_file.write(f"\n<h2>{display_name}</h2>\n")
                content = get_page_content(page)
                process_page(output_file, content["tokens"])
        with target_file_path.open("r", encoding="utf-8") as output_file:
            content = output_file.read()
            content = re.sub(r'\n+', '\n', content)
        with target_file_path.open("w", encoding="utf-8") as output_file:
            output_file.write(content)
    
    
    if __name__ == "__main__":
        main()
    
    


    אגב, בזכות זה חקרתי קצת יותר את האתר של דיקטה ויתכן שיש דרך להוריד את הספרים שעדיין לא ערכו עם ירידות שורה, הדגשות וכו'.


  • בקשת מידע | למה אף אחד לא יוצר תוכנה כמו אוצר החכמה?
    האדם החושבה האדם החושב
    התייעצויות pdf היברובוקס תוכנות עזר

    @נתנאל זה סה"כ דף html (100% קלוד) שמשמש כסייר קבצים....


  • להורדה | חדש! מאגר גיטאב - לספרים מותאמים לאוצריא
    האדם החושבה האדם החושב
    הוספת ספרים לספריית אוצריא הורדה github הוספת ספרים ספרים להורדה

    @י.-פל. כתב בלהורדה | חדש! מאגר גיטאב - לספרים מותאמים לאוצריא:

    בעבר היתה יוזמה ליצירת צורת הדף כHTML, שזה בעצם טקסט פשוט שמעוצב בצורת הדף, זה קל (משהו כמו אלפית מPDF), ומהיר, אבל נראה לי דהם לא התקדמו בזה.
    @האדם-החושב

    https://github.com/Yiddishe-Kop/Shas-Vilna

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון