diff --git a/README.adoc b/README.adoc index cab0195..c27afa3 100644 --- a/README.adoc +++ b/README.adoc @@ -107,23 +107,29 @@ $ ojosama -charcode sjis testdata/sample1_sjis.txt Goのコードとして使う場合は以下のように使用します。 +一部変換ロジックの中でランダムな選択を行うため、乱数のシード値を設定します。 + [source,go] ---- package main import ( - "fmt" + "fmt" + "math/rand" + "time" - "github.com/jiro4989/ojosama" + "github.com/jiro4989/ojosama" ) func main() { - s := "ハーブがありました!" - text, err := ojosama.Convert(s, nil) - if err != nil { - panic(err) - } - fmt.Println(text) + rand.Seed(time.Now().UnixNano()) + + s := "ハーブがありました!" + text, err := ojosama.Convert(s, nil) + if err != nil { + panic(err) + } + fmt.Println(text) } ---- diff --git a/cmd/ojosama/main.go b/cmd/ojosama/main.go index 2d4a4d6..50e3da5 100644 --- a/cmd/ojosama/main.go +++ b/cmd/ojosama/main.go @@ -3,7 +3,9 @@ package main import ( "fmt" "io" + "math/rand" "os" + "time" "github.com/jiro4989/ojosama" "golang.org/x/text/encoding/japanese" @@ -113,6 +115,8 @@ func main() { } func run(s string, args *CmdArgs) (int, error) { + rand.Seed(time.Now().UnixNano()) + text, err := ojosama.Convert(s, nil) if err != nil { return exitStatusConvertError, err diff --git a/examples/sample1.go b/examples/sample1.go index 232cc40..d528cc5 100644 --- a/examples/sample1.go +++ b/examples/sample1.go @@ -2,11 +2,15 @@ package main import ( "fmt" + "math/rand" + "time" "github.com/jiro4989/ojosama" ) func main() { + rand.Seed(time.Now().UnixNano()) + s := "ハーブがありました!" text, err := ojosama.Convert(s, nil) if err != nil { diff --git a/ojosama.go b/ojosama.go index 2475de4..327e45b 100644 --- a/ojosama.go +++ b/ojosama.go @@ -41,7 +41,6 @@ import ( "math/rand" "regexp" "strings" - "time" "github.com/ikawaha/kagome-dict/ipa" "github.com/ikawaha/kagome/v2/tokenizer" @@ -54,9 +53,9 @@ import ( // ConvertOption はお嬢様変換時のオプショナルな設定。 type ConvertOption struct { - // 句点を!に変換する機能をOFFにする。句点を!に変換してしまうと変換元の文章 - // のニュアンスを破壊する可能性があるため、オプションパラメータで無効にでき - // るようにする。 + // 句点を!に変換する機能をOFFにする。 + // 句点を!に変換してしまうと変換元の文章のニュアンスを破壊する可能性があるため、 + // オプションパラメータで無効にできるようにする。 DisableKutenToExclamation bool forceAppendLongNote forceAppendLongNote // 単体テスト用のパラメータ @@ -86,17 +85,16 @@ var ( shuffleElementsKutenToExclamation = []string{"。", "。", "!", "❗"} ) -func init() { - rand.Seed(time.Now().UnixNano()) -} - // Convert はテキストを壱百満天原サロメお嬢様風の口調に変換して返却する。 // // 簡単に説明すると「ハーブですわ!」を「おハーブですわ~~!!!」と変換する。 // それ以外にもいくつかバリエーションがある。 // -// opt は挙動を微調整するためのオプショナルなパラメータ。不要であれば nil を渡せ -// ば良い。 +// opt は挙動を微調整するためのオプショナルなパラメータ。 +// 不要であれば nil を渡せば良い。 +// +// 一部変換の途中でランダムに要素を選択するため、 +// 呼び出し側で乱数のシードの初期化を行うこと。 func Convert(src string, opt *ConvertOption) (string, error) { t, err := tokenizer.New(ipa.Dict(), tokenizer.OmitBosEos()) if err != nil { diff --git a/ojosama_test.go b/ojosama_test.go index 8ee6da0..97deae9 100644 --- a/ojosama_test.go +++ b/ojosama_test.go @@ -1,12 +1,27 @@ package ojosama import ( + "fmt" + "math/rand" "testing" + "time" "github.com/jiro4989/ojosama/internal/chars" "github.com/stretchr/testify/assert" ) +func ExampleConvert() { + rand.Seed(time.Now().UnixNano()) + got, err := Convert("ハーブです", nil) + + fmt.Println("got: " + got) + fmt.Println(fmt.Sprintf("err: %v", err)) + + // Output: + // got: おハーブですわ + // err: +} + func TestConvert(t *testing.T) { opt := &ConvertOption{ DisableKutenToExclamation: true,