@אלף-שין
עדכון יום שלישי בבוקר:
בס"ד @האדם-החושב עשה סקריפט אחד מסודר ומדויק מאד!
הסקריפט כולל 4 שלבים למיון!
נסו ותהנו!
import os
from pymupdf import pymupdf
import re
import PyPDF2
import shutil
from tkinter import Tk, filedialog
def metadata(file_path):
pdf = PyPDF2.PdfReader(file_path)
meta_data = {}
for key in pdf.metadata.keys():
meta_data[key] = pdf.metadata[key]
for key, value in meta_data.items():
if isinstance(value, str) and metadata_word.lower() in value.lower():
return True
return False
def text_recognition(file_path):
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
return False
def is_hebrewbooks_file_ocr_1(file_path):
doc = pymupdf.open(file_path)
page = doc[0]
ocr_text = page.get_textpage_ocr(tessdata=r"C:\Program Files\Tesseract-OCR\tessdata").extractText()
if (ocr_text.find("www") != -1 or ocr_text.find("WWW") != -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 is_hebrewbooks_file_ocr_2(file_path):
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
return False
def main():
root = Tk()
root.withdraw()
books_folder = filedialog.askdirectory()
global metadata_word
metadata_word = "ID"
for root, dirs, files in os.walk(books_folder):
for file in files:
file_path = os.path.join(root, file)
if os.path.isfile(file_path) and file_path.endswith('.pdf'):
if metadata(file_path):
target_dir = "metadata"
elif text_recognition(file_path):
target_dir = "text recognition"
elif is_hebrewbooks_file_ocr_1(file_path):
target_dir = "ocr 1"
elif is_hebrewbooks_file_ocr_2(file_path):
target_dir = "ocr 2"
else:
continue
# Get the relative path from the source directory
relative_path = os.path.relpath(file_path, books_folder)
target_path = os.path.join(target_dir, relative_path)
target_folder = os.path.dirname(target_path)
os.makedirs(target_folder, exist_ok=True)
shutil.move(file_path, target_path)
main()
והנה מי שרוצה תוכנה מקומפלת להורדה
[צריך להעתיק את הקישור ידנית [מקש ימני בעכבר על המילה להורדה] להדביק בשורת הכתובת בדפדפן, ולהוריד כוכביות!
נ"ב: אם מישהוא יודע ויכול, נשמח לשיפור קטן,
[להוסיף OCR בעברית לסקריפט,
כדי שהזיהוי יהיה יותר מדויק].
עדכון: בגלל הסירבול הרב כאן וכל הפוסטים הלא מסודרים וכו',
פתחתי על זה שרשור חדש ומאיר עיניים כאן.