├── README.md ├── cmd └── genshijin │ └── main.go ├── genshijin.go └── genshijin_test.go /README.md: -------------------------------------------------------------------------------- 1 | # genshijin 2 | 3 | ニホンゴ ニュウリョク スル ゲンシジン シャベル 4 | 5 | ## Usage 6 | 7 | ```go 8 | genshijin.Shaberu("原始人語に変換する") 9 | // ゲンシ ジンゴ ヘンカン スル 10 | ``` 11 | 12 | ## Installation 13 | 14 | ``` 15 | $ go get github.com/mattn/genshijin 16 | ``` 17 | 18 | ## License 19 | 20 | MIT 21 | 22 | ## Author 23 | 24 | Yasuhiro Matsumoto (a.k.a. mattn) 25 | -------------------------------------------------------------------------------- /cmd/genshijin/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bufio" 5 | "fmt" 6 | "log" 7 | "os" 8 | 9 | "github.com/mattn/genshijin" 10 | ) 11 | 12 | func main() { 13 | scanner := bufio.NewScanner(os.Stdin) 14 | for scanner.Scan() { 15 | fmt.Println(genshijin.Shaberu(scanner.Text())) 16 | } 17 | if scanner.Err() != nil { 18 | log.Fatal(scanner.Err()) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /genshijin.go: -------------------------------------------------------------------------------- 1 | package genshijin 2 | 3 | import ( 4 | "strings" 5 | 6 | "github.com/ikawaha/kagome/tokenizer" 7 | ) 8 | 9 | // Shaberu ヘンスウ s イレ ル オレ ゲンシジン カエ ス 10 | func Shaberu(s string) string { 11 | t := tokenizer.New() 12 | text := strings.TrimSpace(s) 13 | if text == "" { 14 | return "" 15 | } 16 | tokens := t.Tokenize(text) 17 | var items []string 18 | for _, token := range tokens { 19 | features := token.Features() 20 | if len(features) == 0 || token.Surface == "BOS" || token.Surface == "EOS" { 21 | continue 22 | } 23 | if features[0] == "助詞" || features[6] == "*" { 24 | continue 25 | } 26 | items = append(items, features[7]) 27 | } 28 | return strings.Join(items, " ") 29 | } 30 | -------------------------------------------------------------------------------- /genshijin_test.go: -------------------------------------------------------------------------------- 1 | package genshijin 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func TestShaberu(t *testing.T) { 8 | tests := []struct { 9 | input string 10 | want string 11 | }{ 12 | {"大いなる力には大いなる責任が伴う", "オオイナル チカラ オオイナル セキニン トモナウ"}, 13 | {"私は今日母と焼き肉を食べた", "ワタシ キョウ ハハ ヤキニク タベ タ"}, 14 | {"私は今日母を焼き肉にした", "ワタシ キョウ ハハ ヤキニク シ タ"}, 15 | {"菜の花や月は東に日は西に", "ナノハナ ツキ ヒガシ ヒ ニシ"}, 16 | {"天は人の上に人を造らず人の下に人を造らず", "テン ヒト ウエ ヒト ツクラ ズ ヒト シタ ヒト ツクラ ズ"}, 17 | {"雄弁は銀沈黙は金", "ユウベン ギン チンモク キン"}, 18 | {"人民の人民による人民のための政治", "ジンミン ジンミン ジンミン タメ セイジ"}, 19 | {"母ちゃんがタイ人と結婚して苗字がルーマチャイ・ホーマチャイになった", "カアチャン タイ ジン ケッコン シ ミョウジ ナッ タ"}, 20 | } 21 | 22 | for _, test := range tests { 23 | want := test.want 24 | got := Shaberu(test.input) 25 | if got != want { 26 | t.Fatalf("オレ %q キタイ シ タ, オマエ %q ニュウリョク シ タ", want, got) 27 | } 28 | } 29 | } 30 | --------------------------------------------------------------------------------