Intelligent yuscii to unicode convertor for ODT files
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
convertor
.gitignore
LICENSE
README.md
TODO.txt
setup.py

README.md

Опис на проблемот

Во годините кога компјутерите генерално не знаеле да работат со кирилица, IT секторот во Македонија проблемот го решиле со креирање на специјални фонтови во кои латичните букви биле цртани со соодветните кирилични знаци. Така на пример R било Р, V било В, Y било Ѕ, Q било Љ и така натаму. Бидејќи латиницата има помалку букви од кирилицата, некои додатни букви биле ставени на други знаци: { било Ш, } било Ѓ, итн.

Самата содржина, што се однесувало до компјутерите, била на латиница, но таквиот документ прикажан или испечатен со соодветниот фонт изгледал како напишан на кирилица.

Но ова квази-решение создава многу други проблеми со обработка на податоците. Неколку примери, програмите за обработка на текст го третирале сврзникот „и“ како латично „i“, па автоматски го менувале во големо I (според англискиот правопис). Понатаму, програмите не ги третираат Ш (т.е. {) и сличните како букви, туку како знаци, па не функционира автоматската поделба на зборовите на крајот од реченицата.

Суштината на овие проблеми е дека информацијата за содржината дека е напишана со кирилица се губи во моментот кога информацијата за фонтот е недостапна.

Секоја автоматска обработка или индексирање и пребарување на текстот драстично се усложнува.

Потребата за ова квази-решение е одамна надмината со појавата на оперативните системи кои имаат подршка за Unicode и со употребата на Unicode (UTF-8) во сите нови стандарди за формати на документи, и во програмите за складирање и обработка на податоци. Но, за жал и до ден денес сеуште ќе најдеме документи пишувани во вакви специфични (таканаречени YUSCII) фонтови, а и сеуште се пишуваат.

Со помош на овој програм можеме да ги конвертираме документите напишани со фонтови, во документи со правилна Unicode кирилица.

Анализа на ODF документ

Една ODF датотека е всушност zip архива во која се наоѓаат неколку посебни датотеки, меѓу кои: самата содржина на документот (content.xml); сликите и други слични прилози; и датотеки со мета-информации за самиот документ.

Логиката на програмот е:

  • прво, да ги најде сите дефинирани стилови во документот кои користат некој од проблематичните фонтови, и да ги смени стиловите да користат нормален фонт (според зададена релација);
  • второ, да ја најде содржината која ги користи овие стилови и да ја конвертира содржината од yuscii во utf-8.

Главни од интерес на програмов се styles.xml и content.xml, бидејќи и двете датотеки можат да содржат стилови за содржината. Стилови можат да наследуваат карактеристики од други стилови, па и тоа треба да се има предвид.

Структурата на content.xml упростено изгледа вака:

<style name="P1"> ... <style name="P2" parent-name="P1">

jas sum glupa kirilica

јас сум ок кирилица glupa

...

http://en.wikipedia.org/wiki/OpenDocument_technical_specification

Quick analysis code

pretty_print = lambda el: lxml.etree.tostring(el, pretty_print=True)
find = lxml.etree.XPath("//b")
tree = lxml.etree.parse(io.BytesIO(xml))
root = tree.getroot()
nsmap = root.nsmap
tree.xpath('.//style:font-face', namespaces=nsmap)
tree.xpath('.//style:text-properties', namespaces=nsmap)

Some XPaths:

  • //style:style[style:text-properties[@style:font-name|@style:font-name-complex]]
  • /office:document-content/office:body/office:text

Инсталација

$ pip install --user git+https://github.com/gdamjan/convertor.git#egg=convertor
$ .local/bin/convertor --help
usage: convertor [-h] [--convert FILE [FILE ...] | --webapp]

Convert ODF files from YUSCII to UTF-8. For each file `FILE.odt' will create a
converted `FILE-NEW.odt' in the same directory.

optional arguments:
  -h, --help            show this help message and exit
  --convert FILE [FILE ...]
                        file(s) to convert
  --webapp              run a demo web app

За демо web апликацијата, треба да се инсталира Werkzeug, што е можно и со:

$ pip install --user git+https://github.com/gdamjan/convertor.git#egg=convertor[web]