PomanoB / lsse

Serelex - lexico-semantic search engine
19 stars 6 forks source link

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

Closed alexanderpanchenko closed 11 years ago

alexanderpanchenko commented 11 years ago

Мотивация

Сейчас отображаются определения слова -- это позволяет пользователю лучше понять смысл запроса. Дополнительно можно отображать и множество возможных толкований слова. Многие слова, такие как 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.

PomanoB commented 11 years ago

Ну вроде как работает, но только не с москвой( DBPedia почему-то не даёт определения других смыслов слова "Москва",

Тут есть - http://dbpedia.org/page/Moscow,_Indiana А в версии для API - http://dbpedia.org/data/Moscow,_Indiana.json - уже нету

А вот со словом "Linux" всё ок

PomanoB commented 11 years ago

Виртуалка на trytoimagine перезагружается по требованию винды( Поднимется через пару минут

PomanoB commented 11 years ago

Готово

alexanderpanchenko commented 11 years ago

Накатил, вроде бы работает. Быбо бы здорово упорядочить по значимости смыслы -- к примеру сначала apple (яблоко), затем apple (компьютер) и затем все остальные редикие смыслы.... Идеи?

alexanderpanchenko commented 11 years ago

Ты можешь попробовать отранжировать смысли по длине текста соответствующей статьи? Я посмотрел -- это должно работать.

PomanoB commented 11 years ago

Да, по длине хотя бы упорядоченно будет, сейчас сделаю Вариант по смыслу - пытаться искать связь слова в скобках с тем словом, к которому оно является вариантом смысла О_о Не знаю правда, насколько это будет оправдано))

alexanderpanchenko commented 11 years ago

http://en.wikipedia.org/wiki/Apple_(disambiguation)

http://en.wikipedia.org/wiki/Apple >

http://en.wikipedia.org/wiki/Apple_Inc. >

http://en.wikipedia.org/wiki/Apple_Bank

alexanderpanchenko commented 11 years ago

Думаю нужно начать с длины -- это самое простое.

alexanderpanchenko commented 11 years ago

чего то не то

должно быть apple i < applie ii < apple ii < apple inc

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

PomanoB commented 11 years ago

Не понял что-то 2013-03-24_18-29-07 Что не так?

alexanderpanchenko commented 11 years ago

Должно быть Apple Apple inc .... Apple 1

Посмотри в википедии длину этих статей

PomanoB commented 11 years ago

А, извиняюсь, я не так прочитал первоначальное предложение, думал по длине самого названия а не статьи.

А для этого придётся запрашивать все статьи, а их может быть много, значительно скажется на времени ответа...

alexanderpanchenko commented 11 years ago

Согласен. Нужно значит загружать асинхронно , как изображения. (показывать список когда загрузятся весь список). Ведь это дополнительная фича на странице.

PomanoB commented 11 years ago

Ок, я сделаю, но, если честно, мне не кажется это хорошей идеей)

alexanderpanchenko commented 11 years ago

А как ты бы сделал?

PomanoB commented 11 years ago

Мне кажется по длине вполне упорялоченно

alexanderpanchenko commented 11 years ago

Я думаю что их нужно все же значения отсортировать по значимости. Кажется что длина статьи хорошо отражает эту значимость.

alexanderpanchenko commented 11 years ago

Но ведь так не по смыслу и первые три значения которые показываются могут иметь не распространенный смысл, вроде apple 1, который мало кого интересует.

PomanoB commented 11 years ago

Да, был не прав, какой-то смысл тут точно проглядывается)

alexanderpanchenko commented 11 years ago

Да, мне кажется так лучше. Но тоже не идеально. Изначально у меня была идея ранжировать их по PageRank-y. Допустим, у меня в хроме есть плагин который показывает ранг страницы. Так вот

http://en.wikipedia.org/wiki/Apple_Inc. = 7 http://en.wikipedia.org/wiki/Apple = 6 http://en.wikipedia.org/wiki/Apple_Corps = 5 http://en.wikipedia.org/wiki/The_Apple_(1980_film) = 4

Это было бы более правильнее чем просто длина, но я не знаю хорошего API который определяет PageRank страницы. Можно еще конечно одновременно учитывать длину и PageRank, но скорее всего это не нужно...

alexanderpanchenko commented 11 years ago

Попробуй вот это...

https://nodejsmodules.org/pkg/pagerank

PomanoB commented 11 years ago

Сейчас уже не успею, выходить на электричку через 20 минут ( Только если там уже.

И, только что попробовав запустить монго на ноутбуке - обнаружил что не хватает памяти( У него всего 2 Гб

alexanderpanchenko commented 11 years ago

У нас вечером демо -- целый день будет. Но уже с длиной хорошо на самом деле.

alexanderpanchenko commented 11 years ago

Посмотрел еще раз -- нужно думаю делать так. Сначала ранжировать по PageRank, затем по длине. PageRank выдает часто много одинаковых значений (вроде 6, 5, 4 и т.п.).

alexanderpanchenko commented 11 years ago

Запустим на моем тогда. Бери файлы которые нужно просто. У меня 4 гб.

alexanderpanchenko commented 11 years ago

Заметил еще одну вешь которую нужно попроавить. Допустим пользователь нажал на слово из Disambiguates. После этого появится окошко с определением. Однако после того как введен новый запрос окошко от прошлого запроса остается. Окошко должно исчезать и при любом клике на область страницы за пределами него.