Load dictionary into Entry map

main
Elnu 11 months ago
parent df8e0f8903
commit 3d21311f12

@ -13,7 +13,7 @@ import (
"github.com/gorilla/mux"
)
var dict jmdict.Jmdict
var dict map[string]Entry
func LoadDict() error {
const jmdictFile = "JMdict.xml"
@ -21,10 +21,15 @@ func LoadDict() error {
if err != nil {
return err
}
dict, _, err = jmdict.LoadJmdict(reader)
jmdict, _, err := jmdict.LoadJmdict(reader)
if err != nil {
return err
}
dict = make(map[string]Entry)
for _, jmdictEntry := range jmdict.Entries {
entry := ParseEntry(&jmdictEntry)
dict[entry.Kanji] = entry
}
return nil
}
@ -39,7 +44,7 @@ type Definition struct {
PartOfSpeech []string
}
func ParseEntry(entry jmdict.JmdictEntry) Entry {
func ParseEntry(entry *jmdict.JmdictEntry) Entry {
kanji := ""
if len(entry.Kanji) > 0 {
kanji = entry.Kanji[0].Expression
@ -75,26 +80,22 @@ func Search(query string) queryResult {
otherResults := make([]Entry, 0)
truncated := false
count := 0
for _, jmdictEntry := range dict.Entries {
for kanji := range dict {
exactMatch := false
for _, kanji := range jmdictEntry.Kanji {
if kanji.Expression == query {
exactMatch = true
goto match
}
if strings.Contains(kanji.Expression, query) {
goto match
}
entry := dict[kanji]
if kanji == query {
exactMatch = true
goto match
}
if strings.Contains(kanji, query) {
goto match
}
// TODO: Skip if query contains kanji
for _, reading := range jmdictEntry.Readings {
if strings.Contains(reading.Reading, query) {
goto match
}
if strings.Contains(entry.Reading, query) {
goto match
}
continue
match:
entry := ParseEntry(jmdictEntry)
if exactMatch {
exactResults = append(exactResults, entry)
} else {
@ -116,9 +117,8 @@ func Search(query string) queryResult {
}
func Lookup(word string) *Entry {
for _, jmdictEntry := range dict.Entries {
entry := ParseEntry(jmdictEntry)
if entry.Kanji == word {
for kanji, entry := range dict {
if kanji == word {
return &entry
}
}