pomanob / lsse Goto Github PK
View Code? Open in Web Editor NEWSerelex - lexico-semantic search engine
Serelex - lexico-semantic search engine
Сейчас на франзуском показываются примеры поиска на английском, такие как python и blueberry. Однако следует в примерах "показать сервис с лучшей стороны", т.е. дать примеры наиболее популярных запросов.
Нужно для каждого языка хранить отдельный список примеров. Во французской версии нужно включить следующие "удачные" запросы:
Добавление дополнительной информации о выбранной базе на странице расширенного поиска.
Всплывающая подсказка по каждому из методов выглядит сейчас
"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 из базы в силу того что они показывают нерелевантные результаты
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 файле будет слишком медленным если его не проиндексировать.
Вот несколько примеров работы:
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)
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"
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)
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)
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)
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)
Нужно написать скрипт, который бы сохранил локально все картинки соответствующие словам в базе данных серелекса. Далее данные слова нужно сохранить в папке и получать к ним доступ как к статическим файлам с соответствующими именам. При этом, логика отображения картинки должна быть такой:
Необходимо доделать несколько элементов дизайна, чтобы интерфейс смотрелся законченным.
Сейчас пользователь получат в результате множество связанных слов. Преимущество такого подхода в том что пользователь может не явно изучать смысл новых слов (изучая их ближайших соседей).
Однако во многих случаях желателено иметь доступ и к явному описанию смысла слова. В особенности это становится актуальным когда система используется для изучения языка.
Пример:
На данном этапе задача заключается в создании отдельной тестовой странички с дополнительной колонкой справа как на приведенном выше картинке.
На данной страничке должна отображатся:
Вирусное распространение информации о сервисе
Добавить кнопочки лайк формата фейбука, вконтакте, гугл+ и ретвита на главную страницу.
Система предоставляет достаточно необычный вид поиска. Пользователю изначально может быть не понятно что система может делать а что не может. Необходимо проилюстрировать работу системы на нескольких (удачных) запросах -- примерах использования.
Под строкой поиска нужно добавить пример запроса:
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.
Недостатки:
Цель данного улучшения -- использовать картинки из поиска гугла (jpg.to) в разделе "Граф". Это нужно чтобы:
В новой версии, по нажанию кнопки Вкл.картинки
Насколько я понимаю, сейчас запросы из 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.
Если у пользователя большой экран на котором без скроллов показываются все 20 первых картинок становится не очевидным как отобразить следующие 20 результатов. Единственный способ сделать это -- увеличить страницу так чтобы все 20 картинок не влезали и затем сделать скролл вниз.
Лексикон используемый в системе в данный момент ограничен -- 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
Добавление на страничку advanced экспериментальной функции визуализации списка результатов с помощью свободно распространяемых иконок с сайта http://thenounproject.com/
1. dog 0.99222222
2. cat 0.69222222
Почему то в ветке visualization не работает лемматизация поискового запроса. Ты не мог бы посмотреть в чем дело?
К примеру
algorithms
engineers
dogs
cats
выдает
Nothing found!
Андрей Юрьевич порекомендовал в логе запроса кроме собственно запроса и того на что было кликнуто сохранять еще и какой-нибудь уникальный идентификатор пользователя и его сессии. Это потом можно будет использовать для более тонкого извлечения информации из логов. Оформляю этот как тикет на улучшение.
Сейчас дополнительные результаты можно увидеть с помощью кнопочки Show all results...
Недостатки:
Нужно добавить в сервис поддержку формата OpenSearch
Это позволит унифицировать поддержку подсказок и внедрить эту возможность в контракт поиска Windows 8
Сейчас картинки из thenounproject.com включены на странице расширенного поиска и отключены на главной странице. В силу малого покрытия лексикона, большинству пользователей не нужно показывать картинки. Действительно, большинство слов не может быть визуализировано. Однако следует сделать возможным показ картинок на главной странице тем пользователям которые хотят включить эту настройку.
Добавить ссылку рядом с ссылкой для переключения языков для включения и выключения картинок.
Нужно улучшить существующий дизайн в соответствии с рекомендациями дизайнера
https://www.facebook.com/photo.php?fbid=455241214536202&set=t.100001853387763&type=3&theater
Страничка с графом:
Комментарии:
Страничка с изображениями
Становится активной при "Показать как = изображения". При этом адрес serelex.it-claim.ru/images/ сохраняется.
*Страничка Скачать *
На страничке скачать содержится часть материала из текущей странички "О системе" -- пункты "Исходный код системы" и "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 файл загружается в браузер, но картинка не отображется.
Нужно сделать картинки в графе включенными по умолчанию.
Доводка некоторых элементов графового интерфейса. Если ты думаешь что что-нибудь нужно сделать по-другому опиши почему и как лучше.
2. В новой версии ты сделал перенос подсказки на две строки.
System finds semantically related words.
For example, animal
Измени как было раньше -- так лучше в силу того что пользователю не нужно переводить взгляд на новую строку -- это более быстро и естественно. Опять же визуально не создается такого нагромождения под поисковой строкой.
3. Включи по умолчанию режим с вторичными связями на основной (main) страничке. Мне кажется (и я не одинок в этом мнении) что это одна из самых интересных и оригинальных фич системы... Предлагаю так же сделать следующие изменения чтобы сделать графовый интерфейс более читабельным и вообще user-friendly:
Сейчас определения берется из википедии, картинки беруться из гугла.
Можно отображать дополнительно рядом с определением и картинку из Википедии. Пожалуй самый простой способ делать это -- с помощью 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 -- поиск в монго
Идеальный вариант заключался бы приблизительном поиске напрямую в коллекции words в монго.
Попробуй посмотреть можно ли так сделать? Может быть с помощью каких нибудь специальных расширений для fuzzy string matсhing?
Вариант 3 -- поиск в монго перебором
Этот вариант заключается в следующем.
Посмотри сколько времени занимает в среднем сделать 10, 100, 1000 подобных обращений к коллекции words в монго. Будет ли это время сопоставимо с вариантом 1?
Сейчас для слов, у которых на вики есть редирект на другую страницу, не показываются картинки
Пример:
Добавить в веб интерфейс визуализацию результатов аналогичную клиенту под Windows 8. Похоже такой вид визуализации еще более удачный и оригинальный чем граф. Картинки можно потом будет интегрировать и в узлы графа.
Примеры удачной визуализации в настольном приложении:
Предлагаю интегрировать данный способ визуализации следующим образом:
Таким образом:
(а): Шапка с социальными сетями остается неизменной. Панель с кнопками становится контексно-зависимой. Если пользователь на странице graph (сейчас она называется main) тогда кнопки как сейчас "По русски | Show Images | Hide Secondary Links". Если на странице images тогда только "По русски".
(b): Меню навигации содержит три ссылки -- graph, images, about (на картинке graph=text). По сравнению с тем что есть сейчас:
(c): Поисковая строка -- без изменений. Подказки на странице images -- в одну строку.
(d): Результаты поиска -- подобно тому как сделаны в metro-интерфейсе клиента на Windows 8.
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
(e): Кнопка дополнительных результатов добавляет на страницу следующие 20 картинок.
Предлагаю использовать для начала сервис http://jpg.to/. Не уверен что он выдержит нагрузку на сервере -- у него вроде бы ограничения на один ip адрес, но для первой версии думаю подойдет. Альтернативы -- фликр API, либо загрузка на сервер из jpg.to или фликра всех нужных нам картинок.
Сейчас визуализация результатов поиска производится в виде упорядоченного списка слов. Следует предложить так же пользователю альтернанивный способ визаулизации результатов -- в виде интерактивного графа. Это должно предоставить пользователю более быстро и удобно исследовать связи между словами, формулировать запросы, переходить по связанным словам и т.п.
Данный вид интерфейса в был реализован в некоторых проектах и показал свою эффективность при визуализации лексико-семантических сетей:
Общие требования
На данном этапе задача состоит в реализации простейшей версии такого графового интерфейса.
Должена производится визуализация результата запроса в виде графа. В центре графа отображается запрос, дугами обозначаются связанные слова. При нажатии на узел производится запрос по этому узлу, этот узел становиться центральным
(например как здесь http://thejit.org/static/v20/Jit/Examples/Hypertree/example1.html). Узлы которые не являются результатами по новому запросу удаляются. Стандартные результаты в виде списка слов тоже обновляются по нажатию на узел графа. Обратное тоже верно -- при нажатии на слово из стандартного списка граф обновляется.
Это должно выглядеть примерно так:
Параметры визуализации
Детали реализации
Примерно должно быть понятно из картинок.
Варианты реализации
Используется библиотека на 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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.