欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能 帶多音字識(shí)別

 更新時(shí)間:2017年02月27日 08:38:39   作者:晨曦月光  
這篇文章主要介紹了android實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能,帶多音字識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

android 漢字轉(zhuǎn)拼音帶多音字識(shí)別功能,供大家參考,具體內(nèi)容如下

問(wèn)題來(lái)源

在做地名按首字母排序的時(shí)候出現(xiàn)了這樣一個(gè)bug。長(zhǎng)沙會(huì)被翻譯拼音成zhangsha,重慶會(huì)被翻譯拼音成zhong qing。于是排序出了問(wèn)題。

漢字轉(zhuǎn)拼音庫(kù)和多音字識(shí)別庫(kù)
1.多音字對(duì)應(yīng)的詞匯庫(kù)
2.文字的二進(jìn)制大小對(duì)應(yīng)的拼音庫(kù)

關(guān)鍵代碼

1.我在這里首先將要轉(zhuǎn)化的文字轉(zhuǎn)化成對(duì)應(yīng)的”gb2312”編碼。漢字轉(zhuǎn)化成二進(jìn)制編碼一般占兩個(gè)字節(jié),如果一個(gè)字節(jié)返回字符,如果是兩個(gè)字節(jié)算一下偏移量。代碼如下

 /** * 漢字轉(zhuǎn)成ASCII碼 * * @param chs * @return */
  private int getChsAscii(String chs) {
   int asc = 0;
   try {
    byte[] bytes = chs.getBytes("gb2312");
    if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
     throw new RuntimeException("illegal resource string");
    }
    if (bytes.length == 1) {
     asc = bytes[0];
    }
    if (bytes.length == 2) {
     int hightByte = 256 + bytes[0];
     int lowByte = 256 + bytes[1];
     asc = (256 * hightByte + lowByte) - 256 * 256;
    }
   } catch (Exception e) {
    System.out.println("ERROR:ChineseSpelling.class-getChsAscii(String chs)" + e);
   }
   return asc;
  }

2.將單個(gè)漢字獲取的拼音再和多音字庫(kù)的hashMap進(jìn)行比較,代碼如下:

public String getSellingWithPolyphone(String chs){
   if(polyphoneMap != null && polyphoneMap.isEmpty()){
    polyphoneMap = initDictionary();
   }

   String key, value, resultPy = null;
   buffer = new StringBuilder();
   for (int i = 0; i < chs.length(); i++) {
    key = chs.substring(i, i + 1);
    if (key.getBytes().length >= 2) {
     value = (String) convert(key);
     if (value == null) {
      value = "unknown";
     }
    } else {
     value = key;
    }
    resultPy = value;

    String left = null;
    if(i>=1 && i+1 <= chs.length()){
     left = chs.substring(i-1,i+1);
     if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(left)){
      resultPy = value;
     }
    }
//    if(chs.contains("重慶")){
     String right = null; //向右多取一個(gè)字,例如 [長(zhǎng)]沙
     if(i<=chs.length()-2){
      right = chs.substring(i,i+2);
      if(polyphoneMap.containsKey(right)){
       resultPy = polyphoneMap.get(right);
      }
     }
//    }

    String middle = null; //左右各多取一個(gè)字,例如 龍[爪]槐
    if(i>=1 && i+2<=chs.length()){
     middle = chs.substring(i-1,i+2);
     if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(middle)){
      resultPy = value;
     }
    }

    String left3 = null; //向左多取2個(gè)字,如 羋月[傳],列車長(zhǎng)
    if(i>=2 && i+1<=chs.length()){
     left3 = chs.substring(i-2,i+1);
     if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(left3)){
      resultPy = value;
     }
    }

    String right3 = null; //向右多取2個(gè)字,如 [長(zhǎng)]孫無(wú)忌
    if(i<=chs.length()-3){
     right3 = chs.substring(i,i+3);
     if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(right3)){
      resultPy = value;
     }
    }

    buffer.append(resultPy);
   }
   return buffer.toString();
  }

3.將asserts文件內(nèi)容解析生成HashMap列表.

 public HashMap<String, String> initDictionary(){
  String fileName = "py4j.dic";
  InputStreamReader inputReader = null;
  BufferedReader bufferedReader = null;
  HashMap<String, String> polyphoneMap = new HashMap<String, String>();
  try{
   inputReader = new InputStreamReader(MyApplication.mContext.getResources().getAssets().open(fileName),"UTF-8");
   bufferedReader = new BufferedReader(inputReader);
   String line = null;
   while((line = bufferedReader.readLine()) != null){
    String[] arr = line.split(PINYIN_SEPARATOR);
    if(isNotEmpty(arr[1])){
     String[] dyzs = arr[1].split(WORD_SEPARATOR);
     for(String dyz: dyzs){
      if(isNotEmpty(dyz)){
       polyphoneMap.put(dyz.trim(),arr[0]);
      }
     }
    }
   }
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(inputReader != null){
    try {
     inputReader.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   if(bufferedReader != null){
    try {
     bufferedReader.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
  return polyphoneMap;
 }

github源碼下載:https://github.com/loveburce/ChinesePolyphone.git

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android與asp.net服務(wù)端共享session的方法詳解

    android與asp.net服務(wù)端共享session的方法詳解

    這篇文章主要給大家介紹了關(guān)于android與asp.net服務(wù)端如何共享session的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • 可支持快速搜索篩選的Android自定義選擇控件

    可支持快速搜索篩選的Android自定義選擇控件

    這篇文章主要為大家詳細(xì)介紹了可支持快速搜索篩選的Android自定義選擇控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Cocos2d-x 3.0多線程異步加載資源實(shí)例

    Cocos2d-x 3.0多線程異步加載資源實(shí)例

    手機(jī)游戲,即便是休閑類的小游戲,往往也涉及大量紋理資源、音視頻資源、文件讀寫(xiě)以及網(wǎng)絡(luò)通信,處理的稍有不甚就會(huì)出現(xiàn)畫(huà)面卡頓,交互不暢的情況
    2014-04-04
  • AndroidStudio3 支持 Java8 了請(qǐng)問(wèn)你敢用嗎

    AndroidStudio3 支持 Java8 了請(qǐng)問(wèn)你敢用嗎

    Google 發(fā)布了 AS 3.0,以及一系列的 Support 包,有意思的新東西挺多,AS3里面有一個(gè)亮眼的特性就是支持J8。接下來(lái)通過(guò)本文給大家分享AndroidStudio3 支持 Java8 的相關(guān)內(nèi)容,感興趣的朋友一起看看吧
    2017-11-11
  • Android仿QQ附近的人搜索展示功能

    Android仿QQ附近的人搜索展示功能

    這篇文章主要介紹了Android仿QQ附近的人搜索展示功能的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Android開(kāi)發(fā) 旋轉(zhuǎn)屏幕導(dǎo)致Activity重建解決方法

    Android開(kāi)發(fā) 旋轉(zhuǎn)屏幕導(dǎo)致Activity重建解決方法

    Android開(kāi)發(fā)文檔上專門(mén)有一小節(jié)解釋這個(gè)問(wèn)題。簡(jiǎn)單來(lái)說(shuō),Activity是負(fù)責(zé)與用戶交互的最主要機(jī)制,接下來(lái)為您詳細(xì)介紹
    2012-11-11
  • Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實(shí)例

    Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實(shí)例

    這篇文章主要介紹了Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實(shí)例,這兩個(gè)子控件一般被用作添加標(biāo)題,在實(shí)際效果上并不是那么好控制,使用的時(shí)候需要謹(jǐn)慎,需要的朋友可以參考下
    2016-06-06
  • flutter直接上傳文件到阿里云oss

    flutter直接上傳文件到阿里云oss

    上傳視頻到oss,之前是走后端上傳到oss,會(huì)有一個(gè)問(wèn)題就是我要先上傳給后端,后端再上傳給oss就會(huì)導(dǎo)致上傳多次,消耗時(shí)間過(guò)長(zhǎng)影響用戶體驗(yàn),所以我參考文檔寫(xiě)了直接上傳到阿里云oss獲取到文件訪問(wèn)路徑。
    2021-05-05
  • Flutter生命周期超詳細(xì)講解

    Flutter生命周期超詳細(xì)講解

    這篇文章主要為大家介紹了Flutter生命周期和App生命周期示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果

    OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果

    這篇文章主要介紹了如何利用OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)OpenGL有一定幫助,需要的可以參考一下
    2022-02-02

最新評(píng)論