Olen aina ollut kiinnostunut siitä, kuinka sähköisessä kirjastossani on parasta jakaa kirjoja. Lopulta päädyin tähän vaihtoehtoon sivumäärän ja muiden herkkujen automaattisella laskennalla. Pyydän katsaan kaikilta kiinnostuneilta.
Osa 1. Dropbox
Kaikki kirjani ovat dropboxissa. On 4 luokkaa, joihin jaoin kaiken: oppikirja, lähde, kaunokirjallisuus, tietokirjallisuus. Mutta en lisää hakuteoksia taulukkoon.
Suurin osa kirjoista on .epub, loput .pdf. Toisin sanoen lopullisen ratkaisun täytyy jollakin tavalla kattaa molemmat vaihtoehdot.
Polkuni kirjoihin ovat suunnilleen seuraavanlaiset:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub
Jos kirja on fiktiota, luokka (eli "Design" yllä olevassa tapauksessa) poistetaan.
Päätin olla vaivautumatta Dropbox API:n kanssa, koska minulla on heidän sovellus, joka synkronoi kansion. Eli suunnitelma on tämä: otamme kirjat kansiosta, ajamme jokaisen kirjan sanalaskurin läpi ja lisäämme sen käsitteelliseen.
Osa 2. Lisää rivi
Itse pöydän pitäisi näyttää suunnilleen tältä. HUOMIO: on parempi tehdä sarakkeiden nimet latinaksi.
Käytämme epävirallista Notion API:ta, koska virallista ei ole vielä toimitettu.
Siirry kohtaan Notion, paina Ctrl + Shift + J, siirry kohtaan Sovellus -> Evästeet, kopioi token_v2 ja kutsu sitä TOKENiksi. Sitten siirrymme tarvitsemamme sivulle kirjastotunnuksella ja kopioimme linkin. Kutsumme sitä NÄISTE.
Sitten kirjoitamme koodin yhteyden muodostamiseksi Notioniin.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
Seuraavaksi kirjoitetaan funktio rivin lisäämiseksi taulukkoon.
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
Mitä täällä tapahtuu. Otamme ja lisäämme uuden rivin ensimmäisen rivin taulukkoon. Seuraavaksi jaamme polkumme "/" -merkkiä pitkin ja saamme tunnisteet. Tunnisteet - "taide", "suunnittelu", kirjoittaja ja niin edelleen. Sitten asetamme kaikki tarvittavat levyn kentät.
Osa 3. Sanojen, tuntien ja muiden ilojen laskeminen
Tämä on vaikeampi tehtävä. Kuten muistamme, meillä on kaksi muotoa: epub ja pdf. Jos kaikki on selvää epubissa - sanat ovat luultavasti siellä, niin kaikki ei ole niin selvää pdf: ssä: se voi koostua yksinkertaisesti liimatuista kuvista.
Joten funktiomme sanojen laskemiseksi PDF:ssä näyttää tältä: otamme sivujen määrän ja kerromme tietyllä vakiolla (keskimääräisellä sanojen määrällä sivulla).
Täällä se on:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
Tämä WORDS_PER_PAGE A4-sivulle on noin 300.
Nyt kirjoitetaan funktio sivujen laskemiseksi. Me käytämme
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
Seuraavaksi kirjoitamme artikkelin sivujen laskemisesta Epubissa. Käytämme
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)
Nyt lasketaan aika. Otamme suosikkisanamäärämme ja jaamme sen lukunopeudellasi.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
Osa 4. Kaikkien osien liittäminen
Meidän täytyy käydä läpi kaikki mahdolliset polut kirjakansiossamme. Tarkista, onko Notionissa jo kirja: jos on, meidän ei enää tarvitse luoda riviä.
Sitten meidän on määritettävä tiedostotyyppi, laskemalla sanojen määrä tästä riippuen. Lisää kirja loppuun.
Tämä on koodi, jonka saamme:
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)
Ja toiminto tarkistaa, onko kirjaa lisätty, näyttää tältä:
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
Johtopäätös
Kiitos kaikille tämän artikkelin lukeneille. Toivottavasti se auttaa sinua lukemaan lisää :)
Lähde: will.com