ホームページ >バックエンド開発 >Golang >Go 文字列からアクセントを効率的に削除するにはどうすればよいですか?

Go 文字列からアクセントを効率的に削除するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 20:09:31947ブラウズ

How to Efficiently Remove Accents from Go Strings?

Go 文字列: アクセントの削除

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 とルーン パッケージ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。