Prolog 파일에서 을보고 WordNet 데이터를 이해하는 것이 가장 쉽습니다. 그들은 여기에 설명되어 있습니다 :
http://wordnet.princeton.edu/wordnet/man/prologdb.5WN.html
워드 넷 용어가 synset을에 그룹입니다. synset은 최대 동의어 집합입니다. Synsets에는 의미 키 관계로 을 사용할 수 있도록 기본 키가 있습니다.
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 용어는 단어의 시퀀스입니다. 다음과 같이 그래서 당신은 단어에 대한이 워드 넷의 용어 를 검색 할 수 있습니다
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은 또한 유용 할 수있는 어휘 관계를 일부 표시합니다 ( ).
하지만 두 Prolog 쿼리는 매우 효율적이지 않습니다. 문제는 단어 색인 생성이 부족하다는 것입니다. Java 구현은 물론 더 나은 것을 구현할 수 있습니다. 그냥 따라 뭔가 상상하십시오 색인 지시자에 의해 일부 프롤로그가 동일한 작업을 수행 할 수
class Synset {
static Hashtable<Integer,Synset> synset_access;
static Hashtable<String,Vector<Synset>> term_access;
}
을, 가능한 는 술어에 대해 여러 인덱스에 인수를 프롤로그 시스템에 지시하는 것입니다.
웹 서비스를 구현하는 것이 어렵지 않아야합니다 (자바 또는 프롤로그에서 ). 많은 Prologs 시스템은 웹 서버에 Prolog 프로그램 및 Java 챔피온 서블릿을 쉽게 임베드 할 수 있습니다.
웹 서버를 지원 프롤로그의 목록은 여기에서 찾을 수 있습니다 : 링크에 대한
http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations#Operating_system_and_Web-related_features
안부
이 정보를 제공해 주셔서 감사합니다. 매우 도움이됩니다. 빠른 질문, 아직 100 % 확실하지는 않지만 가능한 경우 '낙담'과 같은 단어를 프로그램 방식으로 연결하는 가장 좋은 방법은 무엇일까요? – NightWolf
"링크"및 프로그래밍 언어에 따라 다릅니다. WordNet에는 의미와 어휘의 두 가지 종류의 "링크"가 있습니다. Prolog를 통해 의미 론적 링크의 경우 사실 링크 (synset_id1, synset_id2)를 주장합니다. 어휘 링크의 경우 사실 링크 (synset_id1, word_num1, synset_id2, word_num2)를 지정합니다. Java에서는 적절한 데이터 구조/서비스를 사용합니다. 또는 두 단어를 동일한 synset에 넣거나 함께 결합 된 새 synset을 만듭니다. 귀하의 "링크"가 동일한 의미를 나타내야 할 경우를 대비하여 나중에 적용됩니다. –