如何在lucene中使用中文自动分词技术

来源:百度文库 编辑:神马文学网 时间:2024/04/29 03:36:31
如何在lucene中使用中文自动分词技术- -
前段时间我试着在lucene中使用了自动分词技术,有不少朋友都很感兴趣。大致方法就是生成自动分词的dll,然后在java中用jni调用。前几天我整理一下,做了一个方便使用的jar包,并写了一个演示的例子和一篇说明文档,以上资料和dll文件还有java源程序可以到我们的网站-新闻收割机下载http://www.newsreaper.info/download/AutoSplit.rar
在使用dll的前提下,在lucene中使用自动分词的方法如下:
建索引时:
1)先调用SplitCaller将要处理的内容进行分词处理。示例代码如下:(下面的代码是对RSS文档进行建索引操作)
---RSSDocument.java-------
import com.blogever.RssReader.SplitCaller;
...
...
public static Document makeDocument(ItemIF item) {
Document doc = new Document();
//现在加了自动分词功能
doc.add(Field.Text(TITLE, SplitCaller.splits("将标题进行分词")));
doc.add(Field.Text(CONTENT,SplitCaller.splits("将内容进行分词")));
//下面的内容没有分词
doc.add(new Field("uid", uid(item), false, true, false));
return doc;
}
...
2)使用Analyzer时注意要使用 WhitespaceAnalyzer 分析器,因为自动分词程序已经将文档进行了分词,并用空格
空开,此时只要按空格进行解析就行了。如:“将标题进行分词”已经分成“将 标题 进行 分词”。
-----ChannelIndexer.java------
...
import org.apache.lucene.analysis.WhitespaceAnalyzer;
...
//其他代码
...
Analyzer analyzer = new WhitespaceAnalyzer();
...
public void indexItems(boolean createNewIndex, Collection items) throws java.io.IOException
{
ArrayList al = (ArrayList) items;
Collections.sort(al, new ItemComparator());
writer = new IndexWriter(indexDir, analyzer, createNewIndex);
writer.maxFieldLength = 1000000;
...
//其他代码
...
writer.addDocument(RssDocument.makeDocument(item));
...
writer.optimize();
nrOfIndexedItems = writer.docCount();
writer.close();
logger.info("Finished writing index.");
}
...
3)检索时,对检索词也采用上面同样的方法即可:
...
Searcher searcher = new IndexSearcher("d:\\NewsSpider\\index");
Analyzer analyzer = new WhitespaceAnalyzer();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.print("Query: ");
String line = in.readLine();
if (line.length() == -1)
break;
Query query = QueryParser.parse(SplitCaller.splits(line), "title", analyzer);
System.out.println("Searching for: " + query.toString("title"));
Hits hits = searcher.search(query);
System.out.println(hits.length() + " total matching documents");
...
通过上面的方法,就可以在lucene中使用自动分词的了。有人也许会问为什么不直接写一个能自动分词的Analyzer。其实本来我想写一个的,但是我发现那样很不方便,还不如先分词然后再用WhitespaceAnalyzer解析来得方便。如果有人有更好的办法,请一定和我探讨一下。
- 作者:yuanlang 2005年01月20日, 星期四 18:07
你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=506224
Wed Nov 16 16:14:46 CST 2005
yuanlang,你好,看到你blog上关于分词的文章,感觉太棒了。
我正在做一个项目需要到这个,能否发一份给我,太感谢了。
email: wjianj@163.com
Wed Jul 27 16:01:03 CST 2005
http://www.newsreaper.info/download/AutoSplit.rar
下载不了了 能分享下吗 谢谢 小女子急需得到您的指点
ruirui0370@sina.com.cn
Wed Jul 27 02:05:47 CST 2005
多多联系啊 msn:ceo@365a.com
搜索引擎研发论坛
http://lucene.com.cn
Wed Jul 20 12:02:07 CST 2005
http://www.newsreaper.info/download/AutoSplit.rar
下载不了了 能分享下吗 谢谢
hcqenjoy # 126.com
Tue Jun 07 15:38:20 CST 2005
我用了一下,效果真不错,可惜就是没有错误处理.如果碰上一个不能切分的情况,会导致jvm退出
Wed Apr 20 16:25:06 CST 2005
在tomcat下路径如何配置?
已经将dll与data拷贝到bean目录下,但是只有通过调节path路径才能获得split的处理但是依然找不到data目录中的字典文件,所以能否举个例子说明一下,在tomcat中split与data的安放与路径的配置?
Mon Apr 18 20:18:45 CST 2005
分词变成一个一个单字是因为系统没找到data目录下面的词典,所以把所有的词都按单字来切词。
原因有很多,是不是你tomcat路径配置的问题?
因为上次也有人出现了和你一样的情况,老是分词成一个一个单字。后来换了用另一台机器上的tomcat后就没有问题了。
Fri Apr 15 10:04:26 CST 2005
把dll和data放到tomcat 的bin目录下,分词就会成了一个一个的单字了,为什么?谢谢
Sun Apr 10 18:09:46 CST 2005
在tomcat中调用的话,把dll和data目录放到tomcat根目录下的\bin目录下就行了。
Sat Apr 02 11:21:45 CST 2005
我想问一下我怎么在网页里面加不分词功能阿!!我用的tomcat,在控制台运行能正常分词,放在tomcat中调用,老是不成功。总是分成一个一个单字了。这是为什么啊????
能不能详细的讲讲在tomcat中如何配置!!
Thu Mar 03 18:39:42 CST 2005
兄弟,split.dll是jni生成的,好像只能用java调用,能生成一个com版本么?多谢!
Sat Jan 22 12:45:45 CST 2005
项目最近上线完成,只是有些小问题,加上我们新手解决不了大问题,所以就不是很忙了。2月4号最后一天上班,好好休息一下,明年继续努力:)听说你和虫虫都可能要过来的,呵呵,那时候咱们董门在深圳人就多了
Thu Jan 20 20:41:26 CST 2005
:-)
是啊,比较忙呀,找工作呀,杂七杂八的事很多。
你们忙不忙,什么时候放假?
说不定明年我们就都去深圳找你了。
Thu Jan 20 19:24:44 CST 2005
呵呵,好久没有见你出现了,上次听ddo说你和晓阳现在都很忙的说。