C\#한자 병 음 인 스 턴 스(다 음 자 지원)

5988 단어 c#한자 병 음
그 전에 프로젝트 의 수요 로 인해 중간 에 한자 병 음 과 첫 번 째 병 음 을 바 꾸 는 기능 이 필요 했다.이런 기능 이 대체적으로 성숙 해 졌 다 고 느 꼈 기 때문에 관련 코드 를 찾 았 다.먼저 눈 에 띄 는 것 은 다음 두 편의 글 이다.
1. C\#한자 병 음 변환(GB 2312 문자 모든 한자 집중 지원)
2. 자바 script 한자 와 병 음 상호 전환 을 실현 하 는 최종 방안
비교적 상세 하 게 쓰 여 져 있 고 소스 코드 가 제공 되 어 있 으 니 참고 하 시기 바 랍 니 다.
인터페이스의 수 요 를 고려 하여 첫 번 째 편 을 참고 했다.글 에서 작가 의 소스 코드 는 한자 의 병 음 전환 수 요 를 만족 시 킬 수 있 고 다른 특수 한 문자 에 대해 서도 보충 을 할 수 있다.부족 한 점 은 다 음 자 를 지원 하지 않 는 다 는 것 이다.다 음 자 를 지원 하 는 조회 가 필요 하기 때문에 뒤에 다른 글 을 찾 아 보 았 다.아직 만들어 지지 않 은 글 을 발견 했다.나중에 찾 아 보 니 한자 병 음 에 대해 마이크로소프트 가 Microsoft Visual Studio International Pack 을 제 공 했 고 강력 했다.그래서 해 봤 어 요.
우선 nuget 에서 해당 하 는 가방 을 참조 합 니 다.
PinYinConverter 찾기

간단 한 데모
한번 해 보 세 요.사용 도 아주 간단 합 니 다.ChineseChar 류 를 직접 사용 하여 포장 하고 바 꾸 면 됩 니 다.

string ch = Console.ReadLine();
ChineseChar cc = new ChineseChar(ch[0]);
var pinyins = cc.Pinyins.ToList();
pinyins.ForEach(Console.WriteLine);
결 과 는 다음 과 같다.

우 리 는 줄 의 다 음 자 는 hang,heng,xing 세 개가 있 는데 여기 서 음표 도 나 와 서 정말 편리 하 다 는 것 을 볼 수 있다.그리고 제 가 필요 한 기능 은 은행 에 입력 한 다음 에 병 음 으로 바 꾸 는 것 입 니 다.yinhang,yinheng,yinxing 입 니 다.  첫 번 째 조합 은 yh,yx 입 니 다.ChineseChar 같은 게 있 으 면 생각 이 쉬 워 요.
한자 병 음 류 패키지
1.먼저 입력 한 한 자 를 나 누 기
2.이 어 한자 마다 ChineseChar 로 여러 개의 병 음 을 얻는다.
3.숫자 를 빼 고,다시 빼 고,첫 글 자 를 추출 하고,다시 조합 하면 된다.
그래서 도움말 류 를 써 서 포장 하고 바 꾸 었 습 니 다.코드 는 다음 과 같 습 니 다.

  public class PinYinConverterHelp
  {
    public static PingYinModel GetTotalPingYin(string str)
    {
      var chs = str.ToCharArray();
      //         
      Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();
      for (int i = 0; i < chs.Length; i++)
      {
        var pinyins = new List<string>();
        var ch = chs[i];
        //        
        if (ChineseChar.IsValidChar(ch))
        {
          ChineseChar cc = new ChineseChar(ch);
          pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
        }
        else
        {
          pinyins.Add(ch.ToString());
        }

        //    ,   
        pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());
        //  
        pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
        if (pinyins.Any())
        {
          totalPingYins[i] = pinyins;
        }
      }
      PingYinModel result = new PingYinModel();
      foreach (var pinyins in totalPingYins)
      {
        var items = pinyins.Value;
        if (result.TotalPingYin.Count <= 0)
        {
          result.TotalPingYin = items;
          result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
        }
        else
        {
          //      
          var newTotalPingYins = new List<string>();
          foreach (var totalPingYin in result.TotalPingYin)
          {
            newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));
          }
          newTotalPingYins = newTotalPingYins.Distinct().ToList();
          result.TotalPingYin = newTotalPingYins;

          //       
          var newFirstPingYins = new List<string>();
          foreach (var firstPingYin in result.FirstPingYin)
          {
            newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
          }
          newFirstPingYins = newFirstPingYins.Distinct().ToList();
          result.FirstPingYin = newFirstPingYins;
        }
      }
      return result;
    }
  }

  public class PingYinModel
  {
    public PingYinModel()
    {
      TotalPingYin = new List<string>();
      FirstPingYin = new List<string>();
    }

    //  
    public List<string> TotalPingYin { get; set; }

    //  
    public List<string> FirstPingYin { get; set; }
  }

호출 방식:

 Console.WriteLine("     :");
 string str = Console.ReadLine();
var strs = PinYinConverterHelp.GetTotalPingYin(str).TotalPingYin;
var frists = PinYinConverterHelp.GetTotalPingYin(str).FirstPingYin;
 Console.WriteLine("   :" + String.Join(",", strs));
 Console.WriteLine("  :" + String.Join(",", frists));
Console.WriteLine();
결과:
 
현재 일부 생소 한 글 자 는 모두 지원 할 수 있 지만,일부 너무 편 파 적 인 것 은 아직 시도 해 보지 않 았 지만,일반 한자 에서 병 음 을 바 꾸 는 것 에 대해 서 는 다 음 자 를 지원 하 는 것 만으로 도 충분 하 다.
여 기 는 Microsoft Visual Studio International Pack 이라는 확장 패키지 안의 한자 병 음 기능 만 사 용 했 습 니 다.사실은 중국어,일본어,한국어,영어 등 각국 의 언어 가방 도 있 고 상호 전환,획득,글자 수 획득,심지어 필획 수 획득 등 강력 한 기능 을 실현 하 는 방법 을 제공 합 니 다.관심 이 있 는 친구 들 은 자체 적 으로 api 를 조회 할 수 있 습 니 다.
 소스 코드 공유
공 유 는 일종 의 미덕 이다.어떤 때 는 강 한 글 이 우리 의 기술 차원 을 향상 시 킬 수 있 지만 어떤 때 는 더 많은 수요 가 업무 차원 이 고 많은 작은 지식 응용의 공 유 는 우리 에 게 업무 차원 의 문 제 를 향상 시 킬 수 있다.나 눔 의 지식 이 조금 만 쓸모 가 있다 면 남 의 자식 을 해치 지 않 고 크 든 작 든 공부 하 는 것 이 므 로 여러분 들 이 용감하게 나 눌 수 있 기 를 바 랍 니 다.
 마지막 으로 소스 코드 를 공유 하여 여러분 께 잘못 과 부족 한 점 이 있 으 면 지적 해 주시 기 바 랍 니 다.
주소
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기