Notion සහ Python සමඟ නිවසේ පුස්තකාලයක් සෑදීම

මගේ ඉලෙක්ට්‍රොනික පුස්තකාලයේ පොත් බෙදා හරින ආකාරය ගැන මම නිතරම උනන්දු වෙමි. අවසානයේදී, මම මෙම විකල්පය වෙත පැමිණියේ පිටු ගණන සහ අනෙකුත් සුභ පැතුම් ස්වයංක්‍රීයව ගණනය කිරීමෙනි. මම බළලා යටතේ සිටින සියලුම උනන්දුවක් දක්වන පුද්ගලයින්ගෙන් ඉල්ලා සිටිමි.

1 කොටස. Dropbox

මගේ පොත් ඔක්කොම තියෙන්නේ dropbox එකේ. මම සෑම දෙයක්ම බෙදා ගත් කාණ්ඩ 4 ක් ඇත: පෙළපොත්, යොමු, ප්‍රබන්ධ, ප්‍රබන්ධ නොවන. නමුත් මම මේසයට යොමු පොත් එකතු කරන්නේ නැහැ.

බොහෝ පොත් .epub, ඉතිරිය .pdf. එනම්, අවසාන විසඳුම කෙසේ හෝ විකල්ප දෙකම ආවරණය කළ යුතුය.

පොත් සඳහා මගේ මාර්ග මේ වගේ දෙයක්:

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

පොත ප්‍රබන්ධ නම්, ප්‍රවර්ගය (එනම්, ඉහත නඩුවේ “නිර්මාණය”) ඉවත් කරනු ලැබේ.

ෆෝල්ඩරය සමමුහුර්ත කරන ඔවුන්ගේ යෙදුම මා සතුව ඇති බැවින් මම Dropbox API සමඟ කරදර නොකිරීමට තීරණය කළෙමි. එනම්, සැලැස්ම මෙයයි: අපි ෆෝල්ඩරයෙන් පොත් ගන්නෙමු, එක් එක් පොත වර්ඩ් කවුන්ටරයක් ​​හරහා ධාවනය කර එය Notion වෙත එකතු කරන්නෙමු.

2 කොටස. පේළියක් එකතු කරන්න

මේසයම මේ වගේ දෙයක් විය යුතුය. අවධානය: ලතින් භාෂාවෙන් තීරු නාම සෑදීම වඩා හොඳය.

Notion සහ Python සමඟ නිවසේ පුස්තකාලයක් සෑදීම

අපි නිල නොවන Notion API භාවිතා කරන්නෙමු, මන්ද නිල එක තවමත් ලබා දී නැත.

Notion සහ Python සමඟ නිවසේ පුස්තකාලයක් සෑදීම

Notion වෙත ගොස්, Ctrl + Shift + J ඔබා, Application -> Cookies වෙත ගොස්, token_v2 පිටපත් කර TOKEN අමතන්න. ඊට පස්සේ අපි පුස්තකාල ලකුණ සමඟ අපට අවශ්ය පිටුවට ගොස් සබැඳිය පිටපත් කරන්න. අපි ඒකට කියන්නේ NOTION කියලා.

ඉන්පසු අපි 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 හි පිටු ගණන් කිරීම සඳහා දෙයක් ලියන්නෙමු. අපි පාවිච්චි කරන්නේ 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 කොටස. සියලුම කොටස් සම්බන්ධ කිරීම

අපගේ පොත් ෆෝල්ඩරයේ ඇති සියලුම මාර්ග හරහා අප යා යුතුය. Notion හි දැනටමත් පොතක් තිබේදැයි පරීක්ෂා කරන්න: තිබේ නම්, අපට තවදුරටත් රේඛාවක් සෑදීමට අවශ්‍ය නොවේ.
එවිට අපි ගොනු වර්ගය තීරණය කළ යුතුය, මේ මත පදනම්ව, වචන ගණන ගණන් කරන්න. අවසානයේ පොතක් එකතු කරන්න.

අපට ලැබෙන කේතය මෙයයි:

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

අදහස් එක් කරන්න