בקשת עזרה תוכנה למיון ספרים!
-
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
ניסיתי קרוב ל40 פעם [עם כל מיני שינויים ותיקונים כל פעם] ולא הצלחתי.
אני מאמין שהוא התכוין לזה:
pip install PyPDF2
-
@יום-חדש-מתחיל
הספריה הזאת PyPDF2 לא מזהה,
בדקתי בעשרות הגדרות שניסיתי. -
@mefateach כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
@אלף-שין תגגל על tensorflow
לא, זה מדאי כבד לי,
אני צריך בסך הכל שיהיה חע סקריפט שעובד על קבצי הPDF
שהשקריפט לא זיהה בהם בעמוד הראשון את התו W,
במקרה כזה הסקריפט יעשה OCR לעמוד הראשון בלבד,
ואז יחפש אם יש את התו W. -
פוסט זה נמחק!
-
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
הספריה הזאת PyPDF2 לא מזהה
https://pypi.org/project/PyPDF2/
pip install PyPDF2
עריכה: עכשיו אני רואה שהסקריפט שכתבת למעלה גם משתמש בספרי' הזו...
-
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
אה..
חבל שלא ידעתי...
כי לא הבנתי למה יש כל הזמן שגיאות...
סידרתי רק באדיבות GPT כלשהוא....
עכ"פ אשמח דווקא לקבל עזרה אבל צריך סקריפט שיסרוק ב3 שלבים:
1] האם מופיע תו W בעמוד הראשון- אם כן מעביר, אם לא עובר לשלב 2,
2] האם נמצא בעמוד הראשון תיבת טקסט [אם כן בטוח יש בתוכה W] אם כן מעביר, אם לא עובר לשלב 3,
3] מעביר את העמוד הראשון OCR, ובודק שוב האם נמצא תו W. -
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
אבל צריך סקריפט שיסרוק ב3 שלבים
למה החלטת ככה? מה לא טוב עם הפונקציה שלי? (תביא דוגמאות של קבצים שזה לא עובד עליהם ואנסה לתקן)
האם נמצא בעמוד הראשון תיבת טקסט
תוכל להגדיר בשפה יותר טכנית/מדוייקת מה זה תיבת טקסט? כי המושג "תיבת טקסט" לא קיים ב-PDF
-
@אלף-שין כתב בשיתוף | שיתוף ובקשת עזרה, תוכנה למיון ספרים!:
באדיבות 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
-
@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
מדהים הסקריפט שלך פשוט עובד נפלא!!
תודה רבה!!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 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 file_path = "40809.pdf" # replace with your file path result = is_hebrewbooks_file(file_path) print(result)
עכשיו אני רק צריך כמה שיפורים קטנים ואז זה יהיה מושלם!
1] שהסקריפט ירוץ בלולאה על כל הקבצים שנמצאים בתיקייה [שממנה אני מפעיל אותו], [כולל תתי תיקיות עד סוף כל הדורות] או לחילופין שאוכל לבחור עם ממשק גרפי יותר נחמד אבל לא קריטי...
אבל שלא יהיה ח"ו התנגשויות בין תהליכים של הסקריפט בגלל זה.....
2] שבמקום לענות לי אמת או שקר, הוא פשוט יעביר את כל הקבצים שהם אמת לתיקייה מסוימת, ולא רק להעתיק שיהיה לי כפול... אלא להעביר ולמחוק לגמרי מהמקור....
3] ו... הכי טוב מקומפל.....מי שיכול לעזור בזה אודה לו עמוקות!
-
import os import glob from pymupdf import pymupdf import shutil import tkinter as tk from tkinter import filedialog def is_hebrewbooks_file(file_path): if not file_path.endswith('.pdf'): return False doc = pymupdf.open(file_path) page = doc[0] text = page.get_text() if text.find("W") != -1 or text.find("w") != -1: return True ocr_text = page.get_textpage_ocr(tessdata=r"C:\Program Files\Tesseract-OCR\tessdata").extractText() if ocr_text.find("W") != -1 or ocr_text.find("w") != -1: return True return False def main(): root = tk.Tk() root.title("HebrewBooks File Finder") label = tk.Label(root, text="Select a directory:") label.pack() dir_button = tk.Button(root, text="Browse", command=lambda: browse_dir()) dir_button.pack() result_label = tk.Label(root, text="") result_label.pack() def browse_dir(): dir_path = filedialog.askdirectory() if dir_path: current_dir = dir_path target_dir = "HebrewBooks" # adjust this to your target directory os.makedirs(target_dir, exist_ok=True) # create the target directory if it doesn't exist for root, dirs, files in os.walk(current_dir): for file in files: file_path = os.path.join(root, file) if os.path.isfile(file_path) and file_path.endswith('.pdf'): if is_hebrewbooks_file(file_path): shutil.move(file_path, os.path.join(target_dir, file)) result_label.config(text=f"Moved HebrewBook file: {file_path}") else: result_label.config(text="No HebrewBook files found") root.mainloop() if __name__ == "__main__": main()
זה עושה הכל ב"ה!
[עדיין יש מעט קבצים שה OCR לא מצליח לזהות אותם]מישהוא יכול רק לקמפל אותו?
-
@האדם-החושב
עדכון לכולם:
שכללתי ודייקתי את הסקריפט הרבה יותר,
וכעת עובד ללא תקלות בס"ד,
וכעת אצרף אותו לטובת כולם.import os import glob from pymupdf import pymupdf import shutil import tkinter as tk from tkinter import filedialog import re from tkinter import ttk def is_hebrewbooks_file(file_path): if not file_path.endswith('.pdf'): return False doc = pymupdf.open(file_path) page = doc[0] text = page.get_text() if (text.find("ww") != -1 or text.find("WW") != -1 or text.find("wbook") != -1 or text.find("WBOOK") != -1 or text.find("org") != -1 or re.search(r"https?://\S+", text) is not None): return True ocr_text = page.get_textpage_ocr(tessdata=r"C:\Program Files\Tesseract-OCR\tessdata").extractText() if (ocr_text.find("ww") != -1 or ocr_text.find("WW") != -1 or ocr_text.find("wbook") != -1 or ocr_text.find("WBOOK") != -1 or ocr_text.find("org") != -1 or re.search(r"https?://\S+", ocr_text) is not None): return True return False def browse_dir(): dir_path = filedialog.askdirectory() if dir_path: current_dir = dir_path target_dir = "HebrewBooks" os.makedirs(target_dir, exist_ok=True) for root, dirs, files in os.walk(current_dir): for file in files: file_path = os.path.join(root, file) if os.path.isfile(file_path) and file_path.endswith('.pdf'): if is_hebrewbooks_file(file_path): shutil.move(file_path, os.path.join(target_dir, file)) progressbar["value"] += 1 progressbar.update_idletasks() else: result_label.config(text="No HebrewBook files found") def main(): root = tk.Tk() root.title("HebrewBooks File Finder") label = tk.Label(root, text="Select a directory:") label.pack() dir_button = tk.Button(root, text="Browse", command=browse_dir) dir_button.pack() global progressbar progressbar = ttk.Progressbar(root, orient="horizontal", length=200, mode="determinate") progressbar.pack() global result_label result_label = tk.Label(root, text="") result_label.pack() root.mainloop() if __name__ == "__main__": main()
ועכשיו אבקש שוב ממי שיכול לקמפל אותו, לטובת כולם תבוא עליו ברכה!
[ספריות שצריך להוריד:
1]pip install pymupdf
.
2] את התוכנה הזאת להתקין במחשב
3]pip install pytesseract
עריכה-
קימפלתי בס"ד בהצלחה!
להעתיק ולהוריד כוכביות