<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 閱讀(3862) 評論(0)  編輯  收藏 所屬分類: 中文分詞
    主站蜘蛛池模板: 在线看片免费人成视频福利| 亚洲日韩国产一区二区三区在线 | 美女黄网站人色视频免费国产| 亚洲精品福利视频| 免费观看91视频| 国产成人精品日本亚洲网站| 国产在线精品一区免费香蕉| 亚洲人成中文字幕在线观看| 国产精品免费久久久久影院| 国产亚洲精品久久久久秋霞| a级在线观看免费| 亚洲AV无码国产精品麻豆天美| 国产成人久久AV免费| 亚洲黄色在线观看视频| 蜜臀98精品国产免费观看| 亚洲字幕在线观看| 成年男女男精品免费视频网站 | 亚洲欧洲日本天天堂在线观看| 91青青青国产在观免费影视| 亚洲精品国产免费| 毛片免费在线观看网址| 亚洲av成人无码网站… | 中文字幕亚洲乱码熟女一区二区| 国产日韩在线视频免费播放| 亚洲AV午夜成人影院老师机影院| 无码日韩精品一区二区免费暖暖 | 日韩精品亚洲专区在线观看| 久久精品免费网站网| 久久精品国产亚洲77777| 最近的免费中文字幕视频| 边摸边吃奶边做爽免费视频网站| 国产成人精品久久亚洲| 99精品视频免费观看| 亚洲欧美自偷自拍另类视| 亚洲日韩在线观看| **真实毛片免费观看| 亚洲第一se情网站| 亚洲av午夜福利精品一区人妖| 成年男女免费视频网站| 中文字幕免费在线播放| 亚洲国产成AV人天堂无码|