?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Entries by tag: text

UTF-8 case insensitive slow grep
nyaload
_winnie
Когда нужно сделать case insensitive grep по огромному файлу в UTF-8, то приходится делать так, заменять

grep -i что-нибудь
на
LC_ALL=C grep -E '(ч|Ч)(т|Т)(о|О)-(н|Н)(и|И)(б|Б)(у|У)(д|Д)(ь|Ь)'

Разница в скорости колоссальная, в сотни раз (проверял на gnu grep 2.5.1-FreeBSD)
Tags: ,

zalgo render vulnerability H̴̫̺̦̣̟̺͖̜̪͚̱̩̠̤͈͓͓̭̔̑́̽̍̃ͪ̄̌ͩ̂̄ͤͯ̈̒̿́̚͢͟ͅEͯ̌̅̎͐͌̄̀̿̎ͦ̇ͤͧ͏̀͏̟̙̖̜̖̖̙̭ͅ ̓̅̓
nyaload
_winnie
В́ неќо͠т̶оры̀х̨ ̴б̢р̸ау͏з͠е͟р҉ах͡ и ҉ст́и̷ля̀х ̕мо͢ж̛н̢о̀ ди̶акрити̛кой́ ͝за͞л̀ез͠ть͝ в̕ чуж́и̷ѐ ̴п͞о͟с͠ты. Ỏ̷͖͈̞̩͎̻̫̫̜͉̠̫͕̭̭̫̫̹̗̹͈̼̠̖͍͚̥͈̮̼͕̠̤̯̻̥̬̗̼̳̤̳̬̪̹͚̞̼̠͕̼̠̦͚̫͔̯̹͉͉̘͎͕̼̣̝͙̱̟̹̩̟̳̦̭͉̮̖̭̣̣̞̙̗̜̺̭̻̥͚͙̝̦̲̱͉͖͉̰̦͎̫̣̼͎͍̠̮͓̹̹͉̤̰̗̙͕͇͔̱͕̭͈̳̗̭͔̘̖̺̮̜̠͖̘͓̳͕̟̠̱̫̤͓͔̘̰̲͙͍͇̙͎̣̼̗̖͙̯͉̠̟͈͍͕̪͓̝̩̦̖̹̼̠̘̮͚̟͉̺̜͍͓̯̳̱̻͕̣̳͉̻̭̭̱͍̪̩̭̺͕̺̼̥̪͖̦̟͎̻̰̞̖̠̣̦̰̙͕͙̹̖͓̥̱̱̱͈̙̮͙͉̝͓̣̥̳̩̯͇̞̦̱̘̻͕̥̙͆ͣ̍͌ͭ̇̏̇̋̉́ͦ̂̃͗͗̋͑̊̈̈́̔̾̍̅ͭ̊̂̓͌ͩ̀͛ͨ͑̉ͤ̓̉͒̉̄ͬ̂̅ͣͧ̓͋ͦ͋ͬ̄̃ͤ̿ͣ̒͑͛̋̍̈̆ͥ̐͛̌ͥ̓͛́ͩ̏̒̿̉͌ͨͯ̎̍ͬ̄̇ͦͥ͗̋ͥͯ̽ͤ̈́̔͌̇̃͂͐̅͛̔̉̃̓̒̽̎̇ͧ̇ͯ̓ͫͣ͂̈̇ͥ̉ͯ̐̃͐͑ͫͤ̌ͯ͐́͋͒ͥ̋̍ͨ̎̈͊̄ͣ́̉͛̔̂̄̎ͬ̅̒̔̌ͬ̎̊͐̈̍̋ͩ͑̾̄ͣ́͋͂̒͛̐͑́͐ͭ͆͗̆̎ͩ͑ͤ̎͆́ͣ̍ͮ͋̒ͯ̍̔̎ͩ̓̑̐̈́ͨ̉͐̔ͤ͒͒̓ͭ͒̃ͦ̆́͒̿ͫ̔ͬ̈̂̅ͪ͆͌͆͑̋̃ͦ͗͒̂ͮ̍̎̐̃͐̆̐̆́̀̚̚̚̚̚͘͝͝ͅͅ , .



(источник).

визуализация графов - Gephi
nyaload
_winnie
Всё graphviz да graphviz c dot...
Благодаря выборам в ОКС и shipilev узнал про ещё одну тулзу визуализации и обработки графов. Если graphviz может разумно и понятно отобразить до 100 элементов, то Gephi запросто укладывает и показывает что-то понятное для графов из 1000 элементов. Есть понятные туториалы: https://gephi.org/users/

Скачал граф своих друзей ( http://www.livejournal.com/misc/fdata.bml?user=ЮЗЕРНЕЙМ ), сунул в Gephi, кликнул кнопочки "разложить", "найти кластеры", "размер по популярности", получил что-то понятное:



Зеленый - это игро-разработчики и их старые знакомые.
Голубой - веб-разработка, поисковые системы (люди из гугла, яндекса, исследователи-одиночки, лингвисты).
Красный - веб-разработка, функциональные программисты, телекоммуникации, прочая разработка.
Фиолетовый - непрограммистские популярные писатели и хорошие знакомые.

инструкции:
Read more...Collapse )
Tags: ,

probability_estimation = (count / total)
nyaload
_winnie
Предположим, мы меряем количество случаев рака на душу населения.

Как в топе, так и внизу списка окажутся населенные пункты с небольшим количеством жителей. Потому что 0 случаев рака на 100 жителей деревни автоматом ставит деревню вниз списка ("ни у кого"), а 1 случай рака в деревне автоматом ставит деревню в топ списка ("каждый сотый болеет раком! 1000 человек на 100'000!").

more examples: http://www-stat.wharton.upenn.edu/~hwainer/Readings/Most%20Dangerous%20eqn.pdf

А как правильно, я не знаю. Я могу проверить гипотезу "в этом городе болеют чаще чем том" (для небольших городов ответ будет "не знаю"), или же сделать апостериорную оценку параметра бернулевского распределения для каждой деревни. Это будут бета-распределения на отрезке на 0/1, но как их расставить по-порядку — непонятно (если не вводить однозначную функцию).

Единственное что, обычно лучше использовать оценку (count+A / total+B) где A и B или подбираются через кросс-валидацию, или берутся просто как 1 и 2. От наиболее очевидно-дурацких ошибок в упорядочивании это спасает.

updated: В комментариях ещё предлагают использовать для сортировки нижнюю или верхнюю границу 0.95 доверительного интервала, таким образом показывая пользователю при просмотре низа/верха списка только надежные результаты (спасибо dfyz, gegmopo4, bik_top)
Tags: ,

Как писать правильно — «naive» или «naïve»?
nyaload
_winnie
Оригинал взят у bazzilic в Как писать правильно — «naive» или «naïve»?


Наткнувшись в очередной раз в статье на написание «naïve», я решил разобраться в причинах такого написания — ведь слово «naive» также присутствует в английском словаре и имеет ровно то же значение.


Недолгое исследование показало, что две точки над гласной именуются «diaeresis» или «hiatus», и сигнализируют о том, что данный звук должен читаться сам по себе, не вступая в дифтонги с окружающими гласными. Так, слово «naive» по правилам должно быть произнесено с дифтонгом «ai», то есть так же, как, скажем, слово «hair»: «нэйв». При написании же «naïve» произносить следует «наив».


Этим же диакритическим знаком обозначается также немецкий умляут (Germanic umlaut), в целом, смягчающий гласную, но такое его использование, как я понял, практикуется только в немецком языке.


Интересно также, что правильное написание таких английских слов как «cooperate» или «coordinate» — «coöperate» и «coördinate», соответственно. Иначе, их следует произносить «купирэйт» и «курдинэйт», ибо дифтонг «oo» читается как «у».

Tags:

Bag of words
nyaload
_winnie
Bag of words: bag of words

(courtesy of itman)
Tags: ,

float fail
nyaload
_winnie
При суммировании вероятностей (1/1млрд) используя тип float сумма вероятностей никогда не будет больше 0.032, сколько ни складывай.

Если использовать float как счетчик времени в секундах, через сутки его точность будет ниже 0.01 секунды, что уже не хватает для расчета FPS в играх или плавной анимации при вычитании. Или вообще может "заморозиться" из-за отсутствия изменений в операции (time += dt)

При использовании float для измерения расстояния, при размере уровня 10км его точность будет порядка миллиметра, что вызывает заметные баги в физике и анимациях игры. Жуткий рост погрешности при операциях с матрицами может быть заметным и при размере уровня порядка километра.
Tags: ,

NFKC / NFC
nyaload
_winnie
Буквы с диакритикой могут записываться нескокими способами. Диакритический знак может быть в самом символе, а может быть отдельно, Ё или Е а затем диарезис-умля ̈ут ̈ . Ещё диакритические знаки могут быть в разном порядке (точка снизу, точка сверху). Не знаю как в европейских текстах, а вот тайские сполшняком из комбинации букв с диакритикой.

Используемая многими юникод-нормализация unicodedata.normalize("NFKC", ...) портит значок номера '№', превращая его в 'No'

Судя по списку подсказок гугла по префиксу "статья №" в гугле используется именно эта нормализация

Ещё: Read more...Collapse )

Из любопытства посмотрел для каких ещё символов есть отличие в нормализации, здесь только малая часть:
dž - dž - dž - LATIN SMALL LETTER DZ WITH CARON
LJ - LJ - LJ - LATIN CAPITAL LETTER LJ
Lj - Lj - Lj - LATIN CAPITAL LETTER L WITH SMALL LETTER J
² - 2 - ² - SUPERSCRIPT TWO
³ - 3 - ³ - SUPERSCRIPT THREE
℻ - FAX - ℻ - FACSIMILE SIGN
∬ - ∫∫ - ∬ - DOUBLE INTEGRAL
∭ - ∫∫∫ - ∭ - TRIPLE INTEGRAL
∯ - ∮∮ - ∯ - SURFACE INTEGRAL
∰ - ∮∮∮ - ∰ - VOLUME INTEGRAL
① - 1 - ① - CIRCLED DIGIT ONE
ℼ - π - ℼ - DOUBLE-STRUCK SMALL PI
ℽ - γ - ℽ - DOUBLE-STRUCK SMALL GAMMA
ℾ - Γ - ℾ - DOUBLE-STRUCK CAPITAL GAMMA
ℿ - Π - ℿ - DOUBLE-STRUCK CAPITAL PIRead more...Collapse )
Tags:

grep is unstable
nyaload
_winnie
Раньше фильтровал символы с кодом больше 0xffff (никаких кошачьих смайликов) в UTF-8 потоке как

LC_ALL=C grep -v `echo "[A-B][A-B][A-B]" | tr AB "\200\277"` || true

Это выкидывает строки со слишком длинными последовательностями байтов 10xxxxxx в UTF-8 символах, UTF-8 на входе гарантировано корректный.

Внезапно при смене окружения перестало фильтровать, без диагностики (просто пропускает "большие" символы сквозь себя). GNU grep 2.6.3, если что. tr отрабатывает корректно.

Сменил на питон,
  check = re.compile(3 * ('[' + ''.join(map(chr, xrange(0x80, 0xc0))) + ']'))
  for l in sys.stdin:
    if not re.search(check, l):
      sys.stdout.write(l)


В восемь раз медленней, фи. Но работает.
Tags: ,

deciduous trees
nyaload
_winnie
Узнал из английской "Улицы Сезам" новое слово, deciduous.

Итак:
deciduous tree - листопадное дерево
decision tree - дерево решений (алгоритм)

И это два разных дерева, путать нельзя.

Tags: ,