generated from ElnuDev/go-project
Load dictionary into Entry map
This commit is contained in:
parent
df8e0f8903
commit
3d21311f12
1 changed files with 20 additions and 20 deletions
40
dict/main.go
40
dict/main.go
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue