http://play.golang.org/p/H5E0ExL85d
Go を使用して、Peter Norvig のスペル チェック アルゴリズムをいくつか実装しました。
FIRST THREEの呼び出しが正しく機能し、目的の出力が得られるのは奇妙です。
しかし、2 番目から、「処理に時間がかかりすぎました」と表示されます。
誰かが私のコードを見て、何が問題なのか教えてもらえますか?
これは、おそらく間違っているスニペットです。
英語版の同じコードですべてが完璧に機能します。
英語はアルファベットあたり 1 バイト、この場合のアジア言語は 1 文字あたり 3 バイトであるため、UNICODE の形式と境界は言語によって異なります。
これは、完璧に機能していた英語用のアルゴリズムと同じアルゴリズムを実行しようとしています。しかし、これは機能していません。
total_set := []string{}
for _, elem := range splits {
if len(elem.str2) > 3 {
//deletion
total_set = append(total_set, elem.str1+elem.str2[3:])
//replace
for i:=0; i<len(koreanletter)/3; i++ {
total_set = append(total_set, elem.str1+string(koreanletter[3*i:3*(i+1)])+elem.str2[3:])
}
//transpose
if len(elem.str2) > 9 {
total_set = append(total_set, elem.str1+string(elem.str2[3:6])+string(elem.str2[:3])+elem.str2[9:])
}
} else {
//deletion
total_set = append(total_set, elem.str1)
}
//insertion
for _, c := range koreanletter {
total_set = append(total_set, elem.str1+string(c)+elem.str2)
}
return RemoveDuplicateStringArrayForKorean(total_set)
}
英語版は以下。これは完璧に機能しています。
//Edits1 is to measure the distance between strings.
func (model *Model) Edits1(word string) []string {
const alphabet = "abcdefghijklmnopqrstuvwxyz"
splits := []Pair{}
for i := 0; i <= len(word); i++ {
splits = append(splits, Pair{word[:i], word[i:]})
}
total_set := []string{}
for _, elem := range splits {
if len(elem.str2) > 0 {
//deletion
total_set = append(total_set, elem.str1+elem.str2[1:])
//replace
for _, c := range alphabet {
total_set = append(total_set, elem.str1+string(c)+elem.str2[1:])
}
//transpose
if len(elem.str2) > 1 {
total_set = append(total_set, elem.str1+string(elem.str2[1])+string(elem.str2[0])+elem.str2[2:])
}
} else {
//deletion
total_set = append(total_set, elem.str1)
}
//insertion
for _, c := range alphabet {
total_set = append(total_set, elem.str1+string(c)+elem.str2)
}
}
return RemoveDuplicateStringArrayLowerCase(total_set)
}
追加: 順序付けされた引数で、現在 3 つのことが機能しています。
韓国語の手紙に欠落している文字はありません。
エラーをより具体的に見ることができる方法はありますか? 私は理解できません。