При nlp обробці текстів, частіше за все, бажано знати, якою мовою цей текст написано. Це потрібно, щоб застосувати для роботи з ним відповідні алгоритми чи інструменти.
Як же можна визначити мову документу? Найпростіший спосіб - якщо мова має якісь специфічні та властиві лише їй символи (українська літера є чи ї, російська літера ы). Але, навіть у цьому випадку, теоретично, може зустрітися текст, який не містить таких літер-маркерів.
"Дорослі" дяді використовують для аналізу імовірнісну величину для наборів пар літер. Скажімо (уявно - це не реальні дані), в сербській мові більша імовірність зустріти пару "тц" чим в російській і тд. Але для застосування такого підходу потрібно, щоб були відомі такі імовірності.
На думку спав дещо подібний підхід - матеріал написано тією мовою, якою написано більшість його слів. А як можна перевірити чи слово написане якоюсь мовою? Спробувати застосувати до нього стемер мови. Якшо стемер зумів підібрати для слова стем - з великою імовірністю, це валідне слово цієї мови.
Цей підхід я перевірив на наборі текстів українською і російською мовою. Алгоритм помилився в 3 випадках на 20 тисяч статей.
Friday, March 2, 2012
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
Отже, може кому стане у нагоді: 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'. Тепер ви можете повнотекстовий пошук для довільної мови з коробки
Я б хотів відмітити тільки одне - 'Added support for Hunspell stemmer'. Тепер ви можете повнотекстовий пошук для довільної мови з коробки
Saturday, July 9, 2011
Friday, July 8, 2011
Простий ETL tool
Інколи виникає потреба взяти якісь дані з однієї бази даних і перенести їх в іншу. Поки така потреба виникає лише інколи, можна цілком обходитися консольним клієнтом самої СУБД.
Проблема виникає, якщо дані потрібно переносити:
Проблема виникає, якщо дані потрібно переносити:
- регулярно
- в СУБД іншого типу (mysql -> postgresql)
- з не СУБД в СУБД (csv -> sql)
- якось модифікувати дані при переносі
Sunday, June 26, 2011
В публічному доступі існує гарна база стартапів http://www.crunchbase.com/. Вам доступна купа корисної інформації про ту чи іншу технологічну компанію.
Також існує набір скриптів, який дозволяє завантажити дані у форматі, придатному для подальшого аналізу - https://github.com/petewarden/crunchcrawl
Чим ми власне і зайнялися цієї неділі. Результати більш професійного аналізу з допомогою R будуть пізніше в блозі моєї дружини (ми вирішили провести два незалежних дослідження і пізніше порівняти висновки).
Одже, для дослідження я вибрав з повної бази в 60 тисяч проектів ті, які отримали хоч якесь фінансування, і проаналізувати саме їх. Крім того вибірку було обмежено групами, в які потрапило не меншще 50 проектів
Одже:
Також існує набір скриптів, який дозволяє завантажити дані у форматі, придатному для подальшого аналізу - https://github.com/petewarden/crunchcrawl
Чим ми власне і зайнялися цієї неділі. Результати більш професійного аналізу з допомогою R будуть пізніше в блозі моєї дружини (ми вирішили провести два незалежних дослідження і пізніше порівняти висновки).
Одже, для дослідження я вибрав з повної бази в 60 тисяч проектів ті, які отримали хоч якесь фінансування, і проаналізувати саме їх. Крім того вибірку було обмежено групами, в які потрапило не меншще 50 проектів
crunchbase=# select country_code, count(*), min(amount_raised::float) / 1000 as min, max(amount_raised::float) / 1000 as max, median(amount_raised::float::int8)::int8 / 1000 as median, stddev(amount_raised::float) from org where amount_raised::float > 0 group by country_code having count(*) > 49 order by median desc; country_code | count | min | max | median | stddev --------------+-------+-----+---------+--------+------------------ CHN | 162 | 7 | 478000 | 12000 | 54822859.7331082 USA | 7936 | 1 | 5620000 | 6972 | 81810808.5188822 IND | 162 | 6 | 300000 | 6555 | 30929815.0756823 CHE | 77 | 10 | 515000 | 5600 | 69345180.8354862 CAN | 345 | 1.2 | 350000 | 5000 | 24191815.1134509 ISR | 282 | 20 | 115000 | 4300 | 14798301.8257697 IRL | 64 | 70 | 50250 | 3900 | 8616604.81320482 DNK | 58 | 10 | 160400 | 3865 | 28943480.142572 DEU | 154 | 15 | 158700 | 3185 | 18653788.5816171 GBR | 526 | 10 | 1275000 | 3035 | 63979428.8180331 FRA | 306 | 50 | 149000 | 2935 | 12570166.9277194 SWE | 104 | 35 | 79960 | 2595 | 9937558.03216955 ESP | 83 | 15 | 218400 | 1930 | 25105973.5354224 AUS | 67 | 7 | 90000 | 1800 | 14347652.0292516(14 rows)
Одже:
- за найвищою ціною продано американський проект (5 млрд долларів - цікаво що це було??? - треба порити)
- в загальному більші кошти отримують китайські (медіана 12 мільйонів доларів) і американські (медіана 7 мільйонів доларів) проекти
- в той самий час середнє відхилення (хаотичність оцінки проектів) найвища в америці.
crunchbase=# select category_code, count(*), min(amount_raised::float) / 1000 as min, max(amount_raised::float) / 1000 as max, median(amount_raised::float::int8)::int8 / 1000 as median from org where amount_raised::float > 0 group by category_code having count(*) > 49 order by 5 desc; category_code | count | min | max | median ------------------+-------+-------+------------+-------- semiconductor | 335 | 35 | 540000 | 13500 biotech | 1300 | 10 | 598000 | 12086 cleantech | 516 | 10 | 1200000 | 12000 network_hosting | 277 | 10 | 300000 | 9400 security | 158 | 25 | 565000 | 8050 hardware | 451 | 1.1 | 409900 | 7650 enterprise | 429 | 5 | 217930 | 7000 mobile | 638 | 1 | 5620000 | 6000 advertising | 424 | 1.5 | 248000 | 5750 public_relations | 372 | 10 | 283000 | 5735 software | 2219 | 5 | 1275000 | 5387 consulting | 131 | 3 | 100000 | 4575 | 597 | 2.667 | 260000 | 4000 other | 501 | 1 | 495000 | 4000 games_video | 580 | 5 | 519000 | 4000 search | 137 | 2 | 223000 | 4000 web | 1443 | 1.2 | 2335700 | 3000 ecommerce | 407 | 2.5 | 503751.458 | 2520(18 rows)
- Не дивно, що "піднятися" найвища імовірність на напівпровідниках і біотехнологіях.
- Найтяжче заробити на є-комерсі. Але саме там відбулася найдорожча продажа.
В голові крутиться кілька більш цікавих досліджень. Спробую їх реалізувати ближчим часом, якщо поточні справи не закрутять...
Subscribe to:
Posts (Atom)