隨筆-23  評論-58  文章-0  trackbacks-0
          推翻了第一版,參考了其他分詞程序,重新寫的第二版。

          正向最大匹配中文分詞程序,能實現中英文數字混合分詞。比如能分出這樣的詞:bb霜、3室、樂phone、touch4、mp3、T恤
          public class FMM2 extends Seg
          {
              
          public static final HashMap<Character,TreeNode> dic = Dictionary.getFmmdic();
              
              
          /**
               * 
          @return 返回匹配最長詞的長度, 沒有找到返回 0.
               
          */

              
          public static int maxMatch(TreeNode node,char[] sen, int offset) 
              
          {
                  
          int idx = offset - 1;
                  
          for(int i=offset; i<sen.length; i++
                  
          {
                      node 
          = node.subNode(sen[i]);
                      
          if(node != null
                      
          {
                          
          if(node.isAlsoLeaf()) 
                              idx 
          = i; 
                      }

                      
          else 
                          
          break;
                  }

                  
          return idx + 1;
              }

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

                              
          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
          ++;
                          }

                      }

                  }

                  
          return tokenlist;
              }

          }

          posted on 2012-06-27 13:39 nianzai 閱讀(1273) 評論(0)  編輯  收藏 所屬分類: 中文分詞
          主站蜘蛛池模板: 遂平县| 安西县| 无锡市| 秭归县| 沂源县| 皮山县| 安徽省| 永年县| 尉氏县| 遂宁市| 阳泉市| 阳新县| 会理县| 汕头市| 东乡族自治县| 新泰市| 吴川市| 无棣县| 天台县| 亳州市| 葫芦岛市| 峨眉山市| 自治县| 石柱| 南江县| 清远市| 永修县| 平陆县| 临夏市| 茶陵县| 东乌珠穆沁旗| 万安县| 阳城县| 阳春市| 吉木萨尔县| 聂荣县| 屯留县| 乳山市| 泸溪县| 哈密市| 镶黄旗|