java使用wordnet获取近义词
资料来源:基于WordNet的英文同义词、近义词相似度评估及代码实现
初识WordNet
WordNet是什么
首先,来看WordNet。搜了一下相关介绍:
WordNet是一个由普林斯顿大学认识科学实验室在心理学教授乔治·A·米勒的指导下建立和维护的英语字典。开发工作从1985年开始,从此以后该项目接受了超过300万美元的资助(主要来源于对机器翻译有兴趣的政府机构)。
由于它包含了语义信息,所以有别于通常意义上的字典。WordNet根据词条的意义将它们分组,每一个具有相同意义的字条组称为一个synset(同义词集合)。WordNet为每一个synset提供了简短,概要的定义,并记录不同synset之间的语义关系。
WordNet的开发有两个目的:
它既是一个字典,又是一个辞典,它比单纯的辞典或词典都更加易于使用。
支持自动的文本分析以及人工智能应用。
WordNet内部结构
在WordNet中,名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。(一个多义词将出现在它的每个意思的同义词集合中)。在WordNet的第一版中(标记为1.x),四种不同词性的网络之间并无连接。WordNet的名词网络是第一个发展起来的。
名词网络的主干是蕴涵关系的层次(上位/下位关系),它占据了关系中的将近80%。层次中的最顶层是11个抽象概念,称为基本类别始点(unique beginners),例如实体(entity,“有生命的或无生命的具体存在”),心理特征(psychological feature,“生命有机体的精神上的特征)。名词层次中最深的层次是16个节点。(wikipedia)
通俗地来说,WordNet是一个结构化很好的知识库,它不但包括一般的词典功能,另外还有词的分类信息。目前,基于WordNet的方法相对来说比较成熟,比如路径方法 (lch)、基于信息论方法(res)等。(详见原文参考文献)
安装WordNet
因为我是用的windows,所以讲一下windows的安装方法。
WordNet官方下载地址:http://wordnet.princeton.edu/wordnet/download/current-version/,此处可以选择操作系统对应的版本。
下载下来之后就是普通的安装。
使用WordNet
java可以使用JWI和JAWS提供的接口,这两个项目分别隶属于mit和msu,对应不同的文档和使用方法。
JWI:
下载地址及文档地址:http://projects.csail.mit.edu/jwi/
一下代码可以获得动词go的近义词。
import java.io.File;
import java.io.IOException;
import java.net.URL;import edu.mit.jwi.Dictionary;
import edu.mit.jwi.IDictionary;
import edu.mit.jwi.item.IIndexWord;
import edu.mit.jwi.item.ISynset;
import edu.mit.jwi.item.IWord;
import edu.mit.jwi.item.IWordID;
import edu.mit.jwi.item.POS;public class GetWordSynsetsTest {private static String WORDNET_PATH = "D:\\Programming\\WordNet\\dict";public static void main(String[] args) throws IOException{File wnDir=new File(WORDNET_PATH);URL url=new URL("file", null, WORDNET_PATH);IDictionary dict=new Dictionary(url);dict.open();//打开词典getSynonyms(dict); //testing}public static void getSynonyms(IDictionary dict){// look up first sense of the word "go"//IIndexWord idxWord2 = dict.IIndexWord idxWord =dict.getIndexWord("go", POS.VERB);IWordID wordID = idxWord.getWordIDs().get(0) ; // 1st meaningIWord word = dict.getWord(wordID);ISynset synset = word.getSynset (); //ISynset是一个词的同义词集的接口// iterate over words associated with the synsetfor(IWord w : synset.getWords())System.out.println(w.getLemma());//打印同义词集中的每个同义词}
}
运行结果为:
travel
go
move
locomote
JAWS
下载地址及文档地址:http://lyle.smu.edu/~tspell/jaws/
import edu.smu.tspell.wordnet.Synset;
import edu.smu.tspell.wordnet.WordNetDatabase;public class TestJAWS {private static String WORDNET_PATH = "D:\\Programming\\WordNet\\dict";public static void main(String[] args){String[] arguments = new String[args.length+1];for(int i = 0 ; i <= args.length; i++) {if(i == args.length) {arguments[i] = "fly";}else {arguments[i] = args[i];}}if (arguments.length > 0){//在CODE上查看代码片派生到我的代码片//下面的代码制定wordnet数据库的位置//在CODE上查看代码片派生到我的代码片System.setProperty("wordnet.database.dir", WORDNET_PATH);StringBuffer buffer = new StringBuffer();for (int i = 0; i < arguments.length; i++){buffer.append((i > 0 ? " " : "") + arguments[i]);}String wordForm = buffer.toString();System.out.println(wordForm);WordNetDatabase database = WordNetDatabase.getFileInstance();Synset[] synsets = database.getSynsets(wordForm);if (synsets.length > 0){//在CODE上查看代码片派生到我的代码片//获得得到的同义词System.out.println("The following synsets contain '" +wordForm + "' or a possible base form " +"of that text:");for (int i = 0; i < synsets.length; i++){System.out.println("");String[] wordForms = synsets[i].getWordForms();for (int j = 0; j < wordForms.length; j++){System.out.print((j > 0 ? ", " : "") +wordForms[j]);}System.out.println(": " + synsets[i].getDefinition());}}}}}
运行结果为:
fly
The following synsets contain ‘fly’ or a possible base form of that text:
fly: two-winged insects characterized by active flight
tent-fly, rainfly, fly sheet, fly, tent flap: flap consisting of a piece of canvas that can be drawn back to provide entrance to a tent
fly, fly front: an opening in a garment that is closed by a zipper or by buttons concealed under a fold of cloth
fly, fly ball: (baseball) a hit that flies up in the air
fly: fisherman’s lure consisting of a fishhook decorated to look like an insect
fly, wing: travel through the air; be airborne
fly: move quickly or suddenly
fly, aviate, pilot: fly a plane
fly: transport by aeroplane
fly: cause to fly or float
fly: be dispersed or disseminated
fly: change quickly from one emotional state to another
fly, fell, vanish: pass away rapidly
fly: travel in an airplane
fly: display in the air or cause to float
flee, fly, take flight: run away quickly
fly: travel over (an area of land or sea) in an aircraft
fly: hit a fly
vanish, fly, vaporize: decrease rapidly and disappear
fly: (British informal) not to be deceived or hoodwinked
似乎不是我们所需要的结果,故最后选择JWI的实现。
我觉得这个词库不是很好,尤其是不支持中文,所以觉得效果不好可以自己设计词库。
java使用wordnet获取近义词相关推荐
- ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词
前言 在很多搜索场景中,我们希望能够搜索出搜索词相关的目标,同时也希望能搜索出其近义词相关的目标.例如在商品搜索中,搜索"瓠瓜",也希望能够搜索出"西葫芦",但 ...
- 3.2.2-同义词和近义词
目录 同义词Synonym 处理意义 同义词字典WordNet使用 近义词Near-Syonoym 同义词Synonym 处理意义 一般计算机处理自然语言时,是采用精准匹配. 例如,中文中" ...
- JAVA ik es_安装elasticsearch及中文IK和近义词配置
安装elasticsearch及中文IK和近义词配置 安装java环境 java环境是elasticsearch安装必须的 yum install java-1.8.0-openjdk 安装elast ...
- JAVA程序设计:近义词句子(LeetCode:5110)
给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换. 请你找出所有用近义词替换后的句子,按 字典 ...
- 安装elasticsearch及中文IK和近义词配置
安装elasticsearch及中文IK和近义词配置 安装java环境 java环境是elasticsearch安装必须的 yum install java-1.8.0-openjdk 安装elast ...
- LeetCode 1258. 近义词句子(哈希+并查集+排序+回溯)
文章目录 1. 题目 2. 解题 1. 题目 给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换 ...
- 【Elasticsearch】相关性,近义词匹配,纠错匹配
目录 相关性 布尔模型 词频/逆向文档频率(TF/IDF) 词频 逆向文档频率 字段长度归一值 结合使用 向量空间模型 Lucene 的实用评分函数 近义词匹配 近义词查询原理 同义词过滤器 纠错匹配 ...
- 自然语言处理(NLP)之求近义词和类比词<MXNet中GloVe和FastText的模型使用>
这节主要就是熟悉MXNet框架中的两种模型:GloVe和FastText的模型(词嵌入名称),每个模型下面有很多不同的词向量,这些基本都来自wiki维基百科和twitter推特这些子集预训练得到的. ...
- python synonyms 近义词
from scipy import spatial import synonyms S1 = '尽管步履维艰,我们依然不会放弃' S2 = '就算困难重重,咱们仍旧不能退出'# 使用 synonyms ...
- 【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词
目录 1. 下载预训练的词向量 2. 应用预训练词向量 2.1 求近义词 2.2 求类比词 本文将介绍如何使用已经在大规模语料上预训练的词向量模型来求近义词和类比词. 1. 下载预训练的词向量 基于P ...
最新文章
- 解决Mysql:unrecognized service错误的方法(CentOS)附:修改用户名密码
- 使用C++实现Socket编程传输协议文件(包括大文件)
- 「机器学习」机器学习算法优缺点对比(汇总篇)
- mysql semi join_MySQL 通过semi join 优化子查询
- ansible的模块使用
- 三, for循环----文件对象-----函数基础------模块基础
- python深入与提高_Python深入01 特殊方法与多范式
- 设置一段文字显示不同的颜色及大小等属性
- Centos6.3下DRBD+HeartBeat+NFS配置笔记
- 蓝桥杯基础模块4_1:独立按键
- python ansible模块_python学习-ansible简单使用1
- 新买的内置光驱读取光盘有杂音的解决办法
- Android屏幕禁止休眠的方法
- SQL中创建外键约束
- 写个自己用的jdbc 简单框架
- 1.3 n-gram平滑算法:Good-Turning、拉普拉斯平滑
- 二级计算机vf题型,计算机二级VF题型有哪些?
- java对象的哈希值_对象的哈希值
- android开发 自定义锁屏界面,插件锁屏桌面自定义 “安卓4.0”界面美化教程
- 获取QQ企业邮箱通讯录PY脚本