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


Sunday, November 27, 2011

Вийшов SOLR 3.5

Прес-реліз тут - http://lucene.apache.org/#27+November+2011+-+Lucene+Core+3.5.0+and+Solr+3.5.0+Available

Я б хотів відмітити тільки одне - 'Added support for Hunspell stemmer'. Тепер ви можете повнотекстовий пошук для довільної мови з коробки

Friday, July 8, 2011

Простий ETL tool

Інколи виникає потреба взяти якісь дані з однієї бази даних і перенести їх в іншу. Поки така потреба виникає лише інколи, можна цілком обходитися консольним клієнтом самої СУБД.

Проблема виникає, якщо дані потрібно переносити:

  • регулярно
  • в СУБД іншого типу (mysql -> postgresql) 
  • з не СУБД в СУБД (csv -> sql)
  • якось модифікувати дані при переносі