逆向最大匹配分词程序,能实现中英文数字混合分词 (第二版)

逆向最大匹配分词程序,能实现中英文数字混合分词 (第二版)

推翻了第一版,参考了其他分词程序,重新写的第二版。

逆向最大匹配中文分词程序,能实现中英文数字混合分词。比如能分出这样的词: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;
    }

}

你可能感兴趣的:(逆向最大匹配分词程序,能实现中英文数字混合分词 (第二版))