随笔-23  评论-58  文章-0  trackbacks-0
全切分分词程序。中华人民共和国切分成 {中华人民共和国|中华|华人|人民|共和国}。

能实现中英文数字混合分词。比如能分出这样的词:bb霜、3室、乐phone、touch4、mp3、T恤。
public class FMW extends M
{
    
public static final HashMap<Character,TreeNode> dic = Dictionary.getFmmdic();
    
    
/**
     * 
@return 返回可能匹配词的长度, 没有找到返回 0.
     
*/

    
public ArrayList<Integer> maxMatch(TreeNode node,char[] sen, int offset) 
    
{
        ArrayList
<Integer> list=new ArrayList<Integer>();
        
for(int i=offset; i<sen.length; i++
        
{
            node 
= node.subNode(sen[i]);
            
if(node != null
            
{
                
if(node.isAlsoLeaf()) 
                    list.add(i
+1);
            }

            
else 
                
break;
        }

        
if(list.size()==0)
            list.add(offset);
        
return list;
    }

    
    
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
=dic.get(sen.getText()[i]);
                
if(n!=null)
                
{
                    ArrayList
<Integer> ilist =maxMatch(n, sen.getText(),i);
                    
if(ilist.size()>1)
                    
{
                        
for(int j=0;j<ilist.size();j++)
                        
{
                            Token token 
= new Token(new String(sen.getText(),i,ilist.get(j)-i),sen.getStartOffset()+i,sen.getStartOffset()+ilist.get(j));
                            tokenlist.add(token);
                        }

                    }

                    
else
                    
{
                        
if(ilist.get(0)>i)
                        
{
                            Token token 
= new Token(new String(sen.getText(),i,ilist.get(0)-i),sen.getStartOffset()+i,sen.getStartOffset()+ilist.get(0));
                            tokenlist.add(token);
                        }

                        
else
                        
{
                            
if(tokenlist.size()==0 || tokenlist.get(tokenlist.size()-1).getEnd()<=i+sen.getStartOffset())
                            
{
                                Token token 
= new Token(new String(sen.getText(),i,1),sen.getStartOffset()+i,sen.getStartOffset()+i+1);
                                tokenlist.add(token);
                            }

                        }

                    }

                }

                
else
                
{
                    
if(tokenlist.size()==0 || tokenlist.get(tokenlist.size()-1).getEnd()<=i+sen.getStartOffset())
                    
{
                        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-07-02 14:17 nianzai 阅读(3063) 评论(4)  编辑  收藏 所属分类: 中文分词

评论:
# re: 全切分分词程序,能实现中英文数字混合分词 2012-07-16 11:16 | hadoop
你好,非常感谢你的nut项目,在使用过程中有些问题:怎样分发nutla生成的索引文件到每个datanode,代码里面好像没有提到,希望能给点思路,还有方便留下你的联系方式吗,想向你多学习  回复  更多评论
  
# re: 全切分分词程序,能实现中英文数字混合分词 2012-07-16 18:14 | nianzai
这个现在需要手工分发。  回复  更多评论
  
# re: 全切分分词程序,能实现中英文数字混合分词 2012-07-16 18:15 | nianzai
QQ:383138070  回复  更多评论
  
# re: 全切分分词程序,能实现中英文数字混合分词 2014-05-14 15:32 | sdyjmc
能对车牌号进行分词吗? M 是什么啊  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: