Metadata-Version: 2.5
Name: lekhaka
Version: 0.0.4
Summary: Books of verses read into chapters: verse numbers mended, chapters assembled, akṣaras repaired. On vishalakshi.
Project-URL: Repository, https://github.com/vedicreader/lekhaka
Project-URL: Documentation, https://vedicreader.github.io/lekhaka/
Author-email: Karthik <karthik.rajgopal@hotmail.com>
License: Apache-2.0
License-File: LICENSE
Keywords: books,nbdev,ocr,sanskrit,tamil,verse
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.12
Requires-Dist: fastcore>=1.8.0
Requires-Dist: vishalakshi>=0.1.21
Description-Content-Type: text/markdown

# lekhaka


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

lekhaka (लेखक, a scribe) turns a printed book of verses into its chapters. Each page is read by a vision model through [vishalakshi](https://github.com/vedicreader/vishalakshi), local or hosted, as blocks: verses with their printed numbers, headings, colophons. lekhaka gathers the verses into chapters, mends the numbering slips a reader makes, repairs malformed Devanagari akṣaras, and lists what a proofreader should check.

## Install

``` sh
pip install lekhaka
```

## How to use

``` python
from lekhaka import read_book, book_md
from vishalakshi import Vault

b = read_book('gita.pdf', Vault('books.db'), model='claude/sonnet', title='Bhagavad Gita',
              hint='Each verse ends in ॥ n ॥.', counts=[47, 72])
b.chapters[0]['verses'][:2]     # [{n, text, page, heading}, ...]
b.probs                         # numbers mended, counts that differ, for a proofreader
print(book_md(b.chapters, 'Bhagavad Gita'))
```

With a vault the pages are kept as versions of one document: `vault.proofread(b.doc_id, readers)` has other models read them again, and `vault.accept` applies the changes the owner chooses. Without a vault nothing is stored.

The pieces work on their own, on the pages `vishalakshi.read_doc` returns or any `{page, blocks}` list:

## On real books

`nbs/samples` holds a few pages each of three books vedicreader has read, as a model returned them. Sixteen pages of Varāhamihira’s Bṛhajjātaka assemble into its third and fourth chapters, each opened by its heading and closed by its colophon:

``` python
import json
bj = json.load(open('samples/brihat_jataka.json'))
chs, probs = assemble(bj)
[(c['heading'], len(c['verses']), (c['colophon'] or '')[:40]) for c in chs]
```

    [('वियोनिजन्माध्यायः', 8, 'इति श्रीवराहमिहिरकृते बृहज्जातके वियोनिज'),
     ('निषेकाध्यायः', 22, 'इति श्रीवराहमिहिरकृते बृहज्जातके निषेकाध')]

``` python
probs
```

    []

The Vidhānamālai prints each verse’s number at the end of its urai, the prose gloss after it. The urai goes into its verse’s notes, and gives the verse its number:

``` python
vm = json.load(open('samples/vidhanamalai.json'))
chs, probs = assemble(vm, notes=('urai',), number_from_note=True)
v = chs[0]['verses'][0]
len(chs[0]['verses']), v['n'], v['text'].split('\n')[0], v['notes']['urai'][0][:60]
```

    (11,
     1,
     'பூமகள் கேள்வன்பொன் னுடையன் புட்கொடி யோன் புனித,',
     '(என்றது.) ஸ்ரீமகாலக்ஷ்மிக்கு நாயகரும், பீதாம்பரத்தையுடையவரும')

Uromarishi’s Pañcapakṣi (1917) numbers its verses in Tamil numerals with the old signs for ten and a hundred:

``` python
uro = json.load(open('samples/uromarishi.json'))
[(b['n'], vnum(b['n'])) for p in uro for b in p['blocks'] if '௱' in str(b.get('n') or '')][:4]
```

    [('௨௱௫', 205), ('௨௱௬', 206), ('௨௱௭', 207), ('௨௱௮', 208)]

## The pieces

- [`vnum`](https://vedicreader.github.io/lekhaka/verses.html#vnum), [`mend`](https://vedicreader.github.io/lekhaka/verses.html#mend), [`renumber`](https://vedicreader.github.io/lekhaka/verses.html#renumber), [`assemble`](https://vedicreader.github.io/lekhaka/verses.html#assemble), [`check_counts`](https://vedicreader.github.io/lekhaka/verses.html#check_counts): numbers and chapters.
- `apply_fixes`, `number_runs`, `borrow_numbers`, `cut_by_plan`: what a reading gets wrong, put right before [`assemble`](https://vedicreader.github.io/lekhaka/verses.html#assemble).
- [`fix_aksharas`](https://vedicreader.github.io/lekhaka/verses.html#fix_aksharas), [`bad_aksharas`](https://vedicreader.github.io/lekhaka/verses.html#bad_aksharas): malformed Devanagari akṣaras.
- [`read_book`](https://vedicreader.github.io/lekhaka/book.html#read_book), [`book_md`](https://vedicreader.github.io/lekhaka/book.html#book_md): a book end to end, through vishalakshi.

``` python
fix_aksharas('ध्ार्म'), vnum('२६॥२७'), vnum('२६॥ १', pick='first')
```

    ('धार्म', 27, 26)
