chengjie vor 3 Monaten
Ursprung
Commit
18456b4d44
1 geänderte Dateien mit 56 neuen und 19 gelöschten Zeilen
  1. 56 19
      src/util/stringClass.js

+ 56 - 19
src/util/stringClass.js

@@ -1030,23 +1030,25 @@ export const stringUtils = {
1030 1030
             allForms.add(originalWord);
1031 1031
         }
1032 1032
         
1033
-        // 检查是否是不规则
1034
-        for (const [base, forms] of Object.entries(stringUtils.irregularVerbs)) {
1033
+        // 检查是否是不规则形容词/副
1034
+        for (const [base, forms] of Object.entries(stringUtils.irregularAdjectives)) {
1035 1035
             if (base === lowerWord || forms.includes(lowerWord)) {
1036 1036
                 // 添加原形和所有变形
1037 1037
                 allForms.add(base);
1038 1038
                 forms.forEach(form => allForms.add(form));
1039
-                // 不规则动词处理完成后继续处理其他类型
1039
+                // 不规则形容词处理完成后直接返回,避免进一步处理
1040
+                return [...allForms];
1040 1041
             }
1041 1042
         }
1042
-        
1043
-        // 不规则形容词/副词检查
1044
-        for (const [base, forms] of Object.entries(stringUtils.irregularAdjectives)) {
1043
+
1044
+        // 检查是否是不规则动词
1045
+        for (const [base, forms] of Object.entries(stringUtils.irregularVerbs)) {
1045 1046
             if (base === lowerWord || forms.includes(lowerWord)) {
1046 1047
                 // 添加原形和所有变形
1047 1048
                 allForms.add(base);
1048 1049
                 forms.forEach(form => allForms.add(form));
1049
-                // 不规则形容词处理完成后继续处理其他类型
1050
+                // 不规则动词处理完成后直接返回,避免进一步处理
1051
+                return [...allForms];
1050 1052
             }
1051 1053
         }
1052 1054
 
@@ -1054,6 +1056,8 @@ export const stringUtils = {
1054 1056
         if (stringUtils.irregularNouns[lowerWord]) {
1055 1057
             allForms.add(lowerWord); // 添加原词
1056 1058
             stringUtils.irregularNouns[lowerWord].forEach(form => allForms.add(form));
1059
+            // 不规则名词处理完成后直接返回,避免进一步处理
1060
+            return [...allForms];
1057 1061
         }
1058 1062
 
1059 1063
         // 不规则名词检查(复数形式)
@@ -1062,6 +1066,8 @@ export const stringUtils = {
1062 1066
                 allForms.add(singular);
1063 1067
                 allForms.add(lowerWord); // 添加原词
1064 1068
                 plurals.forEach(form => allForms.add(form));
1069
+                // 不规则名词处理完成后直接返回,避免进一步处理
1070
+                return [...allForms];
1065 1071
             }
1066 1072
         }
1067 1073
         
@@ -1074,6 +1080,14 @@ export const stringUtils = {
1074 1080
             'will': ['will', 'would', "won't", "wouldn't"],
1075 1081
             'must': ['must', 'have to', 'has to', 'had to', "mustn't"],
1076 1082
             
1083
+            // 特殊形容词及其变形
1084
+            'good': ['good', 'better', 'best', 'well'],
1085
+            'bad': ['bad', 'worse', 'worst', 'badly'],
1086
+            'better': ['better', 'good', 'best', 'well'],
1087
+            'best': ['best', 'good', 'better', 'well'],
1088
+            'worse': ['worse', 'bad', 'worst', 'badly'],
1089
+            'worst': ['worst', 'bad', 'worse', 'badly'],
1090
+            
1077 1091
             // 特殊副词
1078 1092
             'early': ['early', 'earlier', 'earliest'],
1079 1093
             'only': ['only'],
@@ -1085,7 +1099,8 @@ export const stringUtils = {
1085 1099
             'monthly': ['monthly'],
1086 1100
             'yearly': ['yearly'],
1087 1101
             'daily': ['daily'],
1088
-            'badly': ['badly', 'worse', 'worst'], // 对应bad的副词形式
1102
+            'well': ['well', 'better', 'best', 'good'],
1103
+            'badly': ['badly', 'worse', 'worst', 'bad'], // 对应bad的副词形式
1089 1104
             
1090 1105
             // 特殊动词
1091 1106
             'play': ['play', 'plays', 'played', 'playing'],
@@ -1093,11 +1108,15 @@ export const stringUtils = {
1093 1108
             'pay': ['pay', 'pays', 'paid', 'paying'],
1094 1109
             'lay': ['lay', 'lays', 'laid', 'laying'],
1095 1110
             'say': ['say', 'says', 'said', 'saying'],
1111
+            'go': ['go', 'goes', 'went', 'gone', 'going'],
1112
+            'went': ['went', 'go', 'gone', 'going', 'goes'],
1096 1113
             
1097 1114
             // 特殊名词
1098 1115
             'box': ['box', 'boxes'],
1099 1116
             'fox': ['fox', 'foxes'],
1100 1117
             'tax': ['tax', 'taxes'],
1118
+            'child': ['child', 'children'],
1119
+            'children': ['children', 'child'],
1101 1120
             'bush': ['bush', 'bushes'],
1102 1121
             'dish': ['dish', 'dishes'],
1103 1122
             'church': ['church', 'churches'],
@@ -1145,20 +1164,18 @@ export const stringUtils = {
1145 1164
             return [...allForms];
1146 1165
         }
1147 1166
         
1148
-        let foundIrregular=false;
1149 1167
         // 检查是否是特殊单词的变形
1150 1168
         for (const [base, forms] of Object.entries(specialWords)) {
1151 1169
             if (forms.includes(lowerWord)) {
1170
+                // 添加基本形式
1171
+                allForms.add(base);
1172
+                // 添加所有变形
1152 1173
                 forms.forEach(form => allForms.add(form));
1153
-                foundIrregular = true;
1174
+                // 找到特殊单词变形后直接返回,避免进一步处理
1175
+                return [...allForms];
1154 1176
             }
1155 1177
         }
1156 1178
         
1157
-        // 如果已经找到不规则变形,直接返回结果
1158
-        if (foundIrregular) {
1159
-            return [...allForms];
1160
-        }
1161
-        
1162 1179
         // 获取单词的原形(基本形式)
1163 1180
         const possibleBaseWords = [];
1164 1181
         
@@ -1520,12 +1537,12 @@ export const stringUtils = {
1520 1537
         }
1521 1538
         
1522 1539
         // 过滤掉一些明显错误的变形
1523
-        if (form.endsWith('wently') || form.endsWith('wents') || form.endsWith('bett') || 
1540
+        if (form.endsWith('wently') || form.endsWith('wents') || form.endsWith('bett') || form.endsWith('bette') || 
1524 1541
             form.endsWith('betterrest') || form.endsWith('betterly') || 
1525 1542
             form.endsWith('childrens') || form.endsWith('childrenned') || form.endsWith('childrenning') ||
1526 1543
             form.endsWith('walke') || form.endsWith('plann') || form.endsWith('planne') ||
1527
-            form.endsWith('us') || form.endsWith('studi') || form.endsWith('knive') ||
1528
-            form.endsWith('micer') || form.endsWith('micest') || form.endsWith('micely') ||
1544
+            form.endsWith('us') || form.endsWith('studi') || form.endsWith('knive') || form.endsWith('knif') ||
1545
+            form.endsWith('micer') || form.endsWith('micest') || form.endsWith('micely') || form.endsWith('mices') || form.endsWith('miced') || form.endsWith('micing') ||
1529 1546
             form.endsWith('quicklier') || form.endsWith('quickliest') || form.endsWith('quicklies') ||
1530 1547
             form.endsWith('happilier') || form.endsWith('happiliest') || form.endsWith('happilies') ||
1531 1548
             form.endsWith('bookser') || form.endsWith('booksest') || form.endsWith('booksly') ||
@@ -1534,7 +1551,27 @@ export const stringUtils = {
1534 1551
             form.endsWith('knivesser') || form.endsWith('knivessest') || form.endsWith('knivesly') ||
1535 1552
             form.endsWith('citi') || form.endsWith('citie') ||
1536 1553
             form.endsWith('fasterrest') || form.endsWith('fasterly') ||
1537
-            form.endsWith('faste')) {
1554
+            form.endsWith('faste') || form.endsWith('usedding') || form.endsWith('runn') || form.endsWith('runne') ||
1555
+            form.endsWith('runned') || form.endsWith('runnest') || form.endsWith('runly') ||
1556
+            form.endsWith('bigged') || form.endsWith('bigging') || form.endsWith('bigly') ||
1557
+            form.endsWith('comput') || form.endsWith('beautifuls')) {
1558
+            return false;
1559
+        }
1560
+        
1561
+        // 特殊单词的错误变形过滤
1562
+        if (lowerWord === 'better' && (form === 'bet' || form === 'bette')) {
1563
+            return false;
1564
+        }
1565
+        
1566
+        if (lowerWord === 'mice' && (form !== 'mice' && form !== 'mouse')) {
1567
+            return false;
1568
+        }
1569
+        
1570
+        if (lowerWord === 'cannot' && (form !== 'cannot' && form !== 'can' && form !== 'could' && form !== "can't")) {
1571
+            return false;
1572
+        }
1573
+        
1574
+        if ((lowerWord === 'happier' || lowerWord === 'happiest' || lowerWord === 'happily') && form === 'happi') {
1538 1575
             return false;
1539 1576
         }
1540 1577