java - Word Net - Word Synonyms & related word constructs - Java 或 Python

标签 java python nlp text-mining wordnet

我希望使用 WordNet 从一组基本术语中寻找相似术语的集合。

例如,单词'discouraged' - 潜在的同义词可能是:daunted, glum, deterred, pessimistic

我还想识别潜在的二元语法,例如; 击败、推迟、屈服

如何使用 Java 或 Python 提取这些信息?是否有允许此类查询的托管 WordNet 数据库/Web 界面?

谢谢!

最佳答案

通过查看最容易理解 WordNet 数据 在 Prolog 文件中。它们记录在此处:

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

WordNet 术语被分组为同义词集。同义词集是最大的 同义词集。 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 术语是 单词序列。所以你可以搜索这个 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-gram,但不会太多 形态变异。 WordNet 也展示了一些 词汇关系,这可能是有用的。

但是我给出的两个 Prolog 查询都不是很有效。 问题是缺少一些单词索引。 Java 实现当然可以实现更好的东西。 想象一下:

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

一些 Prolog 可以通过索引指令来做同样的事情,它是 可以指示 Prolog 系统对多个索引 谓词的参数。

建立网络服务也不应该那么困难 在 Java 或 Prolog 中。许多 Prologs 系统很容易允许嵌入 Web 服务器中的 Prolog 程序和 Java 冠军 servlet。

可在此处找到支持 Web 服务器的 Prolog 列表:

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

最好的问候

关于java - Word Net - Word Synonyms & related word constructs - Java 或 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984264/

相关文章:

python - 如何将word2vec转为glove格式

java - Ebean:在 RawSql 中为 setParameter() 设置 List<String>

java - Android 中启动然后暂停动画

java - 无法在 ArrayList 中找到对象的方法

python - 缩放/旋转成对平方欧氏距离的矢量化计算

python - 对 pandas DataFrame 中的空值使用 None 而不是 np.nan

python - 你能用Python来乘以单词吗?

java - 在异常子句中递归调用函数

python - 如何使用 while 循环创建乘法表?

java - CoreNLP : Parsing of sentence failed, 可能是因为内存不足