LingPipe学习: Spelling Correction(1)

5 篇文章 0 订阅

    LingPipe是一个很好的NLP的工具,是由Alias-i公司开发的一个NLP系统,里面有很多NLP常用的东西:比如ME,CRFs,LDA,SVMs等常用模型;并且可以用它们来做很多NLP的事情:分词,词性标注,情感分析,文本分类等等。更为难得的是这个工具文档详尽(可能开发者确实想把它做成一个商用的系统,而不像很多科研人员提供的系统,只是用来演示论文)。所以借这个工具,自己用来复习一下以前学习过的的东西,当然有时间的话也会尝试其它的NLP相关的工具,比如Mallet,Stanford NLP Group的一些工具。

    这个blog要讨论的是Spell Correction这个问题。Spell Correction也叫Spell Check,与之相关的任务还包括Spell Suggestion。我们用google等常见搜索引擎的例子来了解这两个任务。

    Spell Suggestion:就是用户在输入的时候提示可能的单词或者短语。

                    

    Spell Correction:用户输入可能存在错误,比如用这样的query搜索结果很少,从而推测用户输入可能有错。

         比如在google搜索“brec baldwin”,google提示Did you mean “breck baldwin”

         当然除了搜索引擎,Spell Correction也有其它的用途,比如word这样的文本编辑器,也会提供纠错功能。

 

     这两个任务有些类似,不过Spell Suggestion实时性更强,它在用户输入的同时就提示可能的结果,这样可以预防用户的拼写错误,而Spell Correction就是“事后诸葛亮”了,它一般通过query log或者搜索结果数来判断用户是否可能有拼写错误。

 

     注意百度,google中文,google英文的细微区别:

     我们输入anazon(应该没有这个词,正确的应该是amazon)

     百度的suggestion其实是前缀的匹配,没法纠错

 

     而google的就“智能”一些了:

        而对于中文的拼音,百度和google都类似,不过google中文的提示是汉字,而google英文的提示是拼音

       

    

 

 

     到这,大家应该对这个问题的定义和一些搜索引擎的实现有了一些体验了。下面我们来看看lingpipe里怎么使用Spell Correction。后续的文章会详细解析具体的实现,包括Character Language Model,Edit Distance,Noisy Channel model等等,不过现在还是先让它能运行起来再说吧。

 

    首先当然要去 http:/alias-i.com/lingpipe/下载了,注意要下载包含源代码的文件,而不仅仅是jar的(我们当然是要学习它的原理而不仅仅是用它啦,大小应该是几十MB吧,大的文件注意是一些语料)。建议下载3.9.3的版本,最新的是4.0.1,但是文档是基于3.9写的,所以不必用最新的,如果用到3.9.3里没有的东西,我会提示的。

    把lingpipe-3.9.3.tar.gz解压好就行了。我们看一下它的目录结构:

    |

    |---  src   这里面是源代码,它的编译不依赖任何东西,(当然测试代码要依赖于JUnit4啦)

    |---  index.html  文档的入口,里面最有用的就是tutorial了,当然JavaDoc也不错,不过我们如果在Eclipse里又有源代码的话,在里

           面看更方便

    |---  demos  一些demo

              |--- data demo用到的语料库

              |--- model  demo用到的模型,大部分模型是可以自己训练的,但是有些会涉及到版权的,可能只能提供训练后的模型。

              |--- tutorial  许多的教程

                       |--- querySpellChecker  我们这个文章的话题,拼写纠错。

                                |--- src 源代码

     

    了解了LingPipe的目录结构后,我们先来测试一下吧:

    1. 进到 lingpipe-3.9.3/demos/tutorial/querySpellChecker

    2. ant querySpellCheck 里面会给lingpipe-3.9.3/demos/data/rec.sport.hockey/train里的训练语料建立lucene索引和

        Character Language Model,建完索引和模型后就可以拼写纠错了。

 

    在Eclipse里调试:

    1. lingpipe-3.9.3/src里的java代码加入(可以复制到工程的src下,当然也可以link过去),这是lingpipe的核心代码,只要有JUnit4

        的库,应该就可以编译了,当然如果你不想阅读lingpipe的源代码,那么直接加入编译好的lingpipe-3.9.3.jar也行。

    2. 加入lingpipe-3.9.3/demos/tutorial/querySpellChecker/src里的代码,由于使用了lucene来建立索引,索引需要加入  

        lingpipe-3.9.3/demos/lib/lucene-core-3.0.1.jar

    3. 修改一下训练语料的路径

          

         当然,你也可以把需要的训练语聊复制到工程里,保持它的相对路径。

      4. 运行或者调试  QuerySpellCheck,它会构建索引和训练Language Model,然后在命令行提示查询,比如测试“spead up”,

         它会提示“speed up”

     

      今天就先到这吧,有空自己试试让它运行起来。

   

   

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值