Heim  >  Artikel  >  Backend-Entwicklung  >  C# Konvertieren chinesischer Zeichen in Pinyin (unterstützt multiphonetische Zeichen)

C# Konvertieren chinesischer Zeichen in Pinyin (unterstützt multiphonetische Zeichen)

黄舟
黄舟Original
2017-02-06 16:46:282535Durchsuche

Aufgrund der Projektanforderungen brauchte ich eine Funktion zum Konvertieren chinesischer Zeichen in Pinyin und die erste Rechtschreibung für Abfragen. Ich hatte das Gefühl, dass diese Funktion im Grunde ausgereift ist, also suchte ich nach relevanten Codes Folgende zwei Artikel

C# Konvertieren chinesischer Zeichen in Pinyin (Unterstützt alle chinesischen Zeichen im GB2312-Zeichensatz) (http://www.cnblogs.com/cxd4321/p/4203383.html)

【Waren】JS-Version chinesischer Schriftzeichen und Pinyin Die ultimative Lösung für die gegenseitige Konvertierung mit einer einfachen JS-Pinyin-Eingabemethode (http://www.cnblogs.com/liuxianan/p/pinyinjs.html)

Vielen Dank an die beiden Blogger für ihre umfassenden und detaillierten Texte. Alle stellen den Quellcode zur Verfügung, auf den Sie verweisen können.

Aufgrund der Anforderungen der Schnittstelle habe ich auf den ersten Artikel verwiesen, der im Wesentlichen die Anforderungen der Konvertierung chinesischer Zeichen in Pinyin erfüllen kann. Für andere Sonderzeichen können Sie auch hinzufügen Eventuelle Mängel. Es unterstützt einfach keine multiphonetischen Zeichen. Da wir Abfragen mit mehreren phonetischen Zeichen unterstützen müssen, habe ich später andere Artikel überprüft und festgestellt, dass es keine vorgefertigten Artikel gibt (vielleicht sind meine Suchfähigkeiten schlecht).

Später habe ich gesucht und festgestellt, dass Microsoft für die Konvertierung chinesischer Schriftzeichen in Pinyin das Microsoft Visual Studio International Pack bereitgestellt hat, und es ist sehr leistungsfähig. Also habe ich es versucht

Referenzieren Sie zuerst das entsprechende Paket in Nuget

und suchen Sie nach PinYinConverter

C# Konvertieren chinesischer Zeichen in Pinyin (unterstützt multiphonetische Zeichen)

Einfache Demo

Klein Probieren Sie es aus, es ist sehr einfach zu verwenden, verwenden Sie einfach die ChineseChar-Klasse direkt als Ersatz

string ch = Console.ReadLine();
ChineseChar cc = new ChineseChar(ch[0]);
var pinyins = cc.Pinyins.ToList();
pinyins.ForEach(Console.WriteLine);

Die Ergebnisse sind wie folgt:

C# Konvertieren chinesischer Zeichen in Pinyin (unterstützt multiphonetische Zeichen)

Wir können sehen, dass es drei polyphone Zeichen für 行 gibt: Hang, Heng und Xing. Sogar die phonetischen Symbole werden hier angezeigt, was wirklich praktisch ist. Die Funktion, die ich brauche, besteht darin, „Bank“ einzugeben und sie dann in Pinyin als „Yinhang, Yinheng, Yinxing“ umzuwandeln, und das erste Pinyin ist „yh, yx“. Mit der ChineseChar-Klasse ist die Idee einfach.

Chinesisches Zeichen in Pinyin-Paket

1. Teilen Sie zuerst die eingegebenen chinesischen Zeichen auf

2. Verwenden Sie dann ChineseChar, um mehrere Pinyin für jedes chinesische Zeichen zu erhalten

3. Entfernen Sie dann die Zahlen, entfernen Sie Duplikate, extrahieren Sie das erste Zeichen und kombinieren Sie sie dann

Also habe ich eine Hilfsklasse zum Ersetzen geschrieben, der Code lautet wie folgt:

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;
        }
    }

Ergebnis :

C# Konvertieren chinesischer Zeichen in Pinyin (unterstützt multiphonetische Zeichen)

Ich habe bisher einige seltene Zeichen ausprobiert und sie werden alle unterstützt, aber einige, die für die Konvertierung in allgemeine chinesische Zeichen zu voreingenommen sind, habe ich nicht ausprobiert Pinyin, polyphone Zeichen werden hier unterstützt. Das reicht.


Hier verwenden wir nur die chinesische Zeichen-zu-Pinyin-Funktion im Microsoft Visual Studio International Pack-Erweiterungspaket. Tatsächlich gibt es auch Sprachpakete für Chinesisch, Japanisch, Koreanisch. Englisch und andere Länder und bietet Methoden zur Realisierung leistungsstarker Funktionen wie gegenseitige Übertragung, Erfassung, Wortzählung und sogar Strichzählung. Interessierte Freunde können die API selbst überprüfen.


Quellcode-Teilen


Teilen ist eine Tugend, manchmal können tolle Artikel unser technisches Niveau verbessern, manchmal aber auch mehr Die Anforderungen liegen auf Unternehmensebene, und die gemeinsame Nutzung vieler kleiner Wissensanwendungen kann uns dabei helfen, Probleme auf Unternehmensebene zu verbessern. Solange die geteilten Wissenspunkte nützlich sind und andere nicht in die Irre führen, egal wie groß oder klein sie sind, ist es eine Art Lernen, also hoffe ich, dass jeder mutig genug ist, es zu teilen.

Adresse: https://github.com/qq1206676756/PinYinParse

Das Obige ist der Inhalt der Konvertierung chinesischer C#-Zeichen in Pinyin (unterstützt multiphonetische Zeichen). Bitte beachten Sie die chinesische PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn