ucene + IKAnalyzer 中文分词及索引,简单实例

luccene开发的IK分词器 lucenen开发越来越流行,这是lucene开发中最常用的一种分析器,操作简单没秩序在配置文件中修改就可以,里面也有配置文件 立即下载

原文:http://www.dev26.com/blog/article/351

import org.apache.lucene.document.Document;  
import org.apache.lucene.document.Field;  
import org.apache.lucene.document.DateTools;  
import org.apache.lucene.index.IndexWriter;  
import org.apache.lucene.queryParser.QueryParser;  
import org.apache.lucene.search.Hits;  
import org.apache.lucene.search.IndexSearcher;  
import org.apache.lucene.search.Query;  
import org.apache.lucene.store.Directory;  
import org.apache.lucene.store.FSDirectory;  
import org.mira.lucene.analysis.IK_CAnalyzer;  
     
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.FileReader;  
import java.util.Date;  
     
public class Searcher {  
    private static String INDEX_DIR = Searcher.class.getResource("/").getPath()+"/data/index";//"c:\\lucene\\index";  
    private static String DOC_DIR =   Searcher.class.getResource("/").getPath();//"c:\\lucene\\doc";  
    public static void main(String[] args) throws Exception {  
         String queryString;  
         queryString = "测试";  
         File indexDir = new File(INDEX_DIR);  
         File docDir = new File(DOC_DIR);  
         Date start = new Date();  
        //必须先建索引  
        try {  
             IndexWriter writer = new IndexWriter(INDEX_DIR, new IK_CAnalyzer(), true);  
             System.out.println("Indexing to directory '" + INDEX_DIR + "'...");  
             indexDocs(writer, docDir);  
             System.out.println("Optimizing...");  
             writer.optimize();  
             writer.close();  
             Date end = new Date();  
             System.out.println(end.getTime() - start.getTime() + " total milliseconds");  
     
         } catch (IOException e) {  
             System.out.println(" caught a " + e.getClass() +  
                    "\n with message: " + e.getMessage());  
         }  
        if (!indexDir.exists() || !indexDir.isDirectory()) {  
            throw new Exception(indexDir  
                     + " does not exist or is not a directory.");  
         }  
         search(indexDir, queryString);  
     }  
     
    private static void indexDocs(IndexWriter writer, File file)  
            throws IOException {  
        if (file.canRead()) {  
            if (file.isDirectory()) {  
                 String[] files = file.list();  
                if (files != null) {  
                    for (int i = 0; i < files.length; i++) {  
                         indexDocs(writer, new File(file, files[i]));  
                     }  
                 }  
             } else {  
                 System.out.println("adding " + file);  
                try {  
                     writer.addDocument(getDocument(file));  
                 }  
                catch (FileNotFoundException fnfe) {  
                    //  
                 }  
             }  
         }  
     }  
     
    private static Document getDocument(File f)  
            throws java.io.FileNotFoundException {  
         Document doc = new Document();  
         doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.UN_TOKENIZED));  
         doc.add(new Field("modified",  
                 DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE),  
                 Field.Store.YES, Field.Index.UN_TOKENIZED));  
         doc.add(new Field("contents", new FileReader(f)));  
        return doc;  
     }  
     
    public static void search(File indexDir, String q) throws Exception {  
         Directory fsDir = FSDirectory.getDirectory(indexDir);  
         IndexSearcher is = new IndexSearcher(fsDir);// ① 打开索引  
         Query query = new QueryParser("contents", new IK_CAnalyzer()).parse(q); // ② 分析查询  
        long start = new Date().getTime();  
         Hits hits = is.search(query);// ③ 搜索索引  
        long end = new Date().getTime();  
         System.err.println("Found " + hits.length() + " document(s) (in "
                 + (end - start) + "milliseconds) that matched query" + q + ":");  
        for (int i = 0; i < hits.length(); i++) {  
             Document doc = hits.doc(i); // ④ 得到匹配的文档  
             System.out.println("file: " + doc.get("path"));  
         }  
     }  
}

正向全切分分词器:org.mira.lucene.analysis.IK_CAnalyzer(适合建索引时使用)

正向最大全切分分词器:org.mira.lucene.analysis.MIK_CAnalyzer(适合用户输入检索时使用)

Java的全文检索实现 该文档描述了Lunene的详细介绍,应用及实现的方法列子。 立即下载

相关推荐

lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

NULL 博文链接:https://llying.iteye.com/blog/570208

lucene的中文分词器http://www.blogjava.net/dreamstone/archive/2007/06/22/125726.html

 lucene的中文分词器到现在还没有好的解决办法。下边介绍了两个lucene自己提供的分词器和一个javaeye上的网友实现的分词器。关于各个分词器的不同见代码中的print信息。直接运行得到console的输出结果更容易对比不同。package analyzer;import java.io.Reader;import java.io.StringReader;import org.apa

xu的blog 2037

使用electron静默打印

使用electron静默打印 1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的。并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大。 electron提供的打印api可以非常灵活的控制打印设置的显示,并且可以通过html来书写打印内容。 2.api ele...

w1366352655的博客 945

用于Lucene的各中文分词比较

用于Lucene的各中文分词比较 作者: Claymore 时间: 2011-09-09 17:53:26 Arial Tahoma Verdana 宋体 楷体  字体减小 字体加大 对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次为:StandardAnalyzer、ChineseAnalyzer、 CJKAnalyzer、IK_CAna

chs_jdmdr的专栏 2万+

谷歌(Google) Pixel 8/9 Pro(xl)如何获取 root 权限

谷歌(Google)Pixel8/9Pro(xl)等系列手机破解后,会在你的init_boot.img同路径生成一个magisk_patched.img,把这个文件拷贝到adb目录下,稍后还得把它刷回手机,这样手机才能获得Root权限,因为安卓14、15以后的内核结构调整,和Pixel7及以下的6、5、4、3、2等系列手机破解稍微不一致。因为ROOT权限的获取,需要使用ROM中的内核文件,个人强烈建议在官网下载ROM,直接刷最新版,其他地方的ROM如果没有校验码,请自行斟酌是否使用。

bugsycrack的博客 3486

TWINCAT3保姆级教程:手把手教你给Ecat从站烧录EEPROM(含XML配置避坑指南)

本文提供TWINCAT3环境下Ecat从站EEPROM烧录的完整教程,涵盖XML配置避坑指南。详细讲解环境准备、设备扫描、XML文件配置、EEPROM烧录流程及故障排查,帮助工程师高效解决设备识别问题,提升产线调试效率。

weixin_30693683的博客 516

Lucene的各中文分词比较

对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次为:StandardAnalyzer、ChineseAnalyzer、 CJKAnalyzer、IK_CAnalyzer、MIK_CAnalyzer、MMAnalyzer(JE分词)、PaodingAnalyzer。 单纯的中文分词的实现一般为按字索引或者按词索引。按字索引顾名思义,就是按单个字建立索引。按词索引就是按词喽,根据词库中

Think 2355

EPLAN电气设计精华 -模拟量传感器画法全解

本文介绍了EPLAN中模拟量压力传感器的标准画法要点,重点解析了电流型(4-20mA)、电压型(0-10V/0-5V)和特定应用型三种传感器的核心特点、典型符号、接线方式及应用场景。文章提供了EPLAN设备标识符示例,并分享了一个实际项目案例(XJC-Y01-20-4M传感器配合XJC-608T-F变送器和GSEE.GXLK-AI4S-I模块的应用),强调绘制前查阅技术资料的重要性。内容简明实用,有助于规范电气设计中的传感器绘制。

Qinmingyue13的博客 1180

Lucene 7.0测试使用

lucene7.0基本使用学习

fzczjlsdx的博客 717

threekingdoms.txt中文三国演义下载及实现人物出场统计

threekingdoms.txt全文下载:https://python123.io/resources/pye/threekingdoms.txt CalThreeKingdomsV1.py: #CalThreeKingdomsV1.py import jieba txt = open("threekingdoms.txt", "r", encoding = "utf-8").read() words = jieba.lcut(txt) counts = {} for word in words:

ZYYRWish_97的博客 1万+

IDEA中Maven工具栏与命令执行全攻略:高效开发必备技巧

IntelliJ IDEA 作为强大的 Java 开发工具,其 Maven 功能独具优势。Maven 工具栏位于工作区右侧,图标功能丰富,涵盖项目导入、源码处理、依赖操作等。执行 Maven 命令有多种途径,Run Anything 窗口可输入或选目标执行,上下文菜单能右键运行目标,还可创建运行配置,指定命令参数后运行,为开发者高效管理 Maven 项目、便捷执行命令提供有力支持。

2301_82300081的博客 2029

中文分词器比较

http://blog.youkuaiyun.com/u013063153/article/details/72904322

仗贱走天涯 9955

PyQt5混搭qfluentwidgets实战:用FramelessWindow快速打造现代化界面

本文详细介绍了如何将PyQt5与qfluentwidgets组件库结合,利用FramelessWindow快速打造现代化无边框界面。通过环境配置、核心特性解析、组件混用技巧及高级样式定制,帮助开发者提升桌面应用的用户体验和美观度,特别适合需要现代UI设计的Python开发者。

sugar的博客 969

关于几种中文分词的比对

目前lucene自身提供的StandardAnalyzer已经具备中文分词的功能,但是不一定能够满足大多数应用的需要。  另外网友谈的比较多的中文分词器还有:  CJKAnalyzer  ChineseAnalyzer  IK_CAnalyzer(MIK_CAnalyzer)  还有一些热心网友自己写的比较不错的分词器在此就不说了,有兴趣的可以自己研究研究。  以上三个中文分词器...

江夏lz的博客 349

〔重庆理工大学〕计算机网络实验指导书【实验九 直连路由,静态路由,默认路由配置】

本实验指导书介绍了直连路由、静态路由和默认路由的配置方法。主要内容包括:1)路由器基础知识,包括直连路由、静态路由和动态路由三种路由生成方式;2)路由度量值与匹配顺序,解释了不同路由类型的优先级;3)实验任务分为三个部分:直连路由的查看分析、静态路由的配置以及默认路由的配置,详细说明了配置步骤和命令。实验要求通过模拟器搭建网络环境,完成路由配置使PC间能够互通。实验旨在帮助学生掌握不同路由类型的工作原理和配置方法,适用于简单的网络环境。

Pretty Boy Fox的博客 1056

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Lucene几种中文分词的总结

引用: [url]http://blog.sina.com.cn/s/print_4ff5925f01000d32.html[/url] 内容: 目前最新版本的lucene自身提供的StandardAnalyzer已经具备中文分词的功能,但是不一定能够满足大多数应用的需要。 另外网友谈的比较多的中文分词器还有: CJKAnalyzer ChineseAnalyzer IK_CAnal...

neptune 377

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Lucene之中文分词器(IK-Ananlyzer)-yellowcong

IK分词全名为IK Analyzer,是由java编写的中文分词工具包,目前在lucene以及solr中用的比较多,采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式

1910

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java ik-analyzer上传jar包到maven库

Java ik-analyzer上传jar包到maven库 今天碰到一个问题自己的jar包放到maven里面不支持打包 代码如下mvn install:install-file -Dfile=D:\mavenStore\org\wltea\ik-analyzer\ik-analyzer\4.10.2\ik-analyzer-4.10.2.jar -DgroupId=org.wltea.ik-an

张小竟 2633

java lucene 中文分词_lucene2.4集成几种中文分词实例代码

package com.test;import java.io.Reader;import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.StopFilter;import org.apache.lucene.analysis.Token;impor...

weixin_42362931的博客 203

IKAnalyzer和庖丁分词性能对比

  paoding和IK分词效果差不多,IK分词多些但速度差些。原文: http://www.zgkw.cn/FORUMS/blogs/dyx/archive/2008/02/18/59776.aspx

小小冰的专栏 2293

IKAnalyzer基于lucene2.0版本API开发

使用说明: IKAnalyzer 基于lucene2.0 版本API 开发,实现了以词典分词为基础的正反向全切分算法,是Lucene Analyzer 接口的实现,代码使用例子如下:   import org.mira.lucene.analysis.IK_CAnalyzer &lt;------- 引用类 import .....   publi...

海宇的博客 243

Elasticsearch number和keyword滥用

之前有社区上反映ES 2.x -> 5.x升级对于数值类型和Term Query有重大变化。一个很简单的Query查询耗时突然从几十毫秒,变成800-1000毫秒,几十倍的性能下降。 { "from": 0, "size": 10, "query": { "bool": { "filter": [ { ...

布道 1万+

solr7.4 配置ikanalyzer和自带的中文分词器

一般解决分词问题会选择ikanalyzer,因为相对来说ikanalyzer更新的比较的好, solr7 本身提供中文的分词jar包,在此一并将一下。 使用ikanalyzer分词 1、先下载solr7版本的ik分词器,下载地址:http://search.maven.org/#search%7Cga%7C1%7Ccom.github.magese 分词器GitHub源码地址:h...

无风的雨 1万+

Lucene中文分析器的中文分词准确性和性能比较

 Lucene中文分析器的中文分词准确性和性能比较 对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次为:StandardAnalyzer、ChineseAnalyzer、CJKAnalyzer、IK_CAnalyzer、MIK_CAnalyzer、MMAnalyzer、PaodingAnalyzer。 单纯的中文分词的实现一般为按字索引或者按词索引。按字索引顾名思义,

approximation的专栏 626
上一篇: javascript给String类和Array扩展常用方法
下一篇: 用Java实现多线程服务器程序
wtsoftware
博客等级 码龄19年 12粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值