最大正向匹配算法

 package fenci;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;
public class ReadFileToVector {

    /**
     * @param str
     * @author:
     * <p>Description:从文件中读取一行内容,把读取的内容放入vector中返回
     */
    public static Vector ReadFile(String str)
    {   
        String word=null;
        Vector vectors=new Vector();
        int i=0;
        try {
            FileInputStream fi=new FileInputStream(str);
            BufferedReader  input=new BufferedReader (new InputStreamReader(fi));
            while((word=input.readLine())!=null){
//                System.out.println(input.readLine());
               vectors.add(word);
//               System.out.println(vectors.get(i));
//               i++;
            }
    System.out.println("加载字典单词总数是:"+vectors.size());
        } catch (Exception e) {
            e.printStackTrace();
        }    
        return vectors;
        
    }
    public static void main(String[] args) {
        ReadFileToVector.ReadFile(".//fenci//data.txt");

    }

}

package fenci;
import java.util.*;

public class PositiveMatch {

    /**
     * <p>Description:最大正向匹配算法
     * @author:
     */
    public static void main(String[] args) {
        int maxlen=12;
        String str="我爱中华人民共和国";
        Vector vc=new Vector();
        vc=ReadFileToVector.ReadFile(".//fenci//data.txt");//从文件中加载词典,结果放到vector向量中
        int j=0;int k=0;
        while(j<str.length()){      //循环到句子末尾
         for(int i=maxlen;i>0;i--){ //从句子中切出词典中单词的最大长度
             k=i+j;                  //从句子的词的当前位置开始,切分出词的最大长度
             if (k>str.length())//当需要切分的最大长度大于句子的总长度时,只切分到句子末尾
                {k=str.length();}
            String key=str.substring(j,k);//切出最大字符串
            if (vc.contains(key)){ //判断当前字符串是否在词典中
                System.out.print(key+" ");
                j+=i;
                break;
            }           
          }
        }
       

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值