1. 程式人生 > 其它 >基於碼錶的詞性標註-簡單demo

基於碼錶的詞性標註-簡單demo

技術標籤:自然語言處理

這個是基於作者自定的碼錶來進行匹配的,由於才剛剛開始學習,因此還很簡單。

基本原理

根據本人提供的碼錶來進行匹配,如果碼錶中出現了給定的字串中出現的字元,那麼就將裡面對應的字元所提供的詞性新增上去。

組成部分

讀取碼錶

將碼錶中的內容以HashMap<String, Token_Num>的格式表示出來,其中Token_Num是自定義的雙元組格式;

public class Token_Num {
    public Integer freq = 0;
    public String clas = "";
}

接著讀取碼錶中的內容,具體程式碼實現如下:

public HashMap<String,Token_Num> read_dictionary(String file){
        Tokenizer tokenizer = new Tokenizer();
        List<String> file_content = new ArrayList<String>();
        file_content = tokenizer.readFileContent(file);
        HashMap<String,Token_Num> dictionary = new HashMap<String, Token_Num>();
        for (String f:file_content){
            try{
                Token_Num freq_num = new Token_Num();
                f = new String(f.getBytes(),"utf-8");
                String word[] = f.split("\t");
                String org_word, freq, clas;
                org_word = word[0];
                freq = word[1];
                clas = word[2];
                int freq_int = Integer.parseInt(freq);
                freq_num.freq = freq_int;
                freq_num.clas = clas;
                dictionary.put(org_word,freq_num);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        return dictionary;
    }

進行比對

將得到的HashMap的結果和提供的結果進行比對,如果提供的字串和HashMap的key值是一致的,那麼就直接對其進行賦後邊的詞性;

for (Map.Entry<String,Token_Num> result: results){
            String key = result.getKey();
            String value = result.getValue().clas;
            if (text.contains(key)){
                output.add(key+"\t"+value);
            }
        }

測試結果

測試程式碼:

public void get_dictionary(){
        java.lang.String file = "D:\\NLP\\spacy_demo1_java\\src\\main\\java\\tokenizer\\chinese_dictionary.txt";
        Chinese_Token chinese_token = new Chinese_Token();
        chinese_token.get_dictionary(file);
    }
}

結果:
基於碼錶的匹配結果