diff --git a/dajarep.go b/dajarep.go index 459c758..da742e0 100644 --- a/dajarep.go +++ b/dajarep.go @@ -1,7 +1,6 @@ package dajarep import ( - "math" "regexp" "strings" @@ -23,6 +22,7 @@ type word struct { type sentence struct { str string kana string + yomi string words []word } @@ -47,10 +47,13 @@ func isDajare(sen sentence) (bool, string) { rStr := regexp.MustCompile(w.str) rKana := regexp.MustCompile(fixWord(w.kana)) hitStr := rStr.FindAllString(sen.str, -1) - hitKana := rKana.FindAllString(sen.kana, -1) + hitKana1 := rKana.FindAllString(sen.kana, -1) hitKana2 := rKana.FindAllString(fixSentence(sen.kana), -1) + hitKana3 := rKana.FindAllString(sen.yomi, -1) + hitKana4 := rKana.FindAllString(fixSentence(sen.yomi), -1) + //ある単語における 原文の一致文字列数<フリガナでの一致文字列数 → 駄洒落の読みが存在 - if len(hitStr) < int(math.Max(float64(len(hitKana)), float64(len(hitKana2)))) { + if len(hitStr) < most(len(hitKana1), len(hitKana2), len(hitKana3), len(hitKana4)) { return true, w.kana } } @@ -115,6 +118,8 @@ func getSentences(text string) []sentence { tokens := t.Tokenize(senstr[i]) var words []word var kana string + var yomi string + for j := 0; j < len(tokens); j++ { tk := tokens[j] ft := tk.Features() @@ -125,6 +130,7 @@ func getSentences(text string) []sentence { } words = append(words, w) kana += ft[7] + yomi += ft[8] } } sentences = append(sentences, @@ -132,7 +138,18 @@ func getSentences(text string) []sentence { str: senstr[i], words: words, kana: kana, + yomi: yomi, }) } return sentences } + +func most(num ...int) int { + i := 0 + for _, n := range num { + if n > i { + i = n + } + } + return i +} diff --git a/dajarep_test.go b/dajarep_test.go index 908da14..461a218 100644 --- a/dajarep_test.go +++ b/dajarep_test.go @@ -20,7 +20,9 @@ func TestDajarep(t *testing.T) { イカは如何なものか 親譲りの無鉄砲で子供の時から損ばかりしている マイケル・ジョーダンが冗談を言った -知事が縮む` +知事が縮む +鶏には取り憑かない +破壊についての和解` ans := `アルミ缶の上にあるミカン 智代子のチョコ 布団が吹っ飛んだ @@ -29,7 +31,8 @@ func TestDajarep(t *testing.T) { 傘を貸さない イカは如何なものか マイケル・ジョーダンが冗談を言った -知事が縮む` +知事が縮む +鶏には取り憑かない` d, _ := Dajarep(input) res := strings.Join(d, "\n") if res != ans {