Lucene整合"庖丁解牛"中文分词 ----入门 2
相关的lucene包请到:http://code.google.com/p/paoding/downloads/list 下载。
入门第一篇:Lucene整合"庖丁解牛"中文分词 ----入门 1
http://luanmad2009.s156.eatj.com/viewthread.jsp?tid=338&page=1
相关的 Lucene 中文引擎,庖丁解牛的辞典参数配置方法请看 入门第一篇。
目录结构图:
E:\ECLIPSE\LUCENETEST
│ .classpath
│ .mymetadata
│ .project
│
├─.myeclipse
├─src
│ │ paoding-dic-home.properties
│ │
│ └─cn
│ └─luanmad
│ └─lucene
│ Test.java
│
└─WebRoot
│ index.jsp
│
├─META-INF
│ MANIFEST.MF
│
└─WEB-INF
│ web.xml
│
├─classes
│ │ paoding-dic-home.properties
│ │
│ └─cn
│ └─luanmad
│ └─lucene
│ Test$1.class
│ Test.class
│
└─lib
commons-logging.jar
junit.jar
lucene-analyzers-2.2.0.jar
lucene-core-2.2.0.jar
lucene-highlighter-2.2.0.jar
paoding-analysis.jar
Test.java
代码:
package cn.luanmad.lucene;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.TermPositionVector;
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.search.Searcher;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TokenGroup;
import org.apache.lucene.search.highlight.TokenSources;
import org.apache.lucene.store.LockObtainFailedException;
import java.io.IOException;
import java.io.StringReader;
import java.net.URLDecoder;
import java.net.URLEncoder;
//测试"庖丁解牛"中文分词器的分词效果
public class Test
{
public String myLucene(String myInputString) throws Exception, IOException
{
String IDNEX_PATH = "E:/paoding_test_index";
// 获取Paoding中文分词器
//二元分词
Analyzer analyzer = new PaodingAnalyzer();
//一元分词
//Analyzer analyzer = new StandardAnalyzer();
String indexString = "luanmad!乱码D七彩天空,经典文章无处不在!"+
"架构篇:千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性?"+
"首先讨论一下大型网站需要注意和考虑的问题。数据库海量数据处理:负载量不大的情况下select、delete和update是响应很迅速的,最多加几个索引就可以搞定,但千万级的注册用户和一个设计不好的多对多关系将带来非常严重的性能问题。另外在高UPDATE的情况下,更新一个聚焦索引的时间基本上是不可忍受的。索引和更新是一对天生的冤家。"+
"高并发死锁:平时我们感觉不到,但数据库死锁在高并发的情况下的出现的概率是非常高的。文件存储的问题:大型网站有海量图片数据、视频数据、文件数据等等,他们如何存储并被有效索引?高并发的情况下IO的瓶颈问题会迅速显现。也许用RAID和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者***的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。"+
"接下来讨论大型网站的底层系统架构,来有效的解决上述问题。";
myInputString = (new String(myInputString.getBytes("iso8859-1"),"utf-8"));
StringReader reader1 = new StringReader(myInputString);
TokenStream ts = analyzer.tokenStream(myInputString, reader1);
String myString = "";
Token t = ts.next();
while (t != null)
{
myString += t.termText() + " ";
t = ts.next();
}
System.out.print("分词结果:"+myString);
if("".equalsIgnoreCase(myString) || null == myString)
{
System.out.println("无匹配值!");
return "无匹配值!" ;
}
// 建立索引
IndexWriter writer = new IndexWriter(IDNEX_PATH, analyzer, true);
Document doc = new Document();
Field field = new Field("content", indexString,Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
doc.add(field);
writer.addDocument(doc);
writer.close();
System.out.println("Indexed success!");
// 检索
IndexReader reader = IndexReader.open(IDNEX_PATH);
QueryParser parser = new QueryParser("content", analyzer);
Query query = parser.parse(myString);
Searcher searcher = new IndexSearcher(reader);
Hits hits = searcher.search(query);
if (hits.length() == 0)
{
System.out.println("hits.length=0");
return "无匹配值!";
}
Document doc2 = hits.doc(0);
// 高亮处理
String text = doc2.get("content");
TermPositionVector tpv = (TermPositionVector) reader.getTermFreqVector(
0, "content");
TokenStream ts1 = TokenSources.getTokenStream(tpv);
Formatter formatter = new Formatter()
{
public String highlightTerm(String srcText, TokenGroup g)
{
if (g.getTotalScore() <= 0)
{
return srcText;
}
return "<b><font color=red>" + srcText + "</font></b>";
}
};
Highlighter highlighter = new Highlighter(formatter, new QueryScorer(
query));
String result = highlighter.getBestFragments(ts1, text, 5, "…");
System.out.println("result:nt" + result);
reader.close();
return result;
}
}
index.jsp
代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="cn.luanmad.lucene.Test" %>
<%@ page import="java.net.URLEncoder" %>
<jsp:directive.page import="java.net.URLDecoder;"/>
<html>
<head>
<title>luanmad!乱码D七彩天空</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="luanmad!,乱码D,lucene庖丁解牛中文分词">
<meta http-equiv="description" content="luanmad!,乱码D,lucene庖丁解牛中文分词">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function convers()
{
var myInputString = document.getElementById("myInputString").value;
myInputString = encodeURI(myInputString,"utf-8");
myForm.submit();
}
</script>
</head>
<body>
<center>
<h1><font color=red>luanmad!Search</font></h1>
<h4><font color=blue>乱码D七彩天空</font></h4>
<form action="index.jsp" name="myForm">
<input type="text" name="myInputString" id="myInputString" >
<input type="button" name="mySearching" value="Go" onclick = "convers()">
结果:
<%
String myInputString = request.getParameter("myInputString");
if(null == myInputString)
{
myInputString = "luanmad!";
}
Test test = new Test();
out.println(test.myLucene(myInputString));
%>
</form>
<hr></hr>
原文:
<td>
luanmad!乱码D七彩天空,经典文章无处不在!架构篇:
千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性?
首先讨论一下大型网站需要注意和考虑的问题。数据库海量数据处理:负载量不大的情况下select、delete和update是响应很迅速的,最多加几个索引就可以搞定,但千万级的注册用户和一个设计不好的多对多关系将带来非常严重的性能问题。另外在高UPDATE的情况下,更新一个聚焦索引的时间基本上是不可忍受的。索引和更新是一对天生的冤家。
高并发死锁:平时我们感觉不到,但数据库死锁在高并发的情况下的出现的概率是非常高的。文件存储的问题:大型网站有海量图片数据、视频数据、文件数据等等,他们如何存储并被有效索引?高并发的情况下IO的瓶颈问题会迅速显现。也许用RAID和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者***的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。
接下来讨论大型网站的底层系统架构,来有效的解决上述问题。
<td>
</center>
</body>
</html>
本实例是采用了二元分词来搜索的,二元分词对于单个字是搜索不到的,除非辞典里有。如果想体验一元搜索,只需要把Test.java 中
//二元分词
//Analyzer analyzer = new PaodingAnalyzer();
//一元分词
Analyzer analyzer = new StandardAnalyzer();
切换就行。
附件
可到google一下 luanmad 乱码D
或直接到 http://luanmad2009.s156.eatj.com/viewthread.jsp?tid=339&page=1 下载
- 大小: 167.9 KB
分享到:
相关推荐
《深入剖析:Lucene3与庖丁解牛中文分词器》 在信息技术飞速发展的今天,全文检索和搜索引擎已经成为日常开发中不可或缺的部分。Lucene作为一款强大的全文检索库,被广泛应用于各种信息检索系统中。然而,对于中文...
《Lucene中文分词:庖丁解牛》 在信息技术高速发展的今天,全文搜索引擎已经成为网站内容检索不可或缺的一部分。其中,Apache Lucene作为一个开源的全文检索库,被广泛应用于各种项目中,尤其对于处理中文文本,...
《Lucene中文分词——庖丁解牛》 在自然语言处理领域,中文分词是基础且关键的一环。在Java开发中,Apache Lucene是一个强大的全文搜索引擎库,但默认并不支持中文,这就需要借助第三方分词工具。本文将深入探讨...
《Lucene Analyzer剖析:中文分词的奥秘》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种系统中。其核心功能之一就是对输入...理解Analyzer的工作原理和特性,是掌握Lucene中文处理的关键。
实例是一个java实例,可直接导入到MyEclipse中...其中是lucene3.0整合了庖丁解牛分词法,添加了高亮显示。因为lucene3.0无法整合paoding-analysis.jar 所以我已经把paoding-analysis中的源码整合进来了避免无法整合问题
在Lucene中,"庖丁解牛分词法"通过集成第三方分词库实现,如"paoding-analysis-2.0.4-alpha2",这是一个专门为Lucene定制的中文分词组件。这个版本的分词器具有以下特点: 1. **高效性能**:优化了算法,使其在处理...
标题 "sorlr + tomcat+ 庖丁解牛中文分词 配置文档" 提到的是一个关于在Apache Solr中集成Tomcat服务器,并利用庖丁解牛中文分词工具进行中文处理的配置教程。这个配置过程对于搭建支持中文搜索的Solr环境至关重要。...
由于庖丁官方目前提供可下载尚不支持Lucene 3.0以上版本。因此作者对paoding进行重新编译,使其与最新Lucene 3.0.1版本适用。 Latest paoding 3.0.1 for lucene 3.0.1 使用说明: 先下载2.0.4的版本(h t t p : / ...
本文将深入探讨“Lucene加庖丁解牛测试类”,旨在帮助读者理解Lucene的核心概念,并通过实际的测试类解析,提升对Lucene的运用能力。 首先,我们需要理解“庖丁解牛”的含义。这源自古代典故,意指做事技艺娴熟,能...
赠送jar包:lucene-analyzers-smartcn-7.7.0.jar; 赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
赠送jar包:lucene-analyzers-common-6.6.0.jar; 赠送原API文档:lucene-analyzers-common-6.6.0-javadoc.jar; 赠送源代码:lucene-analyzers-common-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
包含翻译后的API文档:lucene-backward-codecs-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-backward-codecs:7.3.1; 标签:apache、lucene、backward、codecs、中英...
"庖丁解牛"是一款专为处理中文文本的分词工具,它的设计目的是为了帮助开发者更高效、准确地对中文文本进行分词处理。在自然语言处理(NLP)领域,分词是基础且关键的一环,它将连续的文本序列切分成具有独立意义的...
可以适用于lucene3.5的庖丁解牛分词器jar包
而"庖丁解牛"则为Lucene提供了针对中文的分词支持,使得开发者可以更好地处理中文文档,提高了搜索的准确性和效率。它的特点包括对中文词汇的精准识别,对新词的动态学习,以及对多音字、成语和网络用语的有效处理。...
赠送jar包:lucene-backward-codecs-6.6.0.jar; 赠送原API文档:lucene-backward-codecs-6.6.0-javadoc.jar; 赠送源代码:lucene-backward-codecs-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-backward-...
包含翻译后的API文档:lucene-spatial-extras-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:7.3.1; 标签:apache、lucene、spatial、extras、中英对照...
包含翻译后的API文档:lucene-analyzers-smartcn-7.7.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-analyzers-smartcn:7.7.0; 标签:apache、lucene、analyzers、smartcn...
包含翻译后的API文档:lucene-spatial-extras-7.2.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:7.2.1; 标签:apache、lucene、spatial、extras、中英对照...
《庖丁解牛 源码 for Lucene 2.4》是一份针对开源全文搜索引擎Lucene 2.4版本的深度解析资料。这个压缩包包含的文件名为"paoding-for-lucene-2.4",很可能是针对中文处理的Paoding Lucene库的源代码分析或扩展。...