基于词典的正向最大匹配算法(最长词优先匹配)

public Set<String> matchChinese(String text, Set<String> dictionary, int maxLength) {
        //text:待匹配文本     dictiona:词典    maxLength:词典中最长词长度
        Set<String> result=new HashSet<>();
        while(text.length()>0) {
            int length=maxLength;
            if(text.length()<maxLength)
                length=text.length();
            //取指定的最大长度的文本去词典里面匹配
            String s=text.substring(0,0+length);
            while(!dictionary.contains(s)){
                //如果长度为一且在词典中未找到匹配
                if(s.length()==1)
                    break;
                //如果匹配不到,则长度减一继续匹配
                s=s.substring(0,s.length()-1);
            }
            if(s.length()==1){
                if (dictionary.contains(s))
                    result.add(s);
            }else{
                result.add(s);
            }
            //从待查找文本中去除已经匹配的文本
            text=text.substring(s.length());
        }
        return result;
    }

 

测试方法

public static void main(String[] args) {

		Set<String> dictionary=new HashSet<>();
		dictionary.add("桃树");
		dictionary.add("杏树");
		dictionary.add("树");
		dictionary.add("飞来飞去");
		dictionary.add("仿佛已经满是桃儿");

		Scanner scanner=new Scanner(System.in);
		newtest n=new newtest();
		while(scanner.hasNext()){
			String text=scanner.next();
			Set<String> result=n.matchChinese(text,dictionary,8);
			for(String s:result){
				System.out.println(s);
			}
		}

测试文本:

桃树,杏树,梨树,你不让我,我不让你,都开满了花赶趟儿。红的像火,粉的像霞,白的像雪。花里带着甜味;闭了眼,树上仿佛已经满是桃儿,杏儿,梨儿。花下成千成百的蜜蜂嗡嗡的闹着,大小的蝴蝶飞来飞去。野花遍地是:杂样儿,有名字的,没名字的,散在草丛里像眼睛像星星,还眨呀眨
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值