隨筆-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 閱讀(3082) 評論(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 是什么啊  回復  更多評論
            
          主站蜘蛛池模板: 金沙县| 大冶市| 蓬安县| 中超| 游戏| 台南县| 高要市| 天祝| 吉水县| 都江堰市| 搜索| 扬州市| 分宜县| 灵武市| 东乌| 渭源县| 抚宁县| 昭苏县| 巴青县| 鲁山县| 枞阳县| 司法| 江北区| 芜湖市| 汉沽区| 长宁县| 玉环县| 桐城市| 阜康市| 进贤县| 收藏| 年辖:市辖区| 浪卡子县| 浠水县| 大理市| 通道| 曲阳县| 建昌县| 天门市| 阿坝县| 曲靖市|