совершенно несвойственные им текстовые комбинации, которые будут мешать им в жизни
«Мешать в жизни» мне кажется сильным преувеличением значимости кода, используемого только для адресации. Кто будет обращать внимание на значение слов, если они у всех такие же рандомно присвоенные? Совсем неприличных слов в словаре точно не будет. К тому же у what3words планета разбита на квадраты 3x3 метра — при желании можно выбрать один из соседних квадратиков.
Кроме этого — слова на определённом языке, непонятном в международном контексте.
У what3words сейчас 9 языков поддерживаются. Если нужен международный контекст — можно брать английский вариант, это будет ничем не хуже записи традиционных топонимов латиницей.
Не совсем понимаю — почему было не опубликовать расширение в Chrome Web Store?
Конечно, в обучающих целях инструкции по написанию и загрузке распакованных расширений могут быть полезны, но легкий способ установки тоже стоило дать, наверное.
Стало интересно: в той части, где вы «усредняете» изображения, чтобы убрать людей с фото — вы именно среднее арифметическое используете? Кажется, что медиана подойдёт лучше — не будет «призраков» от долго стоящих на одном месте людей (но могут появиться отдельные случайные артефакты).
Кстати, в Photoshop есть аналогичный инструмент для этого (File–Scripts–Statistics...).
Библиотека не слишком большая, не хотелось добавлять необходимость её транспайлить при сборке. Сейчас можно смело подключить прямо исходники (в демке они так и подключены) и экспериментировать с кодом «вживую», без дополнительных инструментов.
Для английского весьма сложно. Нужно уметь собирать словарь из какого-нибудь другого источника, написать свои предсказатели для неизвестных слов. Для украинского проще — например, 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 — это построение словаря, а в библиотеке это не нужно, нужно только уметь его читать.
Ограничение по памяти тут тоже может оказаться причиной трудностей в судействе.
Допустим, одно из решений падает (из-за переполнения памяти, например) после 1 миллиона тестов, другое — после 2, третье — не падает никогда. Непонятно, как быть, если все три решения при этом постоянно улучшают свои результаты при длительном тестировании.
Дотестировать до 1 миллиона, до 2 или до какого-то большего числа? Для упавшего решения брать последний результат или 0?
Я бы сказал, что эти решения претендуют на спецпризы «за чрезвычайно оригинальное решение». Но проблема остается в том, что кроме своей чрезвычайной оригинальности они ещё и результаты показывают значительно лучшие, чем чистые (pure — по аналогии с pure functions) решения.
Судя по тому, что удалось понять, глядя на «неправильные» слова — они все (за исключением мусора) сформированы по принципу [префикс]основа[суффикс] (префикс и суффикс опциональны), а все префиксы, основы слов и суффиксы получены из словаря.
Кажется, что префиксы и суффиксы строятся откусыванием кусков, которые сами по себе входят в словарь, а основы слов — откусыванием полученных префиксов и суффиксов. Впрочем, уверенности нет, да и в моем решении это никак не помогло (у меня 81.1%).
После завершения конкурса лично я, например, ещё и на своем гитхабе планирую выложить своё решение. Возможно, будет удобно, если организаторы в своем репозитории сошлются на него как на подмодуль.
Мне в ближайшем времени предстоит ремонт и обустройство квартиры ещё без отделки — думаю, ваш опыт будет полезен. Только, в моей ситуации, видимо, логичнее сразу прокладывать дополнительные провода.
Если кто-нибудь занимался подобным — буду благодарен советам.
«Мешать в жизни» мне кажется сильным преувеличением значимости кода, используемого только для адресации. Кто будет обращать внимание на значение слов, если они у всех такие же рандомно присвоенные? Совсем неприличных слов в словаре точно не будет. К тому же у what3words планета разбита на квадраты 3x3 метра — при желании можно выбрать один из соседних квадратиков.
У what3words сейчас 9 языков поддерживаются. Если нужен международный контекст — можно брать английский вариант, это будет ничем не хуже записи традиционных топонимов латиницей.
Конечно, в обучающих целях инструкции по написанию и загрузке распакованных расширений могут быть полезны, но легкий способ установки тоже стоило дать, наверное.
Кстати, в Photoshop есть аналогичный инструмент для этого (File–Scripts–Statistics...).
Если кому-то известны открытые ресурсы, из которых подобные вещи можно было бы почерпнуть — буду благодарен.
Ладно, заменил картинку иллюстрацией из Википедии. Надеюсь, с ней ничего ужасного ни у кого не ассоциируется.
Библиотека не слишком большая, не хотелось добавлять необходимость её транспайлить при сборке. Сейчас можно смело подключить прямо исходники (в демке они так и подключены) и экспериментировать с кодом «вживую», без дополнительных инструментов.
Ладно, признаю, я просто старомоден :)
Поддержка других языка пока не в самом высоком приоритете.
(Конечно, Az.Tokens более универсален и уже сейчас адекватно должен дробить тексты на языках, использующих кириллицу или латиницу)
По поводу смыслов меня уже заранее немного беспокоит тот факт, что нынешний словарь (словарь OpenCorpora) не содержит никакой семантической информации. Сейчас при разборе нельзя даже узнать идентификатор разобранного слова в словаре (не говоря о том, что этим идентификаторам хорошо бы быть векторами, полученными из word2vec, например...).
А ещё, кстати, валентность глаголов не помешает собрать откуда-нибудь — как-то мало словарей такую информацию содержат, к сожалению.
Если поддержка в какой-то момент и появится, то начнется это, скорее всего, с родственных русскому языков — например, как в pymorphy2, с украинского.
Точнее, там все понятно, кроме центральной части — спуска к следующей вершине дерева:
Ну то есть, эээ, тут делается xor текущего индекса вершины с куском значения, лежащего в ней, а потом xor с символом, в который мы переходим… Wat?
В общем, я эту магию практически «дословно» переписал с питона и она магическим же образом заработала. К счастью, самая сложная часть в DAWG — это построение словаря, а в библиотеке это не нужно, нужно только уметь его читать.
Нормально. Не 83, но нормально :)
Допустим, одно из решений падает (из-за переполнения памяти, например) после 1 миллиона тестов, другое — после 2, третье — не падает никогда. Непонятно, как быть, если все три решения при этом постоянно улучшают свои результаты при длительном тестировании.
Дотестировать до 1 миллиона, до 2 или до какого-то большего числа? Для упавшего решения брать последний результат или 0?
Судя по тому, что удалось понять, глядя на «неправильные» слова — они все (за исключением мусора) сформированы по принципу [префикс]основа[суффикс] (префикс и суффикс опциональны), а все префиксы, основы слов и суффиксы получены из словаря.
Например:
enzedrinesiancy = [enzedrines] + iancy <= [b]enzedrines + [r]iancy
testabaxilement's = test + [aba] + xilement's <= test[s] + [b]aba + [e]xilement's
Кажется, что префиксы и суффиксы строятся откусыванием кусков, которые сами по себе входят в словарь, а основы слов — откусыванием полученных префиксов и суффиксов. Впрочем, уверенности нет, да и в моем решении это никак не помогло (у меня 81.1%).
Мне в ближайшем времени предстоит ремонт и обустройство квартиры ещё без отделки — думаю, ваш опыт будет полезен. Только, в моей ситуации, видимо, логичнее сразу прокладывать дополнительные провода.
Если кто-нибудь занимался подобным — буду благодарен советам.