添加联想词库
This commit is contained in:
@@ -406,6 +406,7 @@ static NSString *KBFormatMB(uint64_t bytes) {
|
||||
case KBSuggestionEngineTypeBopomofo:
|
||||
return [self kb_bopomofoSuggestionCharacterSet];
|
||||
case KBSuggestionEngineTypeLatin:
|
||||
case KBSuggestionEngineTypeEnglish:
|
||||
case KBSuggestionEngineTypePortuguese:
|
||||
case KBSuggestionEngineTypeIndonesian:
|
||||
case KBSuggestionEngineTypePinyinSimplified:
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
case KBSuggestionEngineTypeBopomofo:
|
||||
return [self kb_bopomofoSuggestionCharacterSet];
|
||||
case KBSuggestionEngineTypeLatin:
|
||||
case KBSuggestionEngineTypeEnglish:
|
||||
case KBSuggestionEngineTypePortuguese:
|
||||
case KBSuggestionEngineTypeIndonesian:
|
||||
case KBSuggestionEngineTypePinyinSimplified:
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef NS_ENUM(NSInteger, KBSuggestionEngineType) {
|
||||
KBSuggestionEngineTypeLatin = 0, // 拉丁字母(英语)
|
||||
KBSuggestionEngineTypeLatin = 0, // 拉丁字母(兼容旧值)
|
||||
KBSuggestionEngineTypeEnglish, // 英语
|
||||
KBSuggestionEngineTypeSpanish, // 西班牙语
|
||||
KBSuggestionEngineTypePortuguese, // 葡萄牙语
|
||||
KBSuggestionEngineTypeIndonesian, // 印度尼西亚语
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
@property (nonatomic, strong) NSDictionary<NSString *, NSArray<NSString *> *> *pinyinToTraditionalMap;
|
||||
@property (nonatomic, strong) NSDictionary<NSString *, NSArray<NSString *> *> *bopomofoToChineseMap;
|
||||
@property (nonatomic, copy) NSArray<NSString *> *spanishWords;
|
||||
@property (nonatomic, copy) NSArray<NSString *> *englishWords;
|
||||
@property (nonatomic, copy) NSArray<NSString *> *portugueseWords;
|
||||
@property (nonatomic, copy) NSArray<NSString *> *indonesianWords;
|
||||
@end
|
||||
@@ -42,6 +43,7 @@
|
||||
_pinyinToTraditionalMap = [self kb_loadPinyinToTraditionalMap];
|
||||
_bopomofoToChineseMap = [self kb_loadBopomofoToChineseMap];
|
||||
_spanishWords = [self kb_loadSpanishWords];
|
||||
_englishWords = [self kb_loadEnglishWords];
|
||||
_portugueseWords = [self kb_loadPortugueseWords];
|
||||
_indonesianWords = [self kb_loadIndonesianWords];
|
||||
}
|
||||
@@ -52,6 +54,8 @@
|
||||
if (prefix.length == 0 || limit == 0) { return @[]; }
|
||||
|
||||
switch (self.engineType) {
|
||||
case KBSuggestionEngineTypeEnglish:
|
||||
return [self kb_englishSuggestionsForPrefix:prefix limit:limit];
|
||||
case KBSuggestionEngineTypeSpanish:
|
||||
return [self kb_spanishSuggestionsForPrefix:prefix limit:limit];
|
||||
case KBSuggestionEngineTypePortuguese:
|
||||
@@ -171,6 +175,8 @@
|
||||
self.engineType = KBSuggestionEngineTypeLatin;
|
||||
} else if ([engineTypeString isEqualToString:@"spanish"]) {
|
||||
self.engineType = KBSuggestionEngineTypeSpanish;
|
||||
} else if ([engineTypeString isEqualToString:@"english"]) {
|
||||
self.engineType = KBSuggestionEngineTypeEnglish;
|
||||
} else if ([engineTypeString isEqualToString:@"portuguese"]) {
|
||||
self.engineType = KBSuggestionEngineTypePortuguese;
|
||||
} else if ([engineTypeString isEqualToString:@"indonesian"]) {
|
||||
@@ -187,6 +193,55 @@
|
||||
NSLog(@"[KBSuggestionEngine] Engine type set to: %@", engineTypeString);
|
||||
}
|
||||
|
||||
#pragma mark - English Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_englishSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
NSArray<NSString *> *matches = [self kb_suggestionsFromWordList:self.englishWords
|
||||
prefix:prefix
|
||||
limit:limit];
|
||||
if (matches.count == 0) {
|
||||
return [self kb_latinSuggestionsForPrefix:prefix limit:limit];
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
|
||||
- (NSArray<NSString *> *)kb_loadEnglishWords {
|
||||
NSString *path = [[NSBundle mainBundle] pathForResource:@"english_words" ofType:@"json"];
|
||||
if (!path) {
|
||||
NSLog(@"[KBSuggestionEngine] english_words.json not found, using default words");
|
||||
return [self.class kb_defaultWords];
|
||||
}
|
||||
|
||||
NSData *data = [NSData dataWithContentsOfFile:path];
|
||||
if (!data) {
|
||||
NSLog(@"[KBSuggestionEngine] Failed to read english_words.json");
|
||||
return [self.class kb_defaultWords];
|
||||
}
|
||||
|
||||
NSError *error = nil;
|
||||
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
|
||||
if (error || ![json isKindOfClass:NSDictionary.class]) {
|
||||
NSLog(@"[KBSuggestionEngine] Failed to parse english_words.json: %@", error);
|
||||
return [self.class kb_defaultWords];
|
||||
}
|
||||
|
||||
NSArray *wordsArray = json[@"words"];
|
||||
if (![wordsArray isKindOfClass:NSArray.class]) {
|
||||
NSLog(@"[KBSuggestionEngine] Invalid words array in english_words.json");
|
||||
return [self.class kb_defaultWords];
|
||||
}
|
||||
|
||||
NSMutableArray<NSString *> *result = [NSMutableArray array];
|
||||
for (id item in wordsArray) {
|
||||
if ([item isKindOfClass:NSString.class]) {
|
||||
[result addObject:item];
|
||||
}
|
||||
}
|
||||
|
||||
NSLog(@"[KBSuggestionEngine] Loaded %lu English words", (unsigned long)result.count);
|
||||
return result.count > 0 ? [result copy] : [self.class kb_defaultWords];
|
||||
}
|
||||
|
||||
#pragma mark - Latin Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_latinSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
|
||||
48267
CustomKeyboard/Resource/english_words.json
Normal file
48267
CustomKeyboard/Resource/english_words.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user