1
This commit is contained in:
Alex Yatskov 2016-12-05 21:32:14 -08:00
parent 60212ff4c1
commit 63c8268fcc

View File

@ -26,6 +26,7 @@ import (
"encoding/json"
"io"
"io/ioutil"
"regexp"
)
type epwingEntry struct {
@ -33,23 +34,48 @@ type epwingEntry struct {
Text string `json:"text"`
}
type epwingBook struct {
type epwingSubbook struct {
Title string `json:"title"`
Copyright string `json:"copyright"`
Entries []epwingEntry `json:"entries"`
}
type epwingDict struct {
CharacterCode string `json:"characterCode"`
DiscCode string `json:"discCode"`
SubBooks []epwingBook `json:"subBooks"`
type epwingBook struct {
CharCode string `json:"charCode"`
DiscCode string `json:"discCode"`
Subbooks []epwingSubbook `json:"subbooks"`
}
func extractDaijisenTerms(entry epwingEntry) []dbTerm {
// 3934
// (?P<kana>[^(【<]+)(?:【(?P<kanji>.*)】)?(?:<\?>(?P<native>.*)<\?>)?(?:(?P<tag>.*))?
// (?P<kana>[^(【〖]+)(?:【(?P<expression>.*)】)?(?:〖(?P<native>.*)〗)?(?:(?P<tag>.*))?
// "heading": "きれ‐あが・る【切れ上がる】",
// "text": "きれ‐あが・る【切れ上がる】\n動ラ五上の方まで切れる。また、目尻や額の生え際などが上の方へ上がっている。「―・った目元」\n"
// },
// {
// "heading": "きれ‐あじ【切れ味】‐あぢ",
// "text": "きれ‐あじ【切れ味】‐あぢ\n<?>刃物の切れぐあい。「―のいいナイフ」<?>才能・技などの鋭さ。「鋭い―の批評」「―のいいショット」\n"
// },
// {
// "heading": "き‐れい【×綺麗・奇麗】",
// "text": "き‐れい【×綺麗・奇麗】\n形動<?>[ナリ]<?>色・形などが華やかな美しさをもっているさま。「―な花」「―に着飾る」<?>姿・顔かたちが整っていて美しいさま。「―な脚」「―な女性」<?>声などが快く聞こえるさま。「―な発音」<?>よごれがなく清潔なさま。「手を―に洗う」「―な空気」「―な選挙」<?>男女間に肉体的な交渉がないさま。清純。「―な関係」<?>乱れたところがないさま。整然としているさま。「机の上を―に片づける」<?>(「きれいに」の形で)残りなく物事が行われるさま。すっかり。「―に忘れる」「―にたいらげる」→美しい[用法]\n派生きれいさ\n類語<?>)美しい・美美(びび)しい・煌(きら)やか・鮮やか・美麗・華麗・華美・鮮麗・流麗・優美・美的/(<?>)麗(うるわ)しい・見目よい・端整・端麗・秀麗・佳麗(かれい)・艶美(えんび)・艶麗(えんれい)・あでやか/(<?>)清い・清らか・清潔・清浄(せいじよう・しようじよう)・清澄・清冽(せいれつ)・無垢(むく)・純潔・潔白(けつぱく)\n"
// },
func extractDaijirinTerms(entry epwingEntry) []dbTerm {
exp := regexp.MustCompile(`(?P<kana>[^(【〖]+)(?:【(?P<expression>.*)】)?(?:〖(?P<native>.*)〗)?(?:(?P<tag>.*))?`)
matches := exp.FindStringSubmatch(entry.Heading)
results := make(map[string]string)
for i, name := range exp.SubexpNames() {
if i > 0 {
results[name] = matches[i]
}
}
return nil
}
func extractDaijisenKanji(entry epwingEntry) []dbKanji {
func extractDaijirinKanji(entry epwingEntry) []dbKanji {
return nil
}
@ -59,32 +85,30 @@ func exportEpwingDb(outputDir, title string, reader io.Reader, flags int) error
return err
}
var dict epwingDict
if err := json.Unmarshal(data, &dict); err != nil {
var book epwingBook
if err := json.Unmarshal(data, &book); err != nil {
return err
}
termExtractors := map[string]func(epwingEntry) []dbTerm{
"大辞泉": extractDaijisenTerms,
"三省堂 スーパー大辞林": extractDaijirinTerms,
}
var terms dbTermList
for _, subBook := range dict.SubBooks {
if extractor, ok := termExtractors[subBook.Title]; ok {
for _, entry := range subBook.Entries {
for _, subbook := range book.Subbooks {
if extractor, ok := termExtractors[subbook.Title]; ok {
for _, entry := range subbook.Entries {
terms = append(terms, extractor(entry)...)
}
}
}
kanjiExtractors := map[string]func(epwingEntry) []dbKanji{
"大辞泉": extractDaijisenKanji,
}
kanjiExtractors := map[string]func(epwingEntry) []dbKanji{}
var kanji dbKanjiList
for _, subBook := range dict.SubBooks {
if extractor, ok := kanjiExtractors[subBook.Title]; ok {
for _, entry := range subBook.Entries {
for _, subbook := range book.Subbooks {
if extractor, ok := kanjiExtractors[subbook.Title]; ok {
for _, entry := range subbook.Entries {
kanji = append(kanji, extractor(entry)...)
}
}