NLP规则分词实验——Java版

NLP规则分词实验报告

完成日期:2018.11.03
GitHub:https://github.com/fyinh/NLPLearning_MM_RMM_segment
详细理论介绍请看:https://blog.csdn.net/fyinh_/article/details/88867209


一、软件演示

(1)已“对外经济技术合作与交流不断扩大。”为例,演示页面如下:
在这里插入图片描述
可以看到,当RMM与MM的分词结果相同时,就直接输出分词结果。
(2)以“幼儿园地节目。”为例,演示页面如下:
在这里插入图片描述
可以看到,当RMM与MM的分词结果不相同时,将输出两种方法的分词结果,然后请人工选择。

二、代码

  1. 正向匹配
public void MM(String source, int len, int npos)
    {//一把青菜  pos=0, len=3
        int lenh=source.length();
        if(npos+1>=lenh) return;
        while((npos+len)>lenh)
        {
            len=len-1;
        }
        String substr=source.substring(npos,npos+len);
        if(dict.contains(substr))
        {
            System.out.println(substr);
            npos=npos+len;
            result=result+substr+"/ ";
            len=4;
            MM(source,len,npos);
        }
        else
        {
            if(len>=1)
            {
                len=len-1;
                MM(source,len,npos);
            }
        }
        
    }
  1. 逆向匹配
public void RMM(String source, int len, int npos)
    {
        if(npos-1<0) return;
        while((npos-len)<0)
        {
            len=len-1;
        }
        String substr=source.substring(npos-len,npos);
        if(dict.contains(substr))
        {
            System.out.println(substr);
            npos=npos-len;
            result=substr+"/ "+result;
            len=4;
            RMM(source,len,npos);
        }
        else
        {
            if(len>=1)
            {
                len=len-1;
                RMM(source,len,npos);
            }
        }
        
    }
  1. 双向匹配
public class seg_bi {
    seg_RMM s=new seg_RMM();
    seg_only a = new seg_only();
    
    public seg_bi(){
        s.readDict();
        a.readDict();
    }
    public static void main(String[] args)
    {
        seg_bi f = new seg_bi();
        System.out.print(f.check_right("我正在上自然语言处理课."));
    }
    public String get_MMresult(){
        return a.getResult();
    }
    public String get_RMMresult(){
        return s.getResult();
    }
    public String get_result(){
        return a.getResult();
    }
    public boolean check_right(String source){
        int rmm_l = source.length();
        s.RMM(source, 4, rmm_l-1);
        a.MM(source, 4, 0);
        return (s.getResult().equals(a.getResult()));
 
    }
    
}

ps: 这里只贴出了几个主要的函数,可视化页面和整个代码可以上GitHub上看哦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值