Pages

Thursday, July 19, 2012

Генерація кириличних пдф

1. pip install reportlab
2. Завантажити і встановити  https://github.com/roadhead/trml2pdf
3. Завантажити шрифти http://dejavu-fonts.org/wiki/Download
4. Вивчити мову розмітки документів http://www.reportlab.com/docs/rml-for-idiots.pdfhttp://www.reportlab.com/docs/rml2pdf-userguide.pdf
5. Зразки готових бугалтерських документів в rml http://bazaar.launchpad.net/~openerp-russian/openerp-russian/openerp-l10n-ru/files/head:/openerp_russia/report/?file_id=openerp_russia-20110224092448-memzsvkru6fipv4y-1

болванка документа



<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE document SYSTEM "rml_1_0.dtd">
<document filename="example_4.pdf">
<template>
<pageTemplate id="main">
<pageGraphics>
<image file="pict/1.png" x="0" y="0" width="550"/>
<setFont name="DejaVuSans" size="16"/>
                 <drawString x="100" y="700">Using RML with a templating system.</drawString>
</pageGraphics>
<fill color="black"/>
<frame id="first" x1="110mm" y1="190mm" width="80mm" height="80mm"/>
<frame id="second" x1="27mm" y1="139mm" width="163mm" height="42mm"/>
<frame id="trois" x1="27mm" y1="37mm" width="75mm" height="90mm"/>
<frame id="quatre" x1="112mm" y1="96mm" width="82mm" height="34mm"/>
<frame id="cinq" x1="112mm" y1="36mm" width="82mm" height="37mm"/>
</pageTemplate>
</template>
<stylesheet>
<paraStyle name="bigurl" fontName="DejaVuSans" fontSize="12" spaceBefore="0.5cm" textColor="red"/>
</stylesheet>
<story>
<para style="bigurl">тест тест тест</para>
</story>
</document>

скріпт конвертації

import trml2pdf
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
enc = 'UTF-8'
pdfmetrics.registerFont(TTFont('DejaVuSans', 'DejaVuSans.ttf',enc))
pdfmetrics.registerFont(TTFont('DejaVuSans-Bold', 'DejaVuSans-Bold.ttf',enc))
open('/opt/kasta/test.pdf', 'w').write(trml2pdf.parseString(file('doc.rml','r').read()))

Sunday, March 11, 2012

celery + openvz container




Якщо при  спробі запуску celery

root@celery01:/opt/celery# celeryd --loglevel=INFO

Отриужмо наступну помилку


  File "/usr/lib/python2.7/multiprocessing/synchronize.py", line 75, in __init__
    sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 38] Function not implemented
[2012-03-11 19:58:40,749: INFO/MainProcess] process shutting down

Перевірте права доступу до шаред меморі і якщо вони мають наступний вигляд

root@celery01:/opt/celery# ls -ld /dev/shm
drwxr-xr-x 2 root root 4096 Feb 17 22:19 /dev/shm

Прописуємо

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0 

в /etc/fstab і рестартуємо систему.

Перевіряємо. Має бути:

root@celery01:/# ls -ld /dev/shm
drwxrwxrwt 2 root root 40 Mar 11 20:06 /dev/shm

Після цього процес celery запускається нормально

Friday, March 2, 2012

Визначення мови, якою написаний матеріал

При nlp обробці текстів, частіше за все, бажано знати, якою мовою цей текст написано. Це потрібно, щоб застосувати для роботи з ним відповідні алгоритми чи інструменти.

Як же можна визначити мову документу? Найпростіший спосіб - якщо мова має якісь специфічні та властиві лише їй символи (українська літера є чи ї, російська літера ы). Але, навіть у цьому випадку, теоретично, може зустрітися текст, який не містить таких літер-маркерів.

"Дорослі" дяді використовують для аналізу імовірнісну величину для наборів пар літер. Скажімо (уявно - це не реальні дані), в сербській мові більша імовірність зустріти пару "тц" чим в російській і тд. Але для застосування такого підходу потрібно, щоб були відомі такі імовірності.

На думку спав дещо подібний підхід - матеріал написано тією мовою, якою написано більшість його слів. А як можна перевірити чи слово написане якоюсь мовою? Спробувати застосувати до нього стемер мови.  Якшо стемер зумів підібрати для слова стем - з великою імовірністю, це валідне слово цієї мови.

Цей підхід я перевірив на наборі текстів українською і російською мовою. Алгоритм помилився в 3 випадках на 20 тисяч статей.

Friday, February 24, 2012

Стемування українських слів з допомогою python і словників openoffice



Встановлюємо залежності:

sudo apt-get install hunspell libhunspell libhunspell-dev myspell-uk
sudo pip install -e svn+http://pyhunspell.googlecode.com/svn/trunk/#egg=pyhunspell


В консолі python: 

>>> import hunspell
>>> hobj = hunspell.HunSpell('/usr/share/hunspell/uk_UA.dic', '/usr/share/hunspell/uk_UA.aff')
>>> print hobj.stem('маму')[0]
мама

Інші ніштяки:


>>> print hobj.spell('маме')
False
>>> print hobj.spell('мамо')
True

>>> for i in hobj.suggest('маме'):
...     print i
... 
мам
мама
маже
мами
мамі
мале
мамо
саме
мате
маму
Мамай
макраме
мадер
марен


Ще

Thursday, February 16, 2012

Websocket, Rabbitmq, Tornado

Стомився бороти постійно неробочий websocket транспорт в ActiveMQ/HornetQ і наваляв маленький власний тестовий шлюзик ws2rabbitmq. Швидше пруф, що це можна зробити за пару годин. Пруф вийшов досить робочим.

Отже, може кому стане у нагоді: https://github.com/frutik/test-rabbitmq-websocket-gw