在Lucene4.6中通过SynonymFilterFactory实现中文同义词非常方便,只需几行代码和一个同义词词典。这个词典还能在Lucene中实现一定程度的拼写纠错,提升搜索体验。在下面这个例子中我们从磁盘载入一个同义词词典,并且对“其实hankcs似好人”这句话进行stream化以供索引,同时还对其中的拼写错误“似->是”做出纠正。
首先是位于./data/synonyms.txt路径下的同义词词典:
我,俺,hankcs 似,is,are => 是 好人,好心人,热心人
可以看出上面有两种词典格式:
通过,分割的可拓展同义词
比如“我,俺,hankcs”代表着这三个词是同义词,并且任何一个词可以被expand(拓展)为其他三个。如果expand设为false的话,则这三个词都会被统一替换为第一个词,也就是“我”。
通过=>收缩的不可拓展同义词
比如“似,is,are => 是”代表这三个词同义,并且无视expand参数,统一会被替换为“是”
然后是加载代码
package com.hankcs.test; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.synonym.SynonymFilterFactory; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.util.FilesystemResourceLoader; import org.apache.lucene.util.Version; import org.apache.uima.annotator.WhitespaceTokenizer; import java.io.IOException; import java.io.StringReader; import java.util.HashMap; import java.util.Map; /** * @author hankcs */ public class TestSynonyms { private static void displayTokens(TokenStream ts) throws IOException { CharTermAttribute termAttr = ts.addAttribute(CharTermAttribute.class); OffsetAttribute offsetAttribute = ts.addAttribute(OffsetAttribute.class); ts.reset(); while (ts.incrementToken()) { String token = termAttr.toString(); System.out.print(offsetAttribute.startOffset() + "-" + offsetAttribute.endOffset() + "[" + token + "] "); } System.out.println(); ts.end(); ts.close(); } public static void main(String[] args) throws Exception { String testInput = "其实 hankcs 似 好人"; Version ver = Version.LUCENE_46; Map<String, String> filterArgs = new HashMap<String, String>(); filterArgs.put("luceneMatchVersion", ver.toString()); filterArgs.put("synonyms", "./data/synonyms.txt"); filterArgs.put("expand", "true"); SynonymFilterFactory factory = new SynonymFilterFactory(filterArgs); factory.inform(new FilesystemResourceLoader()); WhitespaceAnalyzer whitespaceAnalyzer = new WhitespaceAnalyzer(ver); TokenStream ts = factory.create(whitespaceAnalyzer.tokenStream("someField", testInput)); displayTokens(ts); } }
输出:
0-2[其实] 3-9[我] 3-9[俺] 3-9[hankcs] 10-11[是] 12-14[好人] 12-14[好心人] 12-14[热心人]
由于 我 俺 hankcs 三个词是同一个意思,所以它们被视为同一个term,并且它们的偏移相同,都是3->9,这个长度取决于原来的词 hankcs 的长度。
http://www.hankcs.com/program/java/lucene-synonymfilterfactory.html
相关推荐
介绍lucene同义词库的使用,想使用lucene同义词的朋友们,如果不知道原理的可以看下。
根据lucene最新版本5.5做同义词分析器,熟悉内部分析构造
NULL 博文链接:https://iamyida.iteye.com/blog/2197355
支持Spring-data-solr1.5的ik分词器,并且修改了代码,添加一个新的类,用于支持同义词,目前可以同时支持分词和同义词的功能。 修改 managed-schema,添加 <analyzer type="index"> ...
lucene5.4 + IKAnalyzer支持同义词、停用词、扩展词,IKAnalyzer是中同义词是自己改的,就没打包了,如果还有其它需求可以自己改改.
(2) 实现简单同义词索引 27 第五章 高级搜索 32 5.1 搜索排序 34 (1) 建立搜索类 34 (2) 默认排序 35 (3) 根据评分排序 35 (4) 根据索引号排序 36 (5) 根据文件大小排序 36 (6) 根据日期排序 37 (7) 根据文件名排序...
魂动罗java源码 Jcseg完整版本(源码, 词库, 帮助文档, 词库管理工具, jar文件)下载: 一. 关于jcseg: jcseg是使用Java开发的一个开源中文分词器,使用流行的mmseg算法...中英文同义词追加/同义词匹配 + 中文词条拼音追
创建索引,查询,过滤,同义词,近及时搜索,里面有4.6与5.0的jar文件,请自行引入
lucene的分词的测试工程,包括分词器的比较,扩展停用词,同义词分词等
然后可以使用同义词文件结合一些 solr 插件将这个过程的输出嵌入到 solr(或一些其他搜索引擎)中,以在搜索引擎中提供概念搜索功能。输出也可以在其他搜索引擎中使用,只要它们支持同义词文件。概念搜索也称为语义...
通过对基于最大匹配算法的中文分词器的设计与改进,并引入文本解析器与构建同义词词库引擎,使得Lucene对中文的检索更加个性化。通过检索结果的对比表明,改进后的中文分词器对检索功能的扩展有了极大的提高。并最终...
Jcseg是基于 mmseg 算法的一个轻量级中文分词器,...Jcseg自带了一个 jcseg.properties 文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!
在文字上创建和访问 RDF 索引,包括模糊匹配和 WordNet 同义词。 RDFIndex 可以与 SPARQL 端点、Jena 模型或 SOLR/Lucene 索引一起使用。 为 SPARQL 端点创建索引是最容易设置的,但对于 DBpedia 和 LinkedGeoData ...
该软件包包含用于为Lucene 4.... 它使用户可以对要索引的词进行词法化处理,对词的词性进行加权(例如,比代词对名词进行加权),并可以将GermaNet或从您提供的列表中提取的同义词添加到搜索索引中,从而增加对lucene。
该项目提供了可在Elasticsearch Analyzer中使用的同义词文件。在Elasticsearch中索引表情符号的要求版要求Elasticsearch> = 6.7 标准标记器现在可以理解表情符号 :party_popper: 感谢无需插件! Elasticsearch> = ...
计算语言学讲义(刘群-中国科学院计算技术研究所) 基于Lucene的在线客服机器人的研究与实现 基于OWL的旅游领域本体的构建 基于本体的受限领域问答系统研究 基于本体的受限领域问答系统...HIT-IRLab-同义词词林(扩展版)
图书馆搜索应用程序的一个常见需求是支持规范记录中的同义词。 (请求“作者:布莱尔,埃里克”也应该找到更广为人知的笔名“乔治·奥威尔”) 在传统的基于 SQL 数据库的 OPAC 中,这可以通过连接来解决。 现代书目...
并且提供了最新版本的lucene, solr, elasticsearch的分词接口, Jcseg自带了一个 jcseg.properties文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否...
它支持一个同音词,例如俄语单词“вина”的同义字,它提供了两个变体“вино”和“вина”。 如何使用 通过运行mvn clean package构建项目,这将为您提供工件的最新版本-1.5,将其添加到您的类路径中。 ...
Autophrasing过滤器可以与同义词过滤器结合使用,以处理词组中的前缀或后缀词与词组同义,而词组其他部分不相同的情况。 这使得短语中的搜索可以有选择地发生,而不是随机发生。 ##概述 搜索引擎通过“反向”...