Notion болон Python ашиглан гэрийн номын сан хийх

Би өөрийн цахим номын санд байгаа номыг хэрхэн хамгийн сайн түгээх вэ гэдгийг үргэлж сонирхож ирсэн. Эцэст нь би хуудасны тоо болон бусад сайн сайхныг автоматаар тооцоолох замаар энэ сонголтод хүрсэн. Би бүх сонирхсон хүмүүсээс муурны доор асууж байна.

1-р хэсэг. Dropbox

Миний бүх ном dropbox дээр байгаа. Би сурах бичиг, лавлагаа, уран зохиол, уран зохиолын бус гэсэн дөрвөн төрөлд хуваасан. Гэхдээ би лавлах номыг хүснэгтэд нэмдэггүй.

Ихэнх ном нь .epub, бусад нь .pdf. Өөрөөр хэлбэл, эцсийн шийдэл нь ямар нэгэн байдлаар хоёр сонголтыг хамрах ёстой.

Миний номонд хүрэх замууд дараах байдалтай байна.

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

Хэрэв ном нь уран зохиол бол категорийг (дээрх тохиолдолд "Дизайн") хасна.

Би Dropbox API-д санаа зовохгүй байхаар шийдсэн, учир нь надад фолдерыг синхрончлох програм байдаг. Өөрөөр хэлбэл, төлөвлөгөө нь ийм байна: бид хавтаснаас ном авч, ном бүрийг үгийн тоолуураар дамжуулж, Notion-д нэмнэ.

2-р хэсэг. Мөр нэмэх

Хүснэгт өөрөө иймэрхүү харагдах ёстой. АНХААРУУЛГА: баганын нэрийг латинаар бичих нь дээр.

Notion болон Python ашиглан гэрийн номын сан хийх

Албан ёсны API нь хараахан ирээгүй байгаа тул бид албан бус Notion API ашиглах болно.

Notion болон Python ашиглан гэрийн номын сан хийх

Notion руу ороод 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

А4 хуудасны энэ 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_хувиргагч. Энд бид номыг авч, мөр болгон хувиргаж, мөр бүрийн үгсийг тоолно.

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

сэтгэгдэл нэмэх