Code Monkey home page Code Monkey logo

lsse's People

Contributors

alexanderpanchenko avatar jgc128 avatar pomanob avatar suhasbhairav avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lsse's Issues

Отдельные примеры запросов для английского и французского

Проблема

Сейчас на франзуском показываются примеры поиска на английском, такие как python и blueberry. Однако следует в примерах "показать сервис с лучшей стороны", т.е. дать примеры наиболее популярных запросов.

Решение

Нужно для каждого языка хранить отдельный список примеров. Во французской версии нужно включить следующие "удачные" запросы:

  • France
  • fromage
  • mathématiques
  • français
  • espagnol
  • londres
  • pizza
  • quiche
  • sandwich
  • php
  • voiture
  • ferrari
  • lamborghini
  • camion
  • toulouse

Страница advanced -- дополнительная информация

Добавление дополнительной информации о выбранной базе на странице расширенного поиска.

Всплывающая подсказка по каждому из методов выглядит сейчас
"desc" -- строка описания из i18n/(ru|en).json
Всплывающая подсказка по каждому из методов должна выглядеть следующим образом:

"Number of words: x
Number of relations: y
desc"

либо для русского языка

"Количество слов: x
Количество отношений: y
desc"

Здесь x -- количество отдельных слов для данной модели ( не равно в количеству слов в коллекции words если загружено больше двух моделей) , y -- количество отношений для данной модели, desc -- строка описания из i18n/(ru|en).json.

Подсказки с пробелами

Поздсказки не показываются для запросов с пробелами

К примеру

european comission

Должно быть

european c -> european comission

Сейчас

european c -> 

Обновление моделей -- Serelex

  • Удаление моделей Serelex из базы в силу того что они показывают нерелевантные результаты

    name: "Cos-MKNN-5",
    alias: 'cos-mknn-5-327167',
    fileName: 'data/cos-mknn-5-327167.csv'
    
    name: "Overlap-MKNN-5",
    alias: 'overlap-mknn-5-32716',
    fileName: 'data/overlap-mknn-5-327167.csv'
    
    name: "Overlap-MKNN-10",
    alias: 'overlap-mknn-10-327167',
    fileName: 'data/overlap-mknn-10-327167.csv'
    
    name: "Overlap-MKNN-20",
    alias: 'overlap-mknn-20-327167',
    fileName: 'data/overlap-mknn-20-327167.csv'
    
    name: "Overlap-MKNN-50",
    alias: 'overlap-mknn-50-327167',
    fileName: 'data/overlap-mknn-50-327167.csv'
    
  • Добавление новых отношений извлеченных с помощью serelex-а которые показывают лучшие результаты

http://cental.fltr.ucl.ac.be/team/~panchenko/data/serelex/cos-mknn-10-12130.csv
http://cental.fltr.ucl.ac.be/team/~panchenko/data/serelex/cos-mknn-5-12130.csv
http://cental.fltr.ucl.ac.be/team/~panchenko/data/serelex/overlap-mknn-20-12130.csv
http://cental.fltr.ucl.ac.be/team/~panchenko/data/serelex/cos-mknn-20-12130.csv
http://cental.fltr.ucl.ac.be/team/~panchenko/data/serelex/overlap-mknn-10-12130.csv
http://cental.fltr.ucl.ac.be/team/~panchenko/data/serelex/overlap-mknn-5-12130.csv

Лемматизация поискового запроса

Я предлагаю использовать подход к лемматизации поисковых запросов основанный на простой подстановке из словаря DELA. Английская и Французская версии доступны здесь -- http://infolingu.univ-mlv.fr/ (donnes linguistiques -> dictionairres -> telechargement)

Этот словарь доступен на условиях лицензии LGPL LLR (http://infolingu.univ-mlv.fr/DonneesLinguistiques/Lexiques-Grammaires/lgpllr.html) -- LGPL для лингвистических ресурсов. Посылаю тебе его в приложении к письму.

Словарь это XML файл в кодировке UTF8. Он содержит 296 606 "входов" для 150 145 простых лемм (слов вроде "jeep") и 132 990 "входов" для 69 912 составных лемм (словосочетаний вроде "jeep wrangler"). Вход это флективная форма слова такая как "jeeps", которая в словаре связана с канонической формой слова (леммой) такой как "jeep".

Более конкретно, каждая статья словаря представлена в следующем формате

<entry>
  <lemma>thesaurus</lemma>
  <pos name='noun'/>
  <inflected>
    <form>thesauri</form>
    <feat name='number' value='plural'/>
  </inflected>
  <inflected>
    <form>thesauruses</form>
    <feat name='number' value='plural'/>
  </inflected>
  <inflected>
    <form>thesaurus</form>
    <feat name='number' value='singular'/>
  </inflected>
</entry>

Здесь -- это лемма, -- это входы словаря, -- часть речи леммы.

Задача данного метода лемматизации -- возвращение для каждого входа его леммы. Важно что одному и тому же "входу" может соответствовать несколько разных лемм. Алгоритмы лемматизации текстов решают эту проблему за счет использования контекста в "входа" в исходном тексте. Для нас эта проблема не критична т.к. мы лемматизируем запросы -- поэтому никакого контекста все равно у нас нет. Более того, наша система в любом случае (на данный момент) может только ответить на простые запросы соответствующие отдельным словам и некоторым составным словам.

Примерная схема алгоритма:

Input: query -- запрос
Input: MIN_RES -- минимальное количество результатов (default = 1)
Input: dict -- словарь (multimap) основанный на DELA в формате <вход, лемма>, одному входу могут соотв. несколько лемм.
Output: lem_query -- лемматизированный запрос

if( количество результатов на запрос query >= MIN_RES ) {
    // Лемматизация не нужна 
    return query
}
else {
    // Лемматизация нужна -- по исходному запросу ничего не найдено
    lemmas = dict(query)
    if(lemmas.count() == 1){
        // Возвращаем единственную найденную лемму
        return lemmas[0]
    }
    else if (lemmas.count() == 0){
        // Возвращаем исходный запрос -- лемма не найдена
        return query
    }
    else{
        // Найдена больше чем 1 лемма -- возвращаем ту которая возвращает больше всего результатов
        max_results = 0;
        max_lemma = query
        foreach lemma in lemmas{
            if ( количество результатов на запрос lemma > max_results ){
                max_results = количество результатов на запрос lemma
                max_lemma = lemma
            }
        }
        return max_lemma
    }
}

Я думаю лучше всего трансформировать XML словарь в коллекцию mongo или в хэш таблицу которая загружается в память и работать уже с этим представлением. Поиск в исходном XML файле будет слишком медленным если его не проиндексировать.

Вот несколько примеров работы:

Example 0

Input: "thesauri" or "thesauruses"

Entry in the dictionary:

<entry>
  <lemma>thesaurus</lemma>
  <pos name='noun'/>
  <inflected>
    <form>thesauri</form>
    <feat name='number' value='plural'/>
  </inflected>
  <inflected>
    <form>thesauruses</form>
    <feat name='number' value='plural'/>
  </inflected>
  <inflected>
    <form>thesaurus</form>
    <feat name='number' value='singular'/>
  </inflected>
</entry>

Output: "thesaurus" (lemma of the input words)

Example 1

Input: "cats" (lemma)

Corresponding entry:

<entry>
  <lemma>cat</lemma>
  <pos name='noun'/>
  <feat name='subcat' value='animal'/>
  <inflected>
    <form>cat</form>
    <feat name='number' value='singular'/>
  </inflected>
  <inflected>
    <form>cats</form>
    <feat name='number' value='plural'/>
  </inflected>
</entry>

Output: "cat"

Example 2

Input: "jeans"

Corresponding entry:

<entry>
  <lemma>jean</lemma>
  <pos name='noun'/>
  <feat name='subcat' value='concret'/>
  <inflected>
    <form>jean</form>
    <feat name='number' value='singular'/>
  </inflected>
  <inflected>
    <form>jeans</form>
    <feat name='number' value='plural'/>
  </inflected>
</entry>

Output: "jean" (lemma)

Example 3

Input: "horses"

Entry:

<entry>
  <lemma>horse</lemma>
  <pos name='noun'/>
  <feat name='subcat' value='animal'/>
  <inflected>
    <form>horse</form>
    <feat name='number' value='singular'/>
  </inflected>
  <inflected>
    <form>horses</form>
    <feat name='number' value='plural'/>
  </inflected>
</entry>

Output: "horse" (lemma)

Example 4

Input: "horse operas"

Entry:

<entry>
  <lemma>horse opera</lemma>
  <pos name='noun'/>
  <feat name='compound' value='comp'/>
  <inflected>
    <form>horse opera</form>
    <feat name='number' value='singular'/>
  </inflected>
  <inflected>
    <form>horse operas</form>
    <feat name='number' value='plural'/>
  </inflected>
</entry>

Output: "horse opera" (lemma)

Example 5

Input: "jeeps"

Entry:

<entry>
  <lemma>jeep</lemma>
  <pos name='noun'/>
  <feat name='subcat' value='concret'/>
  <inflected>
    <form>jeep</form>
    <feat name='number' value='singular'/>
  </inflected>
  <inflected>
    <form>jeeps</form>
    <feat name='number' value='plural'/>
  </inflected>
</entry>

Output: "jeep" (lemma)

Статическое отображение картинок

Проблема

  1. Если jpg.to падает, то серелекс не может отображать картинки.
  2. Низкая скорость отображения картинок т.к. нужно делать много вызовов к стороннему сервису даже при небольшом количестве пользователей.

Решение

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

  1. Попытка отобразить статическую картинку.
  2. Если отображение не удалось (картинки нет или при другой проблеме) тогда обращение к jpg.to

Дизайн -- доделки

Проблема

Необходимо доделать несколько элементов дизайна, чтобы интерфейс смотрелся законченным.

Решение

  • Убрать отступ слева в колонка со списком слов. "Results count: 451" должен быть на одном уровне с "For example, fedora". Не нужен отступ цифр (1., 2., 3., и т.п.) от "Results count: 451".
  • Привязать канву графа к правой части панели дополнительной информации (с определением). Сейчас граф "заезжает" под эту панель, что выглядит неэстетично. Кроме этого, он вылезает за этой панелью. Нужно чтобы если панель включена то границей канвы являлась правая часть панели, иначе -- правая часть экрана (с соответствующим отступом).

Отображение сопутствующей информации

Мотивация

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

Однако во многих случаях желателено иметь доступ и к явному описанию смысла слова. В особенности это становится актуальным когда система используется для изучения языка.

Пример:

Alt text

Реализация

На данном этапе задача заключается в создании отдельной тестовой странички с дополнительной колонкой справа как на приведенном выше картинке.

На данной страничке должна отображатся:

Добавить кнопочки лайк

Мотивация

Вирусное распространение информации о сервисе

Реализация

Добавить кнопочки лайк формата фейбука, вконтакте, гугл+ и ретвита на главную страницу.

Примеры поиска

Мотивация

Система предоставляет достаточно необычный вид поиска. Пользователю изначально может быть не понятно что система может делать а что не может. Необходимо проилюстрировать работу системы на нескольких (удачных) запросах -- примерах использования.

Реализация

Под строкой поиска нужно добавить пример запроса:

  • Текст -- "For example, fruit" где "fruit" это пример запроса.
  • Цвет -- серый (как In English)
  • Запрос генерируется случайным образом при загрузке страницы из следующего множества запросов:
fruit
vehicle
computational linguistics
machine learning
weapon
tank
plane
airplane
mango
strawberry
Russia
Belgium
France
mathematics
physics
moose
racoon
dog
cat 
animal
vegetagle
Moscow
Paris
Brussels
Vienna
Berlin
ferrari
porsche
lamborghini
pizza
hot dog
hamburger
soft drink

Определения на французском языке

Проблема

Сейчас при поиске на французском показывается определение на английском языке (из английской википедии).

Решение

Следует учитывать текущий язык системы при отображении определения слова. В частности, если текущий язык FR то следует использовать домен третьего уровня FR в википедии (http://fr.wikipedia.org/wiki/Amour). Аналогично будет и для всех других языков -- RU, EN и т.п.

Поддержка тач-экранов

Сейчас с графом нельзя работать с планшета на Вин8 - когда щелкаешь по слову, не подгружаются связанные с ним слова

При этом с телефона на WP все хорошо работает, надо бы еще проверить на iPad, но у меня его нет)

Надо адаптировать граф под тач - в JS есть специальные события для прикосновений и тд, мб там и масштабирование жестами есть

Картинки в графе

Мотивация

Сейчас при нажатии кнопки "Вкл. картинки" рядом с каждым элементов в списке резульатов отображается иконка из TheNounProject.

Недостатки:

  • Покрытие менее 1% лексикона -- 2.000 иконок и более 200.000 слов в системе.
  • Недавно лицензия использования иконок изменилась и многие иконки стали платными -- т.е. покрытие из public domain в реальности еще меньше.
  • Визуализация предоставляемая иконками никак не связана с визуализацией с помощью картинок Google.

Цель данного улучшения -- использовать картинки из поиска гугла (jpg.to) в разделе "Граф". Это нужно чтобы:

  • восприятие графа у пользователя было более быстрым;
  • была визуальная связь между разделами "Граф" и "Картинки". Cейчас связь только текстовая.

Реализация

В новой версии, по нажанию кнопки Вкл.картинки

  • список результатов изменятся не будет (сейчас отображаются картинки из TheNounProject);
  • в графе в каждом узле будет добавлятся небольшая квадратная картинка с соответствующим изображением из Google.
  • как и сейчас, картинки в режиме "Граф" по умолчанию не загружаются.

Лог API

Насколько я понимаю, сейчас запросы из API не добавляются в лог, верно?

Если нет тогда добавь пожайлуста в общий лог все что запрашивается по API http://serelex.cental.be/find/norm60-corpus-all/ и других. Здесь конечно никакой информации по кликам уже не будет. Эту информацию важно сохранять иначе запросы пользователей Windows клиентов будут не учтены.

Западающая строка подсказок

Строка с подсказками иногда западает (не изчезает) после того как пользователь запросил результат. Этот баг возникал много раз у меня на разных браузерах (и у других пользователей) но я не могу точно описать какая последовательность действий к нему приводит.

Баг заключается в том что после нажания на Enter или клика по слову из выпадающего списка список не пропадает. Результаты при этом отображаются. При этом если нажать Search то список пропадает.

Список смыслов слова

Мотивация

Сейчас отображаются определения слова -- это позволяет пользователю лучше понять смысл запроса. Дополнительно можно отображать и множество возможных толкований слова. Многие слова, такие как python или java многозначны. Однако система показывает определение только наиболее распространенного смысла слова (что логично).

Нужно показывать пользователю разные смыслы слова из запроса. Особенно это актуально для таких слов как python или java но может быть интересно и для других, таких как Moscow (существует около 15 городов с таким названием).

Реализация

Нужен дополнительный блок после определения и до ссылок на Google и словари. Данный блок будет отображает ссылки на разные смыслы слова. Брать список многозначных слов можно опять же с dbpedia, например http://dbpedia.org/page/Python

dbpedia-owl:wikiPageDisambiguates


dbpedia:Python_of_Catana
dbpedia:Pythonidae
dbpedia:Colt_Python
dbpedia:Python_II
dbpedia:Python_(Efteling)
dbpedia:Python_(missile)
dbpedia:Python_(film)
dbpedia:Armstrong_Siddeley_Python
dbpedia:Python_Automobile
dbpedia:Monty_Python
dbpedia:Python_(Busch_Gardens_Tampa_Bay)
dbpedia:Python_(mythology)
dbpedia:Python_of_Aenus
dbpedia:Python_(genus)
dbpedia:Python_(programming_language)
dbpedia:Python_of_Byzantium
dbpedia:Rock_python

Часто значением атрибута dbpedia-owl:wikiPageDisambiguates будет ссылка на страницу -- dbpedia:Moscow(disambiguation). К примеру как здесь -- http://dbpedia.org/page/Moscow.
В этом случае нужно перейти по ссылке и загрузить значения атрибутов со ссылки. Такие ссылки всегда заканчиваются на "
(disambiguation)", поэтому их просто вычислить.

Не следует отображать все множество "смыслов" запроса -- их может быть слишком много. Нужно лишь отобразить первые 5 смыслов и сделать ссылку "Отобразить все X значений слова" / "Show all X word senses". В этом случае будут загружаться список всех смыслов.

Следует заменять "_" на пробел в строке задающей смысл слова.

Наконец, при нажатии на ссылку с название смысла слова должно в небольшом окошке (таком же как на страничке http://serelex.cental.be/page/advanced -- знак вопроса) отображаться определение слова взятое опять же из dbpedia (первое по списку значение атрибута dbpedia-owl:abstract).

Например, http://dbpedia.org/page/Moscow,_India:

Moscow is a village in the Kottayam district of Kerala, South India. The name was instituted because of Soviet influence in Kerala during the Cold War. Located near Thengana, Moscow is easily accessible by bus and lies midway between Thiruvalla and Changanasseri. Initially a sleepy little hamlet, it has now developed into one of the suburbs of Chanaganasseri with all facilities including hospitals, schools (Good Shepherd School) and churches, all within walking distance.

Visulex -- дополнительные результаты при большом экране

Проблема

Если у пользователя большой экран на котором без скроллов показываются все 20 первых картинок становится не очевидным как отобразить следующие 20 результатов. Единственный способ сделать это -- увеличить страницу так чтобы все 20 картинок не влезали и затем сделать скролл вниз.

Решение

  • Добавить ссылку "Show next 20 results", как на странице с графом

Запросы из нескольких слов на которые нет ответа

Лексикон используемый в системе в данный момент ограничен -- 419.751 слов для метрик семейства PatternSim. Поэтому на многие запросы система не может дать ответ т.к. в базе нет соответствующего слова/словосочетания. Пример:

wild fires
mad professor
sony playstation
microsoft windows

Если на запрос не найдено ответов (в т.ч. с учетом лемматизации) и запрос состоит из нескольких слов тогда следует произвести поиск каждого из подзапросов. Подзапрос -- одно или несколько рядом стоящих слов в запросе. Таким образом:

wild fires -> wild, fires
mad professor -> mad, professor
sony playstation -> sony, playstation
microsoft windows -> microsoft, windows

Сейчас на запрос "microsoft windows" результат:

Nothing found!

Должно быть на запрос "microsoft windows" (запрос "microsoft" и "windows" выдает более 0 результатов):

Nothing found for "microsoft windows". Try:
- microsoft
- windows

Должно быть на запрос "microsoft windows" (запрос "microsoft" выдает более 0 результатов, по запросу "windows" ничего не найдено):

Nothing found for "microsoft windows". Try:
- microsoft

Должно быть на запрос "microsoft windows" (по запросам "microsoft" и "windows" ничего не найдено):

Nothing found!

Должно быть на запрос "microsoft windows service pack" (запрос "microsoft", "windows" и "service pack" выдают более 0 результатов):

Nothing found for "microsoft windows". Try:
- microsoft
- windows 
- service pack

Должно быть на запрос "microsoft windows service pack" (запрос "microsoft", "windows", "service", "pack" выдают более 0 результатов, по запросу "service pack" и другим подзапросам из 2х и более слов ничего не найдено):

Nothing found for "microsoft windows". Try:
- microsoft
- windows 
- service
- pack

Визуализация списка результатов -- TheNounProject.com

Добавление на страничку advanced экспериментальной функции визуализации списка результатов с помощью свободно распространяемых иконок с сайта http://thenounproject.com/

Мотивация

  • большинство запросов и результатов поиска -- существительные
  • гипотеза -- thenounproject.com предоставляет достаточно большое покрытие лексикона исользуемого в нашей системе
  • визуализация результатов поможет пользователю более быстро воспринять результат поиска

Реализация

  • функция вводиться только а страничке расширенного поиска
  • сейчас результаты предоставляются в виде троек "ранг слово вес",
1. dog 0.99222222
2. cat 0.69222222
  • в новой версии результаты поиска предоставляются в виде четверок "ранг слово картинка"
  1. dog dog 0.99222222
  2. cat cat 0.69222222
  • размер иконки -- 16px, 32px или 48px
  • результаты отображаются в таблице -- для правильного выравнивание текста посередине
  • для пилотной версии -- генерация ссылок на лету на SVG файл лежащий на thenounproject.com (если это возможно)
  • если соответствующей картинки не найдено для слова -- загружается "спейсер" соответствующего размера

Лемматизация отвалилась

Почему то в ветке visualization не работает лемматизация поискового запроса. Ты не мог бы посмотреть в чем дело?

К примеру

algorithms
engineers
dogs
cats

выдает

Nothing found!

Идентификатор пользователя в логе запросов

Андрей Юрьевич порекомендовал в логе запроса кроме собственно запроса и того на что было кликнуто сохранять еще и какой-нибудь уникальный идентификатор пользователя и его сессии. Это потом можно будет использовать для более тонкого извлечения информации из логов. Оформляю этот как тикет на улучшение.

Дополнительные результаты

Мотивация

Сейчас дополнительные результаты можно увидеть с помощью кнопочки Show all results...

Недостатки:

  • Результатов может быть очень много -- до нескольких сотен. Даже если пользователь заинтересован в них всех показвать их все сразу не имеет смысла т.к. он не может прочитать все результаты сразу. К тому же, качественные отношения встречаются в лучшем случае в первой сотне слов. Более длительное время загрузки для слов с большим количеством отношений.
  • В силу того что загружаются сразу все слова не имеет смысла добавлять их в граф. Результат будет плачевный для большинства запросов т.к. алгоритм визуализации работает на строноне клиента и даже при 20-40 узлах серьезно загружает процессор.

Реализация

  • Заменить кнопочку "Show all results" кнопочкой "Show next 20 results".
  • При нажатии "Show next 20 results" дополнительные слова добавляются в граф.

Поддержка OpenSearch

Нужно добавить в сервис поддержку формата OpenSearch

Это позволит унифицировать поддержку подсказок и внедрить эту возможность в контракт поиска Windows 8

Кнопка включения картинок

Мотивация

Сейчас картинки из thenounproject.com включены на странице расширенного поиска и отключены на главной странице. В силу малого покрытия лексикона, большинству пользователей не нужно показывать картинки. Действительно, большинство слов не может быть визуализировано. Однако следует сделать возможным показ картинок на главной странице тем пользователям которые хотят включить эту настройку.

Реализация

Добавить ссылку рядом с ссылкой для переключения языков для включения и выключения картинок.

  • Ссылка (кнопка) работает аналогично ссылке (кнопке) In English -- По-русски
  • Название сылки: Show Images -- Hide Images / Вкл. картинки -- Откл. картинки
  • При включенных картинках в результатах поиска отображаются картинки (как сейчас на странице расширенного поиска)
  • При выключенных картинка в результатах поиска не отображаются картинки (как сейчас на главной странице)
  • По умолчанию на главной странице картинки отключены
  • По умолчанию на странице расширенного поиска картинки включены
  • Цвет ссылки -- серый (как In English)
  • Вид меню: По-русски | Show Images

Новый дизайн

Нужно улучшить существующий дизайн в соответствии с рекомендациями дизайнера

https://www.facebook.com/photo.php?fbid=455241214536202&set=t.100001853387763&type=3&theater

Страничка с графом:

Alt text

Комментарии:

  • На рисунке "Следующие 20 результатов" обозначены черным цветом -- нужно оставить как есть в виде ссылки.
  • На рисунке в пункте "Показать как" должно быть все наоборот -- серым цветом активное значение "граф", в виде голубой ссылки "изображения". То же самое касается пунктов "Вторичные связи" и "Пиктограммы".
  • Пункты "Вторичные связи" и "Пиктограммы" видны только при "Показать как = граф"

Страничка с изображениями

Становится активной при "Показать как = изображения". При этом адрес serelex.it-claim.ru/images/ сохраняется.

Alt text

*Страничка Скачать *

На страничке скачать содержится часть материала из текущей странички "О системе" -- пункты "Исходный код системы" и "Serelex для Windows 8 и Windows Phone"

Страничка О системе

На страничке скачать содержится материал из текущей странички "О системе" кроме пунктов "Исходный код системы" и "Serelex для Windows 8 и Windows Phone"

Страничка Контакты

По всем вопросам обращайтесь к Александру Панченко (мой адрес на @gmail.com) или Павлу Романову (твой адрес на gmail). Сделай адреса почты в виде картинки чтобы не шел спам.

Добавить описание моделей

Добавление описание моделей

Описание по полю alias в ./i18n/(ru|en).json:
"models": {
"norm60-corpus-all": "norm60-corpus-all desc",
"pairs-all-raw-sort": "pairs-all-raw-sort desc",
"norm31": "norm31 desc",
"norm51-corpus": "norm51-corpus desc",
"norm42": "norm42 desc",
"raw-pukwac": "raw-pukwac desc",
"raw-wacky": "raw-wacky desc",
"cos-mknn-5-327167": "cos-mknn-5-327167 desc",
"overlap-mknn-5-32716": "overlap-mknn-5-32716 desc",
"overlap-mknn-10-327167": "overlap-mknn-10-327167 desc",
"overlap-mknn-20-327167": "overlap-mknn-20-327167 desc",
"overlap-mknn-50-327167": "overlap-mknn-50-327167 desc"
}

Лемматизация для разных языков

Проблема

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

Решение

Нужно добавить в базе возможность в базе хранить информацию о лемме (метку "en", "fr", "ru" и т.п.). При этом, алгоритм лемматизации запросов должен использовать леммы, соответствующие текущему языку интерфейса.

Проблема отображения (загрузки) некоторых картинок

Некоторые картинки присутствующие на thenounproject.com не отображаются корректно. SVG файл загружается в браузер, но картинка не отображется.

  • Примеры -- иконки для "cherry" и "train"
  • Если сохранить локально tran.svg/cherry.svg то его невозможно открыть в редакторе (к примеру inkscape). Похоже этот файл был поврежден при загрузке с thenounproject.com. При этом размер файла не нулевой.
  • Данный баг происходит и в хроме и в файрфоксе.

Chrome:
My image

Firefox:
My image

Chrome:
My image

Firefox:
My image

Firefox:
My image

Доработки по графовому интерфейсу

Мотивация

Доводка некоторых элементов графового интерфейса. Если ты думаешь что что-нибудь нужно сделать по-другому опиши почему и как лучше.

Реализация

  1. Сейчас пробел между листом результатов и графом результатов все еще слишком большой. Особенно неудобно это может быть для пользователей с маленькими диалоналями и/или разрешением .

Alt text
2. В новой версии ты сделал перенос подсказки на две строки.

System finds semantically related words.
For example, animal

Измени как было раньше -- так лучше в силу того что пользователю не нужно переводить взгляд на новую строку -- это более быстро и естественно. Опять же визуально не создается такого нагромождения под поисковой строкой.
3. Включи по умолчанию режим с вторичными связями на основной (main) страничке. Мне кажется (и я не одинок в этом мнении) что это одна из самых интересных и оригинальных фич системы... Предлагаю так же сделать следующие изменения чтобы сделать графовый интерфейс более читабельным и вообще user-friendly:

  • Добавить кнопку рядом с "По-русски" выключающую вторичные связи для тех кому они не нравятся (название Hide Secondary Links/ Show Secondary Links)
  • При нажатии (клик) на узел он тоже становиться черным и полужирным -- как и изначальный запрос -- чтобы было понятно что этот узел активирован. Действительно при нажатии на узел к основному запросу добавляется и этот узел, т.е. результат эквивалентен запросу из этих двух слов.
  • Дуги от кликнутого узла отображаются тем же цветом (очень светло серым) что и все остальные вторичные дуги -- для лучшей читаемости результата.
  • При наведении на любой узел все дуги которые ведут от него к другим узлам подсвечиваются красным цветом, как и сами узлы.

Картинки в определениях

Сейчас определения берется из википедии, картинки беруться из гугла.

Можно отображать дополнительно рядом с определением и картинку из Википедии. Пожалуй самый простой способ делать это -- с помощью DBpedia в формате Linked Open Data. Например

http://dbpedia.org/page/Linux

Нужно искать атрибуты

dbpedia-owl:thumbnail и dbpprop:hasPhotoCollection

Например для Linux:

dbpedia-owl:thumbnail = http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/200px-Tux.svg.png

а для Strawberry (http://dbpedia.org/page/Garden_strawberry)

dbpprop:hasPhotoCollection = http://www4.wiwiss.fu-berlin.de/flickrwrappr/photos/Garden_strawberry

Внимание: URL чуствителен к регистру (должен начинаться с большой буквы), например ничего не найдено для

http://dbpedia.org/page/linux

Картинки из атрибута hasCollection беруться из Flick через вот этот враппер: http://wifo5-03.informatik.uni-mannheim.de/flickrwrappr/

Например

http://wifo5-03.informatik.uni-mannheim.de/flickrwrappr/photos/Red_Bull

Подсказки на французском языке

Проблема

Сейчас при поиске на французском предлагаются подсказки на английском языке.

Решение

Нужно загрузить частоты французских слов. Отображать подсказки следует в зависимости от активного языка в интерфейсе.

Запросы с ошибками

Мотивация

Многие запросы пользователей будут содержать ошибки из-за опечаток или из-за того что пользователь не знает как правильно написать (иностранное) слово. Желательно чтобы система могла отвечать и на такие неправильно сформулированные запросы. Для этого следует автоматически исправлять незначительные ошибки и предлагать на выбор наиболее близкие запросы в случае сильных ошибок. Это позволит системе отвечать на значительно большее количество запросов чем количество слов в лексиконе.

Реализация

Реализация простого метода исправления ошибок основана на расстоянии Левенштейна [1] между запросом (ответ на который не найден) и всеми словами в базе. Находяться слова которые имеют расстояние Левенштейна 1, 2 или 3 с запросом. Пользователю предлагается список из 2-5 слов с минимальным расстоянием.

Сложность реализации заключается в быстром вычислении расстояния между произвольной строкой и лексиконом из ~500.000 слов в базе. Я вижу несколько возможных реализаций. Предлагаю обсудить каждый из вариантов:

Вариант 1-- суффиксное дерево

Можно использовать суффиксное дерево как описано здесь http://stevehanov.ca/blog/index.php?id=114 или его улучшенный вариант как описано здесь http://stevehanov.ca/blog/index.php?id=115. Данный метод позволяет достаточно быстро найти слова с расстоянием Левенштейна 1. Ниже -- данные для словаря из 736480 слов (1,2,3,4 -- расстояние):

wordss
1: 0.0441308 s
2: 0.432341 s
3: 1.67618 s
4: 3.8026 s
wordssss
1: 0.0559099 s
2: 0.527886 s
3: 2.05063 s
4: 4.63594 s
vehiclee
1: 0.0500319 s
2: 0.523845 s
3: 2.10965 s
4: 4.70797 s
vehikle
1: 0.046864 s
2: 0.462254 s
3: 1.8697 s
4: 4.26858 s
crums
1: 0.039803 s
2: 0.37783 s
3: 1.48961 s
4: 3.38001 s
stuff
1: 0.0442381 s
2: 0.381701 s
3: 1.45479 s
4: 3.24301 s
romaa
1: 0.045455 s
2: 0.420157 s
3: 1.65054 s
4: 3.65738 s
oma
1: 0.0351961 s
2: 0.301008 s
3: 1.18484 s
4: 2.69824 s
kola
1: 0.0490651 s
2: 0.349479 s
3: 1.39279 s
4: 3.14407 s

Недостаток данного подхода

  • долгое время нахождения для расстояний от 2х и более (2 все еще приемлемо)
  • большое количество оперативной памяти (1.5-2.5 Гб)
  • необходимость в отдельном процессе и в синхронизации
  • длительное время загрузки словаря

Вариант 2 -- поиск в монго

Идеальный вариант заключался бы приблизительном поиске напрямую в коллекции words в монго.
Попробуй посмотреть можно ли так сделать? Может быть с помощью каких нибудь специальных расширений для fuzzy string matсhing?

Вариант 3 -- поиск в монго перебором

Этот вариант заключается в следующем.

  • Для входного запроса генерируется множество строк с заданным расстоянием левенштейна. Например, для строки windowss будут сгенерированы варианты вроде
    • aindowss
    • bindowss
    • windows
    • windowsss
    • ....
  • Для операций удаления, вставки и перестановки
  • Только для расстояния 1
  • Далее мы проверяем содержит ли база каждую из данных строк в базе обычным запросом
  • Если совпадение найдено -- возвращаем его пользователю

Посмотри сколько времени занимает в среднем сделать 10, 100, 1000 подобных обращений к коллекции words в монго. Будет ли это время сопоставимо с вариантом 1?

[1] http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0

Visulex

Мотивация

Добавить в веб интерфейс визуализацию результатов аналогичную клиенту под Windows 8. Похоже такой вид визуализации еще более удачный и оригинальный чем граф. Картинки можно потом будет интегрировать и в узлы графа.

Примеры удачной визуализации в настольном приложении:

Alt text
Alt text
Alt text
Alt text
Alt text
Alt text

Реализация

Предлагаю интегрировать данный способ визуализации следующим образом:

Alt text

Таким образом:

  • (а): Шапка с социальными сетями остается неизменной. Панель с кнопками становится контексно-зависимой. Если пользователь на странице graph (сейчас она называется main) тогда кнопки как сейчас "По русски | Show Images | Hide Secondary Links". Если на странице images тогда только "По русски".

  • (b): Меню навигации содержит три ссылки -- graph, images, about (на картинке graph=text). По сравнению с тем что есть сейчас:

    • main --> graph
    • advanced --> удалить ссылку (добавим на страницу about). Эта страница слишком сложная, непонятная и нагруженная для пользователя. Основная ее задача -- отладка, внутреннее использование.
    • images --> новая страница на которой результаты поиска визуализируются в виде картинок.
    • Меню лучше сделать контекстно-зависимым -- если пользователь на странице images тогда не следует отображать ссылку на images чтобы было понятно что он уже на этой странице (аналогично со страницам graph и about).
    • Cтраница graph -- страница по умолчанию.
  • (c): Поисковая строка -- без изменений. Подказки на странице images -- в одну строку.

  • (d): Результаты поиска -- подобно тому как сделаны в metro-интерфейсе клиента на Windows 8.

    • Каждая картинка квадратная.
    • Формат -- 5_4 картинок (по-горизонтали_по-вертикали).
    • Размер примерно тоже соотв. клиенту на Win8.
    • Отображение -- слева направо. Т.е. 20 первых результатов будут расположены следующим образом:
    1 2 3 4 5
    6 7 8 9 10  
    11 12 13 14 15
    16 17 18 19 20 
    
    • Подпись -- приблизительно как в клиенте на Win8. Полупрозначная темная полоска внизу изображения с надписью "N. Word" достаточно крупным белым полужирным шрифтом. К примеру, "1. Apple", "2. Pear", "3. Cherry" и т.п.
  • (e): Кнопка дополнительных результатов добавляет на страницу следующие 20 картинок.

Предлагаю использовать для начала сервис http://jpg.to/. Не уверен что он выдержит нагрузку на сервере -- у него вроде бы ограничения на один ip адрес, но для первой версии думаю подойдет. Альтернативы -- фликр API, либо загрузка на сервер из jpg.to или фликра всех нужных нам картинок.

Визуализация списка результатов в виде графа

Мотивация

Сейчас визуализация результатов поиска производится в виде упорядоченного списка слов. Следует предложить так же пользователю альтернанивный способ визаулизации результатов -- в виде интерактивного графа. Это должно предоставить пользователю более быстро и удобно исследовать связи между словами, формулировать запросы, переходить по связанным словам и т.п.

Данный вид интерфейса в был реализован в некоторых проектах и показал свою эффективность при визуализации лексико-семантических сетей:

Реализация

Общие требования

На данном этапе задача состоит в реализации простейшей версии такого графового интерфейса.
Должена производится визуализация результата запроса в виде графа. В центре графа отображается запрос, дугами обозначаются связанные слова. При нажатии на узел производится запрос по этому узлу, этот узел становиться центральным
(например как здесь http://thejit.org/static/v20/Jit/Examples/Hypertree/example1.html). Узлы которые не являются результатами по новому запросу удаляются. Стандартные результаты в виде списка слов тоже обновляются по нажатию на узел графа. Обратное тоже верно -- при нажатии на слово из стандартного списка граф обновляется.

Это должно выглядеть примерно так:
alt text

Параметры визуализации

  • Количество визуализируемых результатов, 20 по умолчанию
  • Длина дуги между запросом и результатом
    • единичная по умолчанию
      alt text
    • пропорциональна рангу слова в результатах
      alt text
    • пропорциональна мере семантической связности слов (для первого слова единична, для второго 1*w_1/w_2, где w_i это сила семантической связи с i-м результатом и т.п.)
  • Отображение связей между результатами
    • не отображаются по умолчанию
      alt text
    • отображаются. отображаются только связи между первыми 20 результатами (banana--papaya). связь между banana--jackfruit может существовать но она не в топ 20 по запросу banana.
      alt text
  • Отображение дуг
    • отображаются по умолчанию
      alt text
    • не отображаются
      alt text
  • алгоритм расположения узлов

Детали реализации

Примерно должно быть понятно из картинок.

  • фон белый
  • рамки вокруг канвы нет
  • запрос в центре не является ссылкой, цвет -- черный
  • результаты запроса -- гиперссылки голубого цвета
  • шрифт по возможности такой же как и на остальной странице (вкл. его размер)
  • цвет дуг от запроса к результатам -- черный
  • цвет дуг от результата к результатам -- серый
  • узел -- просто слово без рамки, кружка и т.п.

Варианты реализации

Используется библиотека на JavaScript.

Предложение

Начать с thejit.org -- попробовать 4 данных варианта:

http://thejit.org/static/v20/Jit/Examples/RGraph/example1.html
http://thejit.org/static/v20/Jit/Examples/ForceDirected/example1.html
http://thejit.org/static/v20/Jit/Examples/Hypertree/example1.html
http://thejit.org/static/v20/Jit/Examples/Spacetree/example1.html

Вопросы

  1. Стоит ли начинать с thejit.org. Почему да или нет?
  2. Удовлетворяет ли thejit.org всем требованиям?
  3. Сложно ли будет адоптировать thejit.org для наших требований?
  4. Какие альтернативные варианты наиболее перспективны (из перечисленных или любых других) и почему?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.