zoukankan      html  css  js  c++  java
  • 写一点应用关于 Lucene.Net,snowball的重新组装(二)

    作者: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中实现。

  • 相关阅读:
    动态规划——Best Time to Buy and Sell Stock IV
    动态规划——Split Array Largest Sum
    动态规划——Burst Ballons
    动态规划——Best Time to Buy and Sell Stock III
    动态规划——Edit Distance
    动态规划——Longest Valid Parentheses
    动态规划——Valid Permutations for DI Sequence
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/1812906.html
Copyright © 2011-2022 走看看