隨筆-23  評論-58  文章-0  trackbacks-0

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

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

          public class RMM2 extends M
          {
              
          public static final HashMap<Character,TreeNode> dic = Dictionary.getRmmdic();
              
              
          /**
               * 
          @return 返回匹配最長詞的長度, 沒有找到返回 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) 評論(0)  編輯  收藏 所屬分類: 中文分詞
          主站蜘蛛池模板: 和硕县| 高州市| 娄烦县| 庐江县| 黎城县| 石阡县| 绥宁县| 哈密市| 乌海市| 登封市| 象山县| 乌兰浩特市| 泗洪县| 长兴县| 平塘县| 梧州市| 金川县| 南丰县| 淅川县| 玉山县| 普兰店市| 互助| 桑日县| 鲁山县| 郎溪县| 玉门市| 横峰县| 苗栗县| 大竹县| 阿城市| 郴州市| 神木县| 五大连池市| 兰坪| 保康县| 广汉市| 开远市| 青海省| 安庆市| 青阳县| 庐江县|