基於碼錶的詞性標註-簡單demo
阿新 • • 發佈:2021-01-06
技術標籤:自然語言處理
這個是基於作者自定的碼錶來進行匹配的,由於才剛剛開始學習,因此還很簡單。
基本原理
根據本人提供的碼錶來進行匹配,如果碼錶中出現了給定的字串中出現的字元,那麼就將裡面對應的字元所提供的詞性新增上去。
組成部分
讀取碼錶
將碼錶中的內容以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);
}
}
結果: