作者:finallyliuyu (一)中我们已经说明了任务需求。(二)中我们将驶入重点,如何用Lucene.Net,以及其他的一些开源工具实现上述功能。 里要首先感谢一个人智慧掩盖真相。此人写了一个系列对于Lucene.net内部机制的入门性质的文章,令我在短时间内掌握了Lucene.net的一些要领。 这里插一句我自己的对科研人员,与专业程序员的工作侧重点区别:专业程序员应该对某个编程产品熟谙其道,而且他的代码布局也应该说是优秀的,就好比一位大作家的文字。而科研人员,注重的是思想和算法,但是算法和思想的实现要借助于程序,借助于“工程”。这时,我们所需要的是,在了解某个软件,或是开源组件不多的情况下,能够快速地搭建系统,实现自己的思想和算法。所有我们需要虚心请教专业人士即“有工程项目经验的人” 下面就是像罗列菜谱一样介绍如何利用开源工具进行组装完成(一)中的需求 开源工具 snowball(其中包含lucene.net dll) porter stemmer C#代码,词性标注工具。 核心思路:在SnowballAnalyzer.cs中进行修改。 原因在于如下: Lucene 的Analyzer 类的父类是Tokenizer or TokenStream(这里有点记不清了) ,同时Analyzer类是IndexWrtier类的先行者,每当调用IndexWriter将结果写入Lucene自带的“数据库”中,必要先调用个Analyzer.所以我们在Analyzer类中修改代码。 另外一个问题是:snowball本来带有词根还原的功能,通过在SnowballAnalyzer类中调用SnowballFilter类实现。在SnowballFilter类中可以找到调用 stemmer的相关语句。 但是我们现在要进行词性标注,显然是应该先进行词性标注,然后才能进行词根还原。为此,snowballAnalyzer不再调用SnowballFilter完成词根还原功能了。我们把所有的功能在snowballAnalyzer中实现。 |