בקשת עזרה תוכנה למיון ספרים!
-
@אלף-שין בשביל OCR תוכל להשתמש בtesseract. יש להם גם API לפייתון.
אבל אני מאמין שתוכל עם ספריה כמו PDFPY2 למצוא אם יש תיבת טקסט, כמו שהצעת, וזה יותר פשוט.@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
אבל אני מאמין שתוכל עם ספריה כמו PDFPY2 למצוא אם יש תיבת טקסט, כמו שהצעת, וזה יותר פשוט.
ניסיתי קרוב ל40 פעם [עם כל מיני שינויים ותיקונים כל פעם] ולא הצלחתי.
@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
בשביל OCR תוכל להשתמש בtesseract
אפשר להוריד באמצעות PIP?
-
@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
אבל אני מאמין שתוכל עם ספריה כמו PDFPY2 למצוא אם יש תיבת טקסט, כמו שהצעת, וזה יותר פשוט.
ניסיתי קרוב ל40 פעם [עם כל מיני שינויים ותיקונים כל פעם] ולא הצלחתי.
@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
בשביל OCR תוכל להשתמש בtesseract
אפשר להוריד באמצעות PIP?
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
בשביל OCR תוכל להשתמש בtesseract
אפשר להוריד באמצעות PIP?
וודאי, רק תכתוב באותיות קטנות, ותשים לב כשאתה מעתיק לא להעתיק את ה-ב' שבתחילת המילה.
מחכים כבר מאוד להודעה הדרמטית שלך.........
-
לא ממומלץ ocr זה הרבה יותר מורכב מאשר רק לזהות אם תמונה מסוימת קיימת בטוח יש מודולים שמזהים את זה תגגל
@mefateach
הלוואי. -
@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
אבל אני מאמין שתוכל עם ספריה כמו PDFPY2 למצוא אם יש תיבת טקסט, כמו שהצעת, וזה יותר פשוט.
ניסיתי קרוב ל40 פעם [עם כל מיני שינויים ותיקונים כל פעם] ולא הצלחתי.
@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
בשביל OCR תוכל להשתמש בtesseract
אפשר להוריד באמצעות PIP?
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
ניסיתי קרוב ל40 פעם [עם כל מיני שינויים ותיקונים כל פעם] ולא הצלחתי.
אני מאמין שהוא התכוין לזה:
pip install PyPDF2
-
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
ניסיתי קרוב ל40 פעם [עם כל מיני שינויים ותיקונים כל פעם] ולא הצלחתי.
אני מאמין שהוא התכוין לזה:
pip install PyPDF2
@יום-חדש-מתחיל
הספריה הזאת PyPDF2 לא מזהה,
בדקתי בעשרות הגדרות שניסיתי. -
@אלף-שין תגגל על tensorflow
אבל:
@sivan22 כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:למה לא להשתמש פשוט בשם הקובץ? קבצים שיורדים מהיברובוקס מתחילים במילה hebrewbooks.
@mefateach כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
@אלף-שין תגגל על tensorflow
לא, זה מדאי כבד לי,
אני צריך בסך הכל שיהיה חע סקריפט שעובד על קבצי הPDF
שהשקריפט לא זיהה בהם בעמוד הראשון את התו W,
במקרה כזה הסקריפט יעשה OCR לעמוד הראשון בלבד,
ואז יחפש אם יש את התו W. -
@יום-חדש-מתחיל
הספריה הזאת PyPDF2 לא מזהה,
בדקתי בעשרות הגדרות שניסיתי.פוסט זה נמחק! -
@יום-חדש-מתחיל
הספריה הזאת PyPDF2 לא מזהה,
בדקתי בעשרות הגדרות שניסיתי.@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
הספריה הזאת PyPDF2 לא מזהה
https://pypi.org/project/PyPDF2/
pip install PyPDF2
עריכה: עכשיו אני רואה שהסקריפט שכתבת למעלה גם משתמש בספרי' הזו...
-
שלום רב
לאחר עבודה הנני שמח לבשר על תחילתו של סקריפט למיון ספרים במחשב,
המטרה היא שמי שהוריד הרבה ספרים מהיברו-בוקס יוכל למיין אותם בקלות ואוטומטית לתיקייה ייעודית,לכן כתבתי בס"ד סקריפט שבודק אם בעמוד הראשון או השני בקובץ מופיע W [הקישור לאתר שלהם]
ואם אכן מוצא תו זה הוא מעביר מיד את הקובץ לתיקייה שנבחרה,
להלן הסקריפט:import os import tkinter as tk from tkinter import filedialog import PyPDF2 import re import shutil import threading from queue import Queue from pdfminer.high_level import extract_pages from pdfminer.layout import LAParams, LTTextBox, LTTextContainer class PDF_Sorter: def __init__(self, root): self.root = root self.root.title("PDF Sorter") self.create_gui() def create_gui(self): self.source_folder = tk.StringVar() self.dest_folder = tk.StringVar() frame = tk.Frame(self.root) frame.pack(fill="both", expand=True) tk.Label(frame, text="Source Folder:").pack() self.source_folder_entry = tk.Entry(frame, textvariable=self.source_folder, width=50) self.source_folder_entry.pack() tk.Button(frame, text="Browse", command=self.browse_source_folder).pack(side=tk.LEFT, padx=5, pady=5) tk.Label(frame, text="Destination Folder:").pack() self.dest_folder_entry = tk.Entry(frame, textvariable=self.dest_folder, width=50) self.dest_folder_entry.pack() tk.Button(frame, text="Browse", command=self.browse_dest_folder).pack(side=tk.LEFT, padx=5, pady=5) tk.Button(frame, text="Start", command=self.sort_pdfs).pack(padx=5, pady=5) def browse_source_folder(self): self.source_folder.set(filedialog.askdirectory()) def browse_dest_folder(self): self.dest_folder.set(filedialog.askdirectory()) def sort_pdfs(self): self.queue = Queue() for root, dirs, files in os.walk(self.source_folder.get()): for file in files: if file.endswith('.pdf'): file_path = os.path.join(root, file) self.queue.put((file_path, self.dest_folder.get())) self.worker_thread = threading.Thread(target=self.process_queued_pdfs) self.worker_thread.start() self.root.after(1000, self.worker_thread.join) print("PDF sorting complete") def process_queued_pdfs(self): while not self.queue.empty(): file_path, dest_folder = self.queue.get() try: with open(file_path, 'rb') as pdf_file: pdf_reader = PyPDF2.PdfReader(pdf_file) for i in range(min(2, len(pdf_reader.pages))): text = pdf_reader.pages[i].extract_text() if re.search(r'w|W', text, re.IGNORECASE) or re.search(r'\\\[]', text): shutil.copy(file_path, os.path.join(dest_folder, os.path.basename(file_path))) break except Exception as e: print(f"Error processing {file_path}: {e}") if __name__ == "__main__": root = tk.Tk() pdf_sorter = PDF_Sorter(root) root.mainloop()
הבעיה היא שכ50% מהספרים של היברו בוקס,
הסימן מים שלהם מופיע לא כמלל רגיל, אלא כמלל בתוך תיבת טקסט,
ולא הצלחתי עד כה למצוא ספרייה שתצליח לזהות את המלל,
לכן אני מבקש עזרה מכל המומחים פה מי שיכול לעזור תע"ב,
נ"ב: אפשר גם לעשות סקריפט שרק יזהה אם קיים תיבת טקסט, ואם כן יעביר,
לא משנה מה כתוב בה, כי רק בספרים שלהם יש תיבת טקסט בעמוד הראשון....עריכה:
בפוסט האחרון עדכנתי את הסקריפט, מי שרוצה יכול לדלג לשם,
הוא ממין בצורה יסודית,
רק אני מבקש עזרה ממי שיכול לקמפל אתו.from pypdf import PdfReader def is_hebrew_books(file): reader = PdfReader(file) annotations = reader.pages[0].annotations for annotation in annotations: if annotation.get("/Subtype") == "/Link" and annotation.get("/A").get("/URI") == "http://www.hebrewbooks.org": return True return False
נ.ב. בדקתי רק על שני קבצים
-
from pypdf import PdfReader def is_hebrew_books(file): reader = PdfReader(file) annotations = reader.pages[0].annotations for annotation in annotations: if annotation.get("/Subtype") == "/Link" and annotation.get("/A").get("/URI") == "http://www.hebrewbooks.org": return True return False
נ.ב. בדקתי רק על שני קבצים
@yzahn
כנראה התכוונת לזה:from PyPDF2 import PdfReader def is_hebrew_books(file): reader = PdfReader(file) try: annotations = reader.getOutlines() except: return False for item in annotations: if isinstance(item, dict): if item.get('/URI', '').startswith('http://www.hebrewbooks.org'): return True return False # Example usage: file_path = 'path_to_your_file.pdf' # replace with your file path result = is_hebrew_books(file_path) if result: print("The PDF is a Hebrew book.") else: print("The PDF is not a Hebrew book.")
אבל זה לא זיהה לי...
צריך ספריית PDF מתקדמת יותר... -
@yzahn
כנראה התכוונת לזה:from PyPDF2 import PdfReader def is_hebrew_books(file): reader = PdfReader(file) try: annotations = reader.getOutlines() except: return False for item in annotations: if isinstance(item, dict): if item.get('/URI', '').startswith('http://www.hebrewbooks.org'): return True return False # Example usage: file_path = 'path_to_your_file.pdf' # replace with your file path result = is_hebrew_books(file_path) if result: print("The PDF is a Hebrew book.") else: print("The PDF is not a Hebrew book.")
אבל זה לא זיהה לי...
צריך ספריית PDF מתקדמת יותר... -
@yzahn
אה..
חבל שלא ידעתי...
כי לא הבנתי למה יש כל הזמן שגיאות...
סידרתי רק באדיבות GPT כלשהוא....
עכ"פ אשמח דווקא לקבל עזרה אבל צריך סקריפט שיסרוק ב3 שלבים:
1] האם מופיע תו W בעמוד הראשון- אם כן מעביר, אם לא עובר לשלב 2,
2] האם נמצא בעמוד הראשון תיבת טקסט [אם כן בטוח יש בתוכה W] אם כן מעביר, אם לא עובר לשלב 3,
3] מעביר את העמוד הראשון OCR, ובודק שוב האם נמצא תו W. -
@yzahn
אה..
חבל שלא ידעתי...
כי לא הבנתי למה יש כל הזמן שגיאות...
סידרתי רק באדיבות GPT כלשהוא....
עכ"פ אשמח דווקא לקבל עזרה אבל צריך סקריפט שיסרוק ב3 שלבים:
1] האם מופיע תו W בעמוד הראשון- אם כן מעביר, אם לא עובר לשלב 2,
2] האם נמצא בעמוד הראשון תיבת טקסט [אם כן בטוח יש בתוכה W] אם כן מעביר, אם לא עובר לשלב 3,
3] מעביר את העמוד הראשון OCR, ובודק שוב האם נמצא תו W.@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
אבל צריך סקריפט שיסרוק ב3 שלבים
למה החלטת ככה? מה לא טוב עם הפונקציה שלי? (תביא דוגמאות של קבצים שזה לא עובד עליהם ואנסה לתקן)
האם נמצא בעמוד הראשון תיבת טקסט
תוכל להגדיר בשפה יותר טכנית/מדוייקת מה זה תיבת טקסט? כי המושג "תיבת טקסט" לא קיים ב-PDF
-
@yzahn
אה..
חבל שלא ידעתי...
כי לא הבנתי למה יש כל הזמן שגיאות...
סידרתי רק באדיבות GPT כלשהוא....
עכ"פ אשמח דווקא לקבל עזרה אבל צריך סקריפט שיסרוק ב3 שלבים:
1] האם מופיע תו W בעמוד הראשון- אם כן מעביר, אם לא עובר לשלב 2,
2] האם נמצא בעמוד הראשון תיבת טקסט [אם כן בטוח יש בתוכה W] אם כן מעביר, אם לא עובר לשלב 3,
3] מעביר את העמוד הראשון OCR, ובודק שוב האם נמצא תו W.@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
באדיבות GPT כלשהוא
הוא טעה בגדול, אין קשר בין הקוד שהוא פלט לקוד שלי
הנה התיקון עבור PyPDF2from PyPDF2 import PdfReader def is_hebrew_books(file): reader = PdfReader(file) annotations = reader.pages[0].annotations for annotation in annotations: if annotation.get_object().get("/Subtype") == "/Link" and annotation.get_object().get("/A").get("/URI") == "http://www.hebrewbooks.org": return True return False
-
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
אבל צריך סקריפט שיסרוק ב3 שלבים
למה החלטת ככה? מה לא טוב עם הפונקציה שלי? (תביא דוגמאות של קבצים שזה לא עובד עליהם ואנסה לתקן)
האם נמצא בעמוד הראשון תיבת טקסט
תוכל להגדיר בשפה יותר טכנית/מדוייקת מה זה תיבת טקסט? כי המושג "תיבת טקסט" לא קיים ב-PDF
@yzahn כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
למה החלטת ככה? מה לא טוב עם הפונקציה שלי? (תביא דוגמאות של קבצים שזה לא עובד עליהם ואנסה לתקן)
האם נמצא בעמוד הראשון תיבת טקסט
תוכל להגדיר בשפה יותר טכנית/מדוייקת מה זה תיבת טקסט? כי המושג "תיבת טקסט" לא קיים ב-PDF
העליתי כאן עמוד ראשון מ3 ספרים,
שים לב להבדל:
בספר חידושי חתם סופר: הטקסט מופיע בתוך "תיבת טקסט".
בספר בן יהוידע ח"א: מופיע כמלל רגיל בדומה לשאר המלל בעמוד.
בספר בן יהוידע ח"ב: צריך עדיין לעבור OCR.חדושי חתם סופר - ע''ז_1.pdf
בן יהוידע ח''א_1.pdf
בן יהוידע ח''ב_1.pdfלכן אני רוצה סקריפט חכם שיבדוק אם מוצא את האות W , כי אולי זה סוג 1 או 2, וחבל סתם לעשות עוד פעם זיהוי תווים,
ורק אם לא מצא שאז יכול להיות שהסיבה היא כי זה סוג 3 אז ליתר ביטחון יחפש שוב לאחר שיעשה OCR לעמוד הראשון.@אביי אני מחכה רק לך....
-
@yzahn כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
למה החלטת ככה? מה לא טוב עם הפונקציה שלי? (תביא דוגמאות של קבצים שזה לא עובד עליהם ואנסה לתקן)
האם נמצא בעמוד הראשון תיבת טקסט
תוכל להגדיר בשפה יותר טכנית/מדוייקת מה זה תיבת טקסט? כי המושג "תיבת טקסט" לא קיים ב-PDF
העליתי כאן עמוד ראשון מ3 ספרים,
שים לב להבדל:
בספר חידושי חתם סופר: הטקסט מופיע בתוך "תיבת טקסט".
בספר בן יהוידע ח"א: מופיע כמלל רגיל בדומה לשאר המלל בעמוד.
בספר בן יהוידע ח"ב: צריך עדיין לעבור OCR.חדושי חתם סופר - ע''ז_1.pdf
בן יהוידע ח''א_1.pdf
בן יהוידע ח''ב_1.pdfלכן אני רוצה סקריפט חכם שיבדוק אם מוצא את האות W , כי אולי זה סוג 1 או 2, וחבל סתם לעשות עוד פעם זיהוי תווים,
ורק אם לא מצא שאז יכול להיות שהסיבה היא כי זה סוג 3 אז ליתר ביטחון יחפש שוב לאחר שיעשה OCR לעמוד הראשון.@אביי אני מחכה רק לך....
@אלף-שין
א) במקוםpypdf
אני משתמש עכשיו ב-pymupdf
ב) תתקין במחשב שלך את זההקוד הבא עובד על שלושת הקבצים שהבאת,
אם יש לך עוד דוגמאות של קבצים שזה לא עובד עליהם אנא העלה את הקובץ לפה ונראה מה יש לעשות בנושאהנה הקוד:
from pymupdf import pymupdf def is_hebrewbooks_file(file_path): doc = pymupdf.open(file_path) page = doc[0] text = page.get_text() if text.find("hebrewbook") != -1: return True # if failed - try ocr ocr_text = page.get_textpage_ocr(tessdata=r"C:\Program Files\Tesseract-OCR\tessdata").extractText() if ocr_text.find("hebrewbook") != -1: return True return False
-
@yzahn כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
למה החלטת ככה? מה לא טוב עם הפונקציה שלי? (תביא דוגמאות של קבצים שזה לא עובד עליהם ואנסה לתקן)
האם נמצא בעמוד הראשון תיבת טקסט
תוכל להגדיר בשפה יותר טכנית/מדוייקת מה זה תיבת טקסט? כי המושג "תיבת טקסט" לא קיים ב-PDF
העליתי כאן עמוד ראשון מ3 ספרים,
שים לב להבדל:
בספר חידושי חתם סופר: הטקסט מופיע בתוך "תיבת טקסט".
בספר בן יהוידע ח"א: מופיע כמלל רגיל בדומה לשאר המלל בעמוד.
בספר בן יהוידע ח"ב: צריך עדיין לעבור OCR.חדושי חתם סופר - ע''ז_1.pdf
בן יהוידע ח''א_1.pdf
בן יהוידע ח''ב_1.pdfלכן אני רוצה סקריפט חכם שיבדוק אם מוצא את האות W , כי אולי זה סוג 1 או 2, וחבל סתם לעשות עוד פעם זיהוי תווים,
ורק אם לא מצא שאז יכול להיות שהסיבה היא כי זה סוג 3 אז ליתר ביטחון יחפש שוב לאחר שיעשה OCR לעמוד הראשון.@אביי אני מחכה רק לך....
@אלף-שין אני מבין שכל הקבצים נמצאים בתיקי' מסוימת, ויש שם גם עוד קבצים ואתה רוצה להפריד ביניהם.
אז למה אתה צריך דווקא סקריפט אחד שיעשה את שלשת השלבים הנ"ל, למה לא לעשות זאת בשלשה סקריפטים שונים, שתריץ כל אחד אחרי שהשני יגמור? -
@אלף-שין אני מבין שכל הקבצים נמצאים בתיקי' מסוימת, ויש שם גם עוד קבצים ואתה רוצה להפריד ביניהם.
אז למה אתה צריך דווקא סקריפט אחד שיעשה את שלשת השלבים הנ"ל, למה לא לעשות זאת בשלשה סקריפטים שונים, שתריץ כל אחד אחרי שהשני יגמור? -
@יום-חדש-מתחיל מה אתה מנסה להרוויח? כל מה שתעשה בשלושה סקריפטים תוכל לעשות בסקריפט אחד בצורה יותר יעילה
@yzahn כי כפי שאני מבין, את שתי השלבים הראשונים כבר יש לו סקריפט, אז מה הוא צריך שבסקריפט הזה יכתבו גם את השלבים הנ"ל?