真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用Pinyin4j怎么實(shí)現(xiàn)拼音分詞

使用Pinyin4j怎么實(shí)現(xiàn)拼音分詞?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比扶溝網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式扶溝網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋扶溝地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

使用maven引入相關(guān)的jar


 com.belerweb
 pinyin4j
 2.5.1

創(chuàng)建Pinyin4jUtil

package com.os.core.util.solr;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
/**
 * 漢語(yǔ)拼音工具類
 * Created by PengSongHe on 2017/2/9 0009.
 */
public class Pinyin4jUtil {
 public static void main(String[] args) {
  String str = "測(cè)試";
  String pinyin = Pinyin4jUtil.converterToSpell(str);
  System.out.println(str + " pin yin :" + pinyin);
  pinyin = Pinyin4jUtil.converterToFirstSpell(str);
  System.out.println(str + " short pin yin :" + pinyin);
 }
 /**
  * 漢字轉(zhuǎn)換位漢語(yǔ)拼音首字母,英文字符不變,特殊字符丟失 支持多音字,生成方式如(長(zhǎng)沙市長(zhǎng):cssc,zssz,zssc,cssz)
  *
  * @param chines 漢字
  * @return 拼音
  */
 public static String converterToFirstSpell(String chines) {
  StringBuffer pinyinName = new StringBuffer();
  char[] nameChar = chines.toCharArray();
  HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  for (int i = 0; i < nameChar.length; i++) {
   if (nameChar[i] > 128) {
    try {
     // 取得當(dāng)前漢字的所有全拼
     String[] strs = PinyinHelper.toHanyuPinyinStringArray(
       nameChar[i], defaultFormat);
     if (strs != null) {
      for (int j = 0; j < strs.length; j++) {
       // 取首字母
       pinyinName.append(strs[j].charAt(0));
       if (j != strs.length - 1) {
        pinyinName.append(",");
       }
      }
     }
     // else {
     // pinyinName.append(nameChar[i]);
     // }
    } catch (BadHanyuPinyinOutputFormatCombination e) {
     e.printStackTrace();
    }
   } else {
    pinyinName.append(nameChar[i]);
   }
   pinyinName.append(" ");
  }
  // return pinyinName.toString();
  return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));
 }
 /**
  * 漢字轉(zhuǎn)換位漢語(yǔ)全拼,英文字符不變,特殊字符丟失
  * 支持多音字,生成方式如(重當(dāng)參:zhongdangcen,zhongdangcan,chongdangcen
  * ,chongdangshen,zhongdangshen,chongdangcan)
  *
  * @param chines 漢字
  * @return 拼音
  */
 public static String converterToSpell(String chines) {
  StringBuffer pinyinName = new StringBuffer();
  char[] nameChar = chines.toCharArray();
  HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  for (int i = 0; i < nameChar.length; i++) {
   if (nameChar[i] > 128) {
    try {
     // 取得當(dāng)前漢字的所有全拼
     String[] strs = PinyinHelper.toHanyuPinyinStringArray(
       nameChar[i], defaultFormat);
     if (strs != null) {
      for (int j = 0; j < strs.length; j++) {
       pinyinName.append(strs[j]);
       if (j != strs.length - 1) {
        pinyinName.append(",");
       }
      }
     }
    } catch (BadHanyuPinyinOutputFormatCombination e) {
     e.printStackTrace();
    }
   } else {
    pinyinName.append(nameChar[i]);
   }
   pinyinName.append(" ");
  }
  // return pinyinName.toString();
  return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));
 }
 /**
  * 去除多音字重復(fù)數(shù)據(jù)
  *
  * @param theStr
  * @return
  */
 private static List> discountTheChinese(String theStr) {
  // 去除重復(fù)拼音后的拼音列表
  List> mapList = new ArrayList>();
  // 用于處理每個(gè)字的多音字,去掉重復(fù)
  Map onlyOne = null;
  String[] firsts = theStr.split(" ");
  // 讀出每個(gè)漢字的拼音
  for (String str : firsts) {
   onlyOne = new Hashtable();
   String[] china = str.split(",");
   // 多音字處理
   for (String s : china) {
    Integer count = onlyOne.get(s);
    if (count == null) {
     onlyOne.put(s, new Integer(1));
    } else {
     onlyOne.remove(s);
     count++;
     onlyOne.put(s, count);
    }
   }
   mapList.add(onlyOne);
  }
  return mapList;
 }
 /**
  * 解析并組合拼音,對(duì)象合并方案(推薦使用)
  *
  * @return
  */
 private static String parseTheChineseByObject(
   List> list) {
  Map first = null; // 用于統(tǒng)計(jì)每一次,集合組合數(shù)據(jù)
  // 遍歷每一組集合
  for (int i = 0; i < list.size(); i++) {
   // 每一組集合與上一次組合的Map
   Map temp = new Hashtable();
   // 第一次循環(huán),first為空
   if (first != null) {
    // 取出上次組合與此次集合的字符,并保存
    for (String s : first.keySet()) {
     for (String s1 : list.get(i).keySet()) {
      String str = s + s1;
      temp.put(str, 1);
     }
    }
    // 清理上一次組合數(shù)據(jù)
    if (temp != null && temp.size() > 0) {
     first.clear();
    }
   } else {
    for (String s : list.get(i).keySet()) {
     String str = s;
     temp.put(str, 1);
    }
   }
   // 保存組合數(shù)據(jù)以便下次循環(huán)使用
   if (temp != null && temp.size() > 0) {
    first = temp;
   }
  }
  String returnStr = "";
  if (first != null) {
   // 遍歷取出組合字符串
   for (String str : first.keySet()) {
    returnStr += (str + ",");
   }
  }
  if (returnStr.length() > 0) {
   returnStr = returnStr.substring(0, returnStr.length() - 1);
  }
  return returnStr;
 }
}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


本文名稱:使用Pinyin4j怎么實(shí)現(xiàn)拼音分詞
分享路徑:http://weahome.cn/article/gihjip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部