Go では、文字列からアクセントを削除し、アクセントのない同等の文字列に変換することが特定の課題となります。ここでは、問題の調査と考えられる解決策を示します。
この問題を解決する試みの 1 つは、「Performing Magic」というタイトルのブログで提供されている例に基づく関数の実装です。この例には、unicode/norm パッケージと text/transform パッケージの使用が含まれています。
<code class="go">package main import ( "bytes" "code.google.com/p/go.text/transform" "code.google.com/p/go.text/unicode/norm" "fmt" "unicode" ) func isMn(r rune) bool { return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks } func main() { r := bytes.NewBufferString("Your Śtring") t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC) r = transform.NewReader(r, t) fmt.Println(r) }</code>
ただし、この実装には制限がないわけではありません。 Go のより新しいバージョン (1.5 以降) では、その機能に影響を与える可能性のある変更が導入されています。
Go 1.5 では、ルーン パッケージが導入されました。これには、簡単な削除機能が含まれています。アクセントの削除プロセス。
<code class="go">func Remove() transform.Transformer</code>
Remove 関数は一連の Unicode カテゴリ コードを受け入れ、変換された文字列からそれらのカテゴリに該当するルーン文字を削除します。たとえば、非スペーシング マーク (Mn) を削除するには、次のコマンドを使用できます。
<code class="go">t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)</code>
この変換チェーンは、アクセント付き文字をアクセント付きでない同等の文字に変換し、アクセントを削除するためのより効果的で簡潔なソリューションになります。行きましょう
以上がGo 文字列からアクセントを効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。