Search
Write a publication
Pull to refresh
249
0
Денис Ольшин @deNULL

Пользователь

Send message
совершенно несвойственные им текстовые комбинации, которые будут мешать им в жизни

«Мешать в жизни» мне кажется сильным преувеличением значимости кода, используемого только для адресации. Кто будет обращать внимание на значение слов, если они у всех такие же рандомно присвоенные? Совсем неприличных слов в словаре точно не будет. К тому же у what3words планета разбита на квадраты 3x3 метра — при желании можно выбрать один из соседних квадратиков.

Кроме этого — слова на определённом языке, непонятном в международном контексте.

У what3words сейчас 9 языков поддерживаются. Если нужен международный контекст — можно брать английский вариант, это будет ничем не хуже записи традиционных топонимов латиницей.
Не совсем понимаю — почему было не опубликовать расширение в Chrome Web Store?

Конечно, в обучающих целях инструкции по написанию и загрузке распакованных расширений могут быть полезны, но легкий способ установки тоже стоило дать, наверное.
Стало интересно: в той части, где вы «усредняете» изображения, чтобы убрать людей с фото — вы именно среднее арифметическое используете? Кажется, что медиана подойдёт лучше — не будет «призраков» от долго стоящих на одном месте людей (но могут появиться отдельные случайные артефакты).

Кстати, в Photoshop есть аналогичный инструмент для этого (File–Scripts–Statistics...).
Пока нет. В исходниках есть JSDoc-комменты — я думаю, можно пройтись по ним и довольно быстро написать.
Было бы неплохо, конечно. Трудности возникают в отсутствии такой информации в OpenCorpora и других общедоступных базах.

Если кому-то известны открытые ресурсы, из которых подобные вещи можно было бы почерпнуть — буду благодарен.
Ничего криминального, на первый взгляд.

Беда. Уже и случайную картинку из гуглопоиска нельзя взять, не задев мракобесие какое-нибудь (хотя почва тут, конечно, благодатная).

Ладно, заменил картинку иллюстрацией из Википедии. Надеюсь, с ней ничего ужасного ни у кого не ассоциируется.
Иллюстрация к тому, откуда взялось название библиотеки.
Ну я и ES5 не считаю таким уж длинным и грязным.

Библиотека не слишком большая, не хотелось добавлять необходимость её транспайлить при сборке. Сейчас можно смело подключить прямо исходники (в демке они так и подключены) и экспериментировать с кодом «вживую», без дополнительных инструментов.

Ладно, признаю, я просто старомоден :)
Для английского весьма сложно. Нужно уметь собирать словарь из какого-нибудь другого источника, написать свои предсказатели для неизвестных слов. Для украинского проще — например, pymorphy2 умеет, но для этого все равно надо как минимум собрать отдельный словарь, а инструмент для этого ещё не выложен в открытый доступ.

Поддержка других языка пока не в самом высоком приоритете.

(Конечно, Az.Tokens более универсален и уже сейчас адекватно должен дробить тексты на языках, использующих кириллицу или латиницу)
Пока в нулевой: только-только довёл до ума морфологию.

По поводу смыслов меня уже заранее немного беспокоит тот факт, что нынешний словарь (словарь OpenCorpora) не содержит никакой семантической информации. Сейчас при разборе нельзя даже узнать идентификатор разобранного слова в словаре (не говоря о том, что этим идентификаторам хорошо бы быть векторами, полученными из word2vec, например...).

А ещё, кстати, валентность глаголов не помешает собрать откуда-нибудь — как-то мало словарей такую информацию содержат, к сожалению.
Пока что нет: хочется хорошо уметь работать с одним языком, чем средненько со многими. Ряд моментов в коде привязан к специфичным особенностям русского — как минимум предсказатели слов точно. Наверняка для более распространенных языков уже существуют толковые решения.

Если поддержка в какой-то момент и появится, то начнется это, скорее всего, с родственных русскому языков — например, как в pymorphy2, с украинского.
Скажу по секрету — до конца в формат у меня так и не удалось вникнуть :)

Точнее, там все понятно, кроме центральной части — спуска к следующей вершине дерева:

DAWG.prototype.followByte = function(c, index) {
  var o = offset(this.units[index]);
  var nextIndex = (index ^ o ^ (c & 0xFF)) & PRECISION_MASK;

  if (label(this.units[nextIndex]) != (c & 0xFF)) {
    return MISSING;
  }

  return nextIndex;
}

Ну то есть, эээ, тут делается xor текущего индекса вершины с куском значения, лежащего в ней, а потом xor с символом, в который мы переходим… Wat?

В общем, я эту магию практически «дословно» переписал с питона и она магическим же образом заработала. К счастью, самая сложная часть в DAWG — это построение словаря, а в библиотеке это не нужно, нужно только уметь его читать.
Протестил свое, 81.17%
Tested 10000 of 10000 blocks

   Total       W      NW   NW[0]   NW[1]   NW[2]   NW[3]   NW[4]   NW[5]   NW[6]   NW[7]   NW[8]
   1000k  500672  499328   92206   69134   74631   78793   75506   56814   30604   14427    7213

 Correct      F-      F+   F+[0]   F+[1]   F+[2]   F+[3]   F+[4]   F+[5]   F+[6]   F+[7]   F+[8] ms/100w

    .
  81.17%   8.54%  29.16%   2.45%  15.04%  18.55%  24.48%  38.76%  59.27%  72.12%  70.80%  63.51%       8

Нормально. Не 83, но нормально :)
Ограничение по памяти тут тоже может оказаться причиной трудностей в судействе.

Допустим, одно из решений падает (из-за переполнения памяти, например) после 1 миллиона тестов, другое — после 2, третье — не падает никогда. Непонятно, как быть, если все три решения при этом постоянно улучшают свои результаты при длительном тестировании.

Дотестировать до 1 миллиона, до 2 или до какого-то большего числа? Для упавшего решения брать последний результат или 0?
Я бы сказал, что эти решения претендуют на спецпризы «за чрезвычайно оригинальное решение». Но проблема остается в том, что кроме своей чрезвычайной оригинальности они ещё и результаты показывают значительно лучшие, чем чистые (pure — по аналогии с pure functions) решения.
Хорошая идея с префиксами и суффиксами.

Судя по тому, что удалось понять, глядя на «неправильные» слова — они все (за исключением мусора) сформированы по принципу [префикс]основа[суффикс] (префикс и суффикс опциональны), а все префиксы, основы слов и суффиксы получены из словаря.

Например:

enzedrinesiancy = [enzedrines] + iancy <= [b]enzedrines + [r]iancy
testabaxilement's = test + [aba] + xilement's <= test[s] + [b]aba + [e]xilement's

Кажется, что префиксы и суффиксы строятся откусыванием кусков, которые сами по себе входят в словарь, а основы слов — откусыванием полученных префиксов и суффиксов. Впрочем, уверенности нет, да и в моем решении это никак не помогло (у меня 81.1%).
После завершения конкурса лично я, например, ещё и на своем гитхабе планирую выложить своё решение. Возможно, будет удобно, если организаторы в своем репозитории сошлются на него как на подмодуль.
Спасибо за статью!

Мне в ближайшем времени предстоит ремонт и обустройство квартиры ещё без отделки — думаю, ваш опыт будет полезен. Только, в моей ситуации, видимо, логичнее сразу прокладывать дополнительные провода.

Если кто-нибудь занимался подобным — буду благодарен советам.

Information

Rating
Does not participate
Location
Саратов, Саратовская обл., Россия
Registered
Activity