Lucene整合"庖丁解牛"中文分词 ----入门 2
2009-07-24 17:53
561 查看
下载。
入门第一篇: Lucene整合"庖丁解牛"中文分词 ----入门 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; } }
[/code]
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" mce_href="styles.css"> --> <mce:script type="text/javascript"><!-- function convers() { var myInputString = document.getElementById("myInputString").value; myInputString = encodeURI(myInputString,"utf-8"); myForm.submit(); } // --></mce: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>
[/code]
本实例是采用了二元分词来搜索的,二元分词对于单个字是搜索不到的,除非辞典里有。如果想体验一元搜索,只需要把Test.java 中
//二元分词
//Analyzer analyzer = new PaodingAnalyzer();
//一元分词
Analyzer analyzer = new StandardAnalyzer();
切换就行。
附件
luanmad!Search.jpg
(168.19 KB)
2009-07-24 17:26,下载次数: 0
下载 google一下 luanmad 乱码D
或直接到LuceneTest。rar
相关文章推荐
- Lucene整合"庖丁解牛"中文分词包
- Lucene整合"庖丁解牛"中文分词包
- 分享Lucene中文分词组件"IK Analyzer V3.2.8"
- 【Lucene3.6.2入门系列】第14节_SolrJ操作索引和搜索文档以及整合中文分词
- 【Lucene3.6.2入门系列】第14节_SolrJ操作索引和搜索文档以及整合中文分词
- 【Lucene3.6.2入门系列】第14节_SolrJ操作索引和搜索文档以及整合中文分词
- Lucene3.3、Lucene3.4中文分词——庖丁解牛分词实例
- lucene入门-使用JE中文分词
- Lucene3.3、Lucene3.4中文分词——庖丁解牛分词实例
- 《解密搜索引擎技术实战:Lucene&Java精华版》---第四章中文分词原理与实现学习笔记(一)
- Lucene+paoding 使用"庖丁解牛" 构建Analyzer paoding
- Lucene中文分词 庖丁解牛 2.0.0版本发布
- Lucene之中文庖丁解牛(mmseg)分词器-yellowcong
- lucene中文分词搜索的核心代码
- solr学习(二)Solr4.7.2中整合中文分词mmseg4j-1.9.1
- KINECT学习 "kinect for Windows SDK开发入门(二)"
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- 页面编码为GBK时 jquery 提交ajax数据完美解决"中文乱码"方案
- Redhat Linux 6 上安装oracle11g 时 安装界面中文是"□□□□□"乱码
- Lucene使用IKAnalyzer中文分词笔记 Jialy Jialy