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

正向最大匹配分词程序,能实现中英文数字混合分词 (第二版)
推翻了第一版,参考了其他分词程序,重新写的第二版。

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

}

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