Проще понять данные WordNet, посмотрев файлы Prolog.Они описаны здесь:
http://wordnet.princeton.edu/wordnet/man/prologdb.5WN.html
Термины WordNet сгруппированы в наборы.Синсет - это максимальный набор синонимов.Синтезы имеют первичный ключ, чтобы их можно было использовать в семантических отношениях.
Итак, отвечая на ваш первый вопрос, вы можете перечислить различные значения и соответствующие синонимы слова следующим образом:
Input X: Term
Output Y: Sense
Output L: Synonyms in this Sense
s_helper(X,Y) :- s(X,_,Y,_,_,_).
?- setof(H,(s_helper(Y,X),s_helper(Y,H)),L).
Пример:
?- setof(H,(s_helper(Y,'discouraged'),s_helper(Y,H),L).
Y = 301664880,
L = [demoralised, demoralized, discouraged, disheartened] ;
Y = 301992418,
L = [discouraged] ;
No
Для второгочасть вашего вопроса, термины WordNet представляют собой последовательности слов.Таким образом, вы можете искать в этих терминах WordNet слова следующим образом:
Input X: Word
Output Y: Term
s_helper(X) :- s(_,_,X,_,_,_).
word_in_term(X,Y) :- atom_concat(X,' ',H), sub_atom(Y,0,_,_,H).
word_in_term(X,Y) :- atom_concat(' ',X,H), atom_concat(H,' ',J), sub_atom(Y,_,_,_,J).
word_in_term(X,Y) :- atom_concat(' ',X,H), sub_atom(Y,_,_,0,H).
?- s_helper(Y), word_in_term(X,Y).
Пример:
?- s_helper(X), word_in_term('beat',X).
X = 'beat generation' ;
X = 'beat in' ;
X = 'beat about' ;
X = 'beat around the bush' ;
X = 'beat out' ;
X = 'beat up' ;
X = 'beat up' ;
X = 'beat back' ;
X = 'beat out' ;
X = 'beat down' ;
X = 'beat a retreat' ;
X = 'beat down' ;
X = 'beat down' ;
No
Это даст вам потенциальные n-граммы, но не так много морфологических вариаций.WordNet также демонстрирует некоторые лексические отношения, которые могут быть полезны.
Но оба запроса Пролога, которые я дал, не очень эффективны.Проблема в том, что не хватает индексации слов.Реализация Java может, конечно, реализовать что-то лучшее.Просто представьте себе что-то вроде:
class Synset {
static Hashtable<Integer,Synset> synset_access;
static Hashtable<String,Vector<Synset>> term_access;
}
Некоторые Prolog могут сделать то же самое, с помощью директивы индексации можно указать системе Prolog индексировать несколько аргументов для предиката.
Установкавеб-служба не должна быть такой сложной, как на Java, так и на прологе.Многие системы Prologs легко позволяют встраивать программы Prolog в веб-серверы и сервлеты Java Champions.
Список Prologs, поддерживающих веб-серверы, можно найти здесь:
http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations#Operating_system_and_Web-related_features
С наилучшими пожеланиями