நோஷன் மற்றும் பைதான் மூலம் வீட்டு நூலகத்தை உருவாக்குதல்

எனது மின்னணு நூலகத்தில் புத்தகங்களை எவ்வாறு சிறப்பாக விநியோகிப்பது என்பதில் நான் எப்போதும் ஆர்வமாக இருந்தேன். முடிவில், பக்கங்களின் எண்ணிக்கை மற்றும் பிற இன்னபிற பொருட்களை தானாகக் கணக்கிடுவதன் மூலம் இந்த விருப்பத்திற்கு வந்தேன். பூனையின் கீழ் ஆர்வமுள்ள அனைவரையும் நான் கேட்கிறேன்.

பகுதி 1. டிராப்பாக்ஸ்

எனது புத்தகங்கள் அனைத்தும் டிராப்பாக்ஸில் உள்ளன. நான் எல்லாவற்றையும் 4 வகைகளாகப் பிரித்துள்ளேன்: பாடநூல், குறிப்பு, புனைகதை, புனைகதை அல்ல. ஆனால் நான் குறிப்பு புத்தகங்களை அட்டவணையில் சேர்க்கவில்லை.

பெரும்பாலான புத்தகங்கள் .epub, மற்றவை .pdf. அதாவது, இறுதி தீர்வு எப்படியாவது இரண்டு விருப்பங்களையும் உள்ளடக்கியதாக இருக்க வேண்டும்.

புத்தகங்களுக்கான எனது பாதைகள் இதுபோன்றவை:

/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub 

புத்தகம் புனைகதை என்றால், அந்த வகை (அதாவது, மேலே உள்ள வழக்கில் "வடிவமைப்பு") அகற்றப்படும்.

கோப்புறையை ஒத்திசைக்கும் பயன்பாடு என்னிடம் இருப்பதால், டிராப்பாக்ஸ் API ஐப் பற்றி கவலைப்பட வேண்டாம் என்று முடிவு செய்தேன். அதாவது, திட்டம் இதுதான்: நாங்கள் கோப்புறையிலிருந்து புத்தகங்களை எடுத்து, ஒவ்வொரு புத்தகத்தையும் ஒரு வார்த்தை கவுண்டர் மூலம் இயக்கி, அதை நோஷனில் சேர்க்கிறோம்.

பகுதி 2. ஒரு வரியைச் சேர்க்கவும்

அட்டவணையே இப்படி இருக்க வேண்டும். கவனம்: நெடுவரிசை பெயர்களை லத்தீன் மொழியில் உருவாக்குவது நல்லது.

நோஷன் மற்றும் பைதான் மூலம் வீட்டு நூலகத்தை உருவாக்குதல்

அதிகாரப்பூர்வமற்ற கருத்து API ஐப் பயன்படுத்துவோம், ஏனெனில் அதிகாரப்பூர்வமானது இன்னும் வழங்கப்படவில்லை.

நோஷன் மற்றும் பைதான் மூலம் வீட்டு நூலகத்தை உருவாக்குதல்

நோஷனுக்குச் சென்று, Ctrl + Shift + J ஐ அழுத்தி, Application -> Cookies க்குச் சென்று, token_v2 ஐ நகலெடுத்து TOKEN என அழைக்கவும். பின்னர் நூலக அடையாளத்துடன் நமக்குத் தேவையான பக்கத்திற்குச் சென்று இணைப்பை நகலெடுக்கிறோம். நாங்கள் அதை NOTION என்று அழைக்கிறோம்.

பின்னர் நோஷனுடன் இணைக்க குறியீட்டை எழுதுகிறோம்.

database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()

அடுத்து, அட்டவணையில் ஒரு வரிசையைச் சேர்க்க ஒரு செயல்பாட்டை எழுதுவோம்.

def add_row(path, file, words_count, pages_count, hours):
    row = database.collection.add_row()
    row.title = file

    tags = path.split("/")

    if len(tags) >= 1:
        row.what = tags[0]

    if len(tags) >= 2:
        row.state = tags[1]

    if len(tags) >= 3:
        if tags[0] == "Художественное":
            row.author = tags[2]

        elif tags[0] == "Нехудожественное":
            row.tags = tags[2]

        elif tags[0] == "Учебники":
            row.tags = tags[2]

    if len(tags) >= 4:
        row.author = tags[3]

    row.hours = hours
    row.pages = pages_count
    row.words = words_count

இங்கே என்ன நடந்து கொண்டிருக்கின்றது. முதல் வரிசையில் உள்ள அட்டவணையில் ஒரு புதிய வரிசையை எடுத்து சேர்க்கிறோம். அடுத்து, எங்கள் பாதையை “/” உடன் பிரித்து குறிச்சொற்களைப் பெறுகிறோம். குறிச்சொற்கள் - "கலை", "வடிவமைப்பு", ஆசிரியர் யார், மற்றும் பலவற்றின் அடிப்படையில். பின்னர் தட்டின் தேவையான அனைத்து புலங்களையும் அமைக்கிறோம்.

பகுதி 3. வார்த்தைகள், மணிநேரம் மற்றும் பிற மகிழ்ச்சிகளை எண்ணுதல்

இது மிகவும் கடினமான பணியாகும். நாம் நினைவில் வைத்துள்ளபடி, எங்களிடம் இரண்டு வடிவங்கள் உள்ளன: epub மற்றும் pdf. epub உடன் எல்லாம் தெளிவாக இருந்தால் - வார்த்தைகள் இருக்கலாம், பின்னர் எல்லாம் pdf பற்றி தெளிவாக இல்லை: இது வெறுமனே ஒட்டப்பட்ட படங்களைக் கொண்டிருக்கலாம்.

எனவே PDF இல் சொற்களை எண்ணுவதற்கான எங்கள் செயல்பாடு இப்படி இருக்கும்: நாங்கள் பக்கங்களின் எண்ணிக்கையை எடுத்து ஒரு குறிப்பிட்ட மாறிலியால் பெருக்குகிறோம் (ஒரு பக்கத்திற்கு சராசரி சொற்களின் எண்ணிக்கை).

இதோ அவள்:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

A4 பக்கத்திற்கான இந்த WORDS_PER_PAGE தோராயமாக 300 ஆகும்.

இப்போது பக்கங்களை எண்ணுவதற்கான செயல்பாட்டை எழுதுவோம். பயன்படுத்துவோம் pyPDF2.

def get_pdf_pages_number(path, filename):
    pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
    return pdf.getNumPages()

அடுத்து, எபப்பில் பக்கங்களை எண்ணுவதற்கு ஒரு விஷயத்தை எழுதுவோம். நாம் பயன்படுத்த epub_converter. இங்கே நாம் புத்தகத்தை எடுத்து, அதை வரிகளாக மாற்றி, ஒவ்வொரு வரிக்கும் வார்த்தைகளை எண்ணுகிறோம்.

def get_epub_pages_number(path, filename):
    book = open_book(os.path.join(path, filename))
    lines = convert_epub_to_lines(book)
    words_count = 0

    for line in lines:
        words_count += len(line.split(" "))

    return round(words_count / WORDS_PER_PAGE)

இப்போது நேரத்தை கணக்கிடுவோம். எங்களுக்குப் பிடித்தமான வார்த்தை எண்ணிக்கையை எடுத்து உங்கள் வாசிப்பு வேகத்தால் வகுக்கிறோம்.

def get_reading_time(words_count):
    return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10

பகுதி 4. அனைத்து பகுதிகளையும் இணைக்கிறது

எங்களுடைய புத்தகங்கள் கோப்புறையில் உள்ள அனைத்து வழிகளிலும் நாம் செல்ல வேண்டும். நோஷனில் ஏற்கனவே ஒரு புத்தகம் இருக்கிறதா என்று சரிபார்க்கவும்: இருந்தால், இனி ஒரு வரியை உருவாக்க வேண்டியதில்லை.
பின்னர் நாம் கோப்பு வகையைத் தீர்மானிக்க வேண்டும், இதைப் பொறுத்து, சொற்களின் எண்ணிக்கையை எண்ண வேண்டும். இறுதியில் ஒரு புத்தகத்தைச் சேர்க்கவும்.

இது நமக்குக் கிடைக்கும் குறியீடு:

for root, subdirs, files in os.walk(BOOKS_DIR):
    if len(files) > 0 and check_for_excusion(root):
        for file in files:
            array = file.split(".")
            filetype = file.split(".")[len(array) - 1]
            filename = file.replace("." + filetype, "")
            local_root = root.replace(BOOKS_DIR, "")

            print("Dir: {}, file: {}".format(local_root, file))

            if not check_for_existence(filename):
                print("Dir: {}, file: {}".format(local_root, file))

                if filetype == "pdf":
                    count = get_pdf_pages_number(root, file)

                else:
                    count = get_epub_pages_number(root, file)

                words_count = get_words_count(count)
                hours = get_reading_time(words_count)
                print("Pages: {}, Words: {}, Hours: {}".format(count, words_count, hours))
                add_row(local_root, filename, words_count, count, hours)

ஒரு புத்தகம் சேர்க்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கும் செயல்பாடு இதுபோல் தெரிகிறது:

def check_for_existence(filename):
    for row in current_rows:
        if row.title in filename:
            return True

        elif filename in row.title:
            return True

    return False

முடிவுக்கு

இந்தக் கட்டுரையைப் படித்த அனைவருக்கும் நன்றி. மேலும் படிக்க உதவும் என்று நம்புகிறேன் :)

ஆதாரம்: www.habr.com

கருத்தைச் சேர்