<commit_before>Опис на проблемот
=================

Во годините кога компјутерите генерално не знаеле да работат со кирилица,
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 *упростено* изгледа вака:

  <document-content>
    <automatic-styles>
      <style name="P1">
         <text-properties font-name="MAC C Swiss">
      ...
      <style name="P2" parent-name="P1">
    </automatic-styles>
    <body>
     <text>
       <p style-name="P1">jas sum glupa kirilica</p>
       <p>јас сум ок кирилица <span "P1>glupa<span></p>
       ...
     </text>
    </body>
  </document-content>

http://en.wikipedia.org/wiki/OpenDocument_technical_specification<commit_msg>This was comment in the code, lets move it here<commit_after>Опис на проблемот
=================

Во годините кога компјутерите генерално не знаеле да работат со кирилица,
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 *упростено* изгледа вака:

  <document-content>
    <automatic-styles>
      <style name="P1">
         <text-properties font-name="MAC C Swiss">
      ...
      <style name="P2" parent-name="P1">
    </automatic-styles>
    <body>
     <text>
       <p style-name="P1">jas <NAME> kirilica</p>
       <p>јас сум ок кирилица <span "P1>glupa<span></p>
       ...
     </text>
    </body>
  </document-content>

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
{'fraction_non_alphanumeric': 0.07478819748758399, 'fraction_numerical': 0.002044989775051125, 'mean_word_length': 4.279105628373169, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 38, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 12}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1583726', 'n_tokens_mistral': 2864, 'n_tokens_neox': 3345, 'n_words': 897}