<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-23  評論-58  文章-0  trackbacks-0
    本隱馬可夫(HMM)中文分詞詞性標注程序 中的 隱馬可夫(HMM)概率模型 是由 PFR人民日報標注語料199801語料庫 生成
    public class HMM
    {
        
    static final String[] states = new String[52];
        
    static final HashMap<String, Double> start_probability = new HashMap<String, Double>();
        
    static final HashMap<String, HashMap<String, Double>> transition_probability = new HashMap<String, HashMap<String, Double>>();
        
    static final HashMap<String, HashMap<String, Double>> emission_probability =new HashMap<String, HashMap<String, Double>>();
        
        
    static
        
    {
            
    for(int i=0;i<52;i++)
                states[i]
    =CountPOS.getPOSFromId(i);
        
            InputStream is 
    = Viterbi.class.getClassLoader().getResourceAsStream("startprob.txt");
            FileUtil.readFileByLine(is, 
    "UTF-8"new Callback(){
                 
    int ss=0;
                 
    public void execute(String line) {
                     start_probability.put(states[ss], Double.parseDouble(line));
                     ss
    ++;
                 }

            }
    );

            is 
    = Viterbi.class.getClassLoader().getResourceAsStream("tranprob.txt");
            FileUtil.readFileByLine(is, 
    "UTF-8"new Callback(){
                
    int ss=0;
                
    public void execute(String line) {
                    HashMap
    <String, Double> t = new HashMap<String, Double>();
                    String[] cc
    =line.split("\t");
                    
    for(int j=0;j<cc.length;j++)
                        t.put(states[j], Double.parseDouble(cc[j]));
                    transition_probability.put(states[ss], t);
                    ss
    ++;
                }

            }
    );

            is 
    = Viterbi.class.getClassLoader().getResourceAsStream("emissionprob.txt");
            FileUtil.readFileByLine(is, 
    "UTF-8"new Callback(){
                
    public void execute(String line) {
                    String[] cc
    =line.split("\t");
                    String[] nn
    =cc[1].split(" ");
                    
    for(String n:nn)
                    
    {
                        HashMap
    <String, Double> e=null;
                        String[] bb
    =n.split(":");
                        
    if(emission_probability.containsKey(bb[0]))
                            e
    =emission_probability.get(bb[0]);
                        
    else
                            e
    =new HashMap<String, Double>();
                        e.put(cc[
    0], Double.parseDouble(bb[1]));
                        emission_probability.put(bb[
    0], e);
                    }

                }

            }
    );
        }

        
        
    public static String[] tagging(String[] observations)
        
    {
            
    return forward_viterbi(observations,states,start_probability,transition_probability,emission_probability);
        }

        
        
    public static String[]  forward_viterbi(String[] observations, String[] states,HashMap<String, Double> start_probability, HashMap<String, HashMap<String, Double>> transition_probability, HashMap<String, HashMap<String, Double>> emission_probability)
        
    {
            
    int[][] path=new int[observations.length][states.length];
            
    double[][] r=new double[observations.length][states.length];
            
    for(int j=0;j<states.length;j++)
            
    {
                
    if(emission_probability.get(states[j])!=null && emission_probability.get(states[j]).get(observations[0])!=null)
                    r[
    0][j]=start_probability.get(states[j])*emission_probability.get(states[j]).get(observations[0]);
                path[
    0][j]=0;
            }

            
            
    for(int t=1;t<observations.length;t++)
            
    {
                
    for(int i=0;i<states.length;i++)
                
    {
                    
    double tmp=0;int m=0;
                    
    for(int j=0;j<states.length;j++)
                    
    {
                        
    double tem=0;
                        
    if(emission_probability.get(states[i])!=null && emission_probability.get(states[i]).get(observations[t])!=null)
                            tem
    =r[t-1][j]*transition_probability.get(states[j]).get(states[i]) *emission_probability.get(states[i]).get(observations[t]);
                        
    if(tem>tmp)
                        
    {
                            tmp
    =tem;
                            m
    =j;
                        }

                    }

                    r[t][i]
    =tmp;
                    path[t][i]
    =m;
                }

            }

            
            
    double p=0;int m=0;
            
    for(int i=0;i<r[0].length;i++)
            
    {
                
    if(r[r.length-1][i]>p)
                
    {
                    p
    =r[r.length-1][i];
                    m
    =i;
                }

            }

            
    //System.out.println("p="+p);
            int[] trace=new int[observations.length];
            trace[observations.length
    -1]=m;
            
    for(int t=observations.length-1;t>0;t--)
            
    {
                trace[t
    -1]=path[t][m];
                m
    =path[t][m];
            }

            
            String[] ret
    =new String[observations.length];
            
    for(int i=0;i<trace.length;i++)
                ret[i]
    =states[trace[i]];
            
    return ret;
        }

        
        
    public static void main(String[] args)
        
    {
           
    //String[] observations = new String[] {"這些","服務","實體","改","由","當地","有關","部門","管理"};
            String[] observations = new String[] {"研究","生命","","起源"};
            String[] ret
    =tagging(observations);
            
    for(String c:ret)
                System.out.print(c
    +",");
        }

    }

    posted on 2012-09-14 17:08 nianzai 閱讀(3872) 評論(0)  編輯  收藏 所屬分類: 中文分詞
    主站蜘蛛池模板: 一级做受视频免费是看美女| 丁香花在线视频观看免费| 99视频在线免费| av电影在线免费看| 一级毛片在播放免费| 中文字幕成人免费高清在线| 一级毛片**免费看试看20分钟| 久草免费手机视频| 亚洲人成人无码网www电影首页| 一级毛片在线免费播放| 亚洲中文久久精品无码| 国产偷伦视频免费观看| 99视频全部免费精品全部四虎| 亚洲国产精品综合久久一线| 亚洲理论片在线中文字幕| 一级特级女人18毛片免费视频| 亚洲高清免费视频| 亚洲国产精品久久久久秋霞小 | 亚洲乱码中文字幕小综合| 无码少妇一区二区浪潮免费| 亚洲av无码一区二区三区在线播放| 成人电影在线免费观看| 亚洲精品国产专区91在线| 一个人看的hd免费视频| 国产美女无遮挡免费网站| 视频免费1区二区三区| 亚洲AV无码精品色午夜果冻不卡| 18禁止看的免费污网站| 无码乱人伦一区二区亚洲| 国产成人精品免费视频动漫 | 亚洲欧美日韩一区二区三区在线| 一区国严二区亚洲三区| 久久香蕉国产线看免费| 亚洲无人区码一二三码区别图片| 亚洲精品线路一在线观看| 久久久久国色av免费看| 亚洲国产欧美国产综合一区| 亚洲精品成人网站在线观看| 最近免费中文字幕视频高清在线看| 亚洲国产成a人v在线| heyzo亚洲精品日韩|