wordnetword同义词与相关的词构造Java或Python

2024-09-26 22:49:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用WordNet从一组基本术语中寻找一组相似的术语。在

例如,单词“不鼓励”潜在的同义词可以是:daunted, glum, deterred, pessimistic。在

我还想识别潜在的双元组,比如;beat down, put off, caved in

如何使用Java或Python提取这些信息?是否有任何托管的WordNet数据库/web接口允许这样的查询?在

谢谢!在


Tags: inputjava单词wordnetdown术语同义词
3条回答

这是两个不同的问题。在

1)Wordnet和python。使用NLTK,它有一个很好的interface to wordnet。你可以自己写一些东西,但老实说,为什么让生活变得困难?Lingpipe可能还内置了一些东西,但NLTK更容易使用。我认为nltk只是下载了一个ntlk数据库,但我很确定有api可以与wordnet对话。在

2)在nltk follow this tutorial中获取bigrams。一般来说,你将文本标记化,然后通过向前和向后看,遍历句子,得到每个单词的n个单词。在

作为NLTK的替代,您可以使用可用的wordnetsparql端点的one来检索此类信息。查询示例:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wordnet: <http://www.w3.org/2006/03/wn/wn20/schema/>

SELECT DISTINCT ?label {
  ?input_word a wordnet:WordSense;
     rdfs:label ?input_label.
  FILTER (?input_label = 'run')
  ?synset wordnet:containsWordSense ?input_word.
  ?synset wordnet:containsWordSense ?synonym.
  ?synonym rdfs:label ?label.
} LIMIT 100

在Java世界中,可以使用Jena和{a3}框架。在

通过查看WordNet数据最容易理解 在序言文件。记录如下:

http://wordnet.princeton.edu/wordnet/man/prologdb.5WN.html

WordNet术语被分组成语法集。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).  

示例:

^{pr2}$

在问题的第二部分,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查询都不是很有效。 问题是缺乏一些单词索引。爪哇 实现当然可以实现更好的东西。 想象一下:

class Synset {  
    static Hashtable<Integer,Synset> synset_access;  
    static Hashtable<String,Vector<Synset>> term_access;  
}

有些Prolog也可以这样做,通过一个索引指令 可以指示Prolog系统在多个 谓词的参数。在

建立一个web服务也不难 在Java或Prolog中。许多Prologs系统很容易允许嵌入 web服务器中的Prolog程序,以及Java冠军servlet。在

支持web服务器的Prologs列表可在以下位置找到:

http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementations#Operating_system_and_Web-related_features

谨致问候

相关问题 更多 >

    热门问题