隨筆-23  評(píng)論-58  文章-0  trackbacks-0

          推翻了第一版,參考了其他分詞程序,重新寫(xiě)的第二版。

          逆向最大匹配中文分詞程序,能實(shí)現(xiàn)中英文數(shù)字混合分詞。比如能分出這樣的詞:bb霜、3室、樂(lè)phone、touch4、mp3、T恤

          public class RMM2 extends M
          {
              
          public static final HashMap<Character,TreeNode> dic = Dictionary.getRmmdic();
              
              
          /**
               * 
          @return 返回匹配最長(zhǎng)詞的長(zhǎng)度, 沒(méi)有找到返回 0.
               
          */

              
          public int maxMatch(TreeNode node,char[] sen, int offset) 
              
          {
                  
          int idx = offset;
                  
          for(int i=offset; i>=0; i--
                  
          {
                      node 
          = node.subNode(sen[i]);
                      
          if(node != null
                      
          {
                          
          if(node.isAlsoLeaf()) 
                              idx 
          = i; 
                      }

                      
          else 
                          
          break;
                  }

                  
          return idx ;
              }

              
              
          public ArrayList<Token> getToken(ArrayList<Sentence> list)
              
          {
                  Collections.reverse(list);
                  ArrayList
          <Token> tokenlist=new ArrayList<Token>();
                  
          for(Sentence sen:list)
                  
          {
                      
          int i=sen.getText().length-1;
                      
          while(i>-1)
                      
          {
                          TreeNode n
          =dic.get(sen.getText()[i]);
                          
          if(n!=null)
                          
          {
                              
          int j=maxMatch(n, sen.getText(),i);
                              
          if(j<i)
                              
          {
                                  Token token 
          = new Token(new String(sen.getText(),j,i-j+1),sen.getStartOffset()+j,sen.getStartOffset()+i+1);
                                  tokenlist.add(token);
                                  i
          =j-1;
                              }

                              
          else
                              
          {
                                  Token token 
          = new Token(new String(sen.getText(),i,1),sen.getStartOffset()+i,sen.getStartOffset()+i+1);
                                  tokenlist.add(token);
                                  i
          --;
                              }

                          }

                          
          else
                          
          {
                              Token token 
          = new Token(new String(sen.getText(),i,1),sen.getStartOffset()+i,sen.getStartOffset()+i+1);
                              tokenlist.add(token);
                              i
          --;
                          }

                      }

                  }

                  Collections.reverse(tokenlist);
                  
          return tokenlist;
              }

          }

          posted on 2012-06-29 17:29 nianzai 閱讀(1372) 評(píng)論(0)  編輯  收藏 所屬分類: 中文分詞
          主站蜘蛛池模板: 耿马| 佳木斯市| 乌兰浩特市| 如东县| 肥城市| 乐清市| 云林县| 南乐县| 贡觉县| 阳城县| 长葛市| 芦山县| 贵南县| 灵武市| 高碑店市| 天长市| 祁门县| 沈阳市| 汉沽区| 交城县| 正定县| 仁怀市| 北流市| 虎林市| 大埔区| 青川县| 奉化市| 博白县| 灯塔市| 阳朔县| 满城县| 文昌市| 德钦县| 建平县| 周口市| 黄龙县| 民和| 神池县| 神农架林区| 精河县| 黄大仙区|