በኖሽን እና በፓይዘን የቤት ላይብረሪ መስራት

በኤሌክትሮኒካዊ ቤተ መጻሕፍቴ ውስጥ መጽሐፍትን እንዴት ማሰራጨት እንደምችል ሁልጊዜም ፍላጎት ነበረኝ። በመጨረሻ ፣ የገጾቹን ብዛት እና ሌሎች ጥሩ ነገሮችን በራስ ሰር በማስላት ወደዚህ አማራጭ መጣሁ። ከድመት በታች ፍላጎት ያላቸውን ሰዎች ሁሉ እጠይቃለሁ።

ክፍል 1. Dropbox

ሁሉም መጽሐፎቼ በ dropbox ላይ ናቸው። ሁሉንም ነገር የከፈልኩባቸው 4 ምድቦች አሉ፡ የመማሪያ መጽሀፍ፡ ማጣቀሻ፡ ልብወለድ፡ ልቦለድ ያልሆነ። ነገር ግን የማጣቀሻ መጽሃፎችን ወደ ጠረጴዛው አልጨምርም.

አብዛኛዎቹ መጽሃፍቶች .epub, የተቀሩት .pdf ናቸው. ያም ማለት የመጨረሻው መፍትሄ በሆነ መንገድ ሁለቱንም አማራጮች መሸፈን አለበት.

ወደ መጽሐፍት የማሄድ መንገዶቼ እንደዚህ ያሉ ናቸው።

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

መጽሐፉ ልብ ወለድ ከሆነ ምድቡ (ይህም ከላይ ባለው ጉዳይ ላይ "ንድፍ") ይወገዳል.

ማህደሩን የሚያመሳስለው መተግበሪያቸው ስላለኝ በ Dropbox API ላለመቸገር ወሰንኩ። ማለትም እቅዱ ይህ ነው፡ መጽሃፎችን ከአቃፊው እንወስዳለን፣ እያንዳንዱን መጽሃፍ በቃላት ቆጣሪ እናካሂድ እና ወደ ኖሽን እንጨምረዋለን።

ክፍል 2. መስመር ያክሉ

ጠረጴዛው ራሱ እንደዚህ ያለ ነገር መምሰል አለበት. ትኩረት: በላቲን ውስጥ የአምድ ስሞችን መስራት የተሻለ ነው.

በኖሽን እና በፓይዘን የቤት ላይብረሪ መስራት

ይፋ ያልሆነውን የኖሽን ኤፒአይ እንጠቀማለን፣ ምክንያቱም ይፋ የሆነው ገና አልደረሰም።

በኖሽን እና በፓይዘን የቤት ላይብረሪ መስራት

ወደ ኖሽን ይሂዱ ፣ Ctrl + Shift + J ን ይጫኑ ፣ ወደ መተግበሪያ -> ኩኪዎች ይሂዱ ፣ 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 ግልጽ ከሆነ - ቃላቶቹ ምናልባት እዚያ አሉ, ከዚያ ስለ ፒዲኤፍ ሁሉም ነገር ግልጽ አይደለም: በቀላሉ የተጣበቁ ምስሎችን ሊያካትት ይችላል.

ስለዚህ በፒዲኤፍ ውስጥ ቃላትን የመቁጠር ተግባራችን ይህንን ይመስላል-የገጾቹን ብዛት እንወስዳለን እና በተወሰነ ቋሚ (በአንድ ገጽ አማካኝ የቃላት ብዛት) እናባዛለን።

እነሆ እሷ፡-

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

ይህ WORDS_PER_PAGE ለA4 ገጽ 300 ያህል ነው።

አሁን ገጾችን ለመቁጠር ተግባር እንጻፍ። እንጠቀማለን ፒፒዲኤፍ 2.

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

በመቀጠል፣ በEpub ውስጥ ገጾችን ለመቁጠር አንድ ነገር እንጽፋለን። እንጠቀማለን epub_መቀየሪያ. እዚህ መጽሐፉን እንወስዳለን, ወደ መስመሮች እንለውጣለን እና ለእያንዳንዱ መስመር ቃላትን እንቆጥራለን.

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

መደምደሚያ

ይህን ጽሑፍ ላነበቡ ሁሉ አመሰግናለሁ። የበለጠ ለማንበብ እንደሚረዳዎት ተስፋ አደርጋለሁ :)

ምንጭ: hab.com

አስተያየት ያክሉ