Overview
Comment: | [build] use default option priority for graph rules |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | build | rg |
Files: | files | file ages | folders |
SHA3-256: |
58285f596f06270246e3031dd7ebf622 |
User & Date: | olr on 2018-07-14 12:04:01 |
Other Links: | branch diff | manifest | tags |
Context
2018-07-14
| ||
12:44 | [fr] conversion: regex rules -> graph rules check-in: d4deec6280 user: olr tags: fr, rg | |
12:04 | [build] use default option priority for graph rules check-in: 58285f596f user: olr tags: build, rg | |
10:05 | [build][core] analyse merged token values check-in: f7e8fadbf4 user: olr tags: core, build, rg | |
Changes
Modified compile_rules.py from [45224279a8] to [4d074615bf].
︙ | ︙ | |||
586 587 588 589 590 591 592 | "paragraph_rules": mergeRulesByOption(lParagraphRules), "sentence_rules": mergeRulesByOption(lSentenceRules), "paragraph_rules_JS": jsconv.writeRulesToJSArray(mergeRulesByOption(lParagraphRulesJS)), "sentence_rules_JS": jsconv.writeRulesToJSArray(mergeRulesByOption(lSentenceRulesJS)) } dVars.update(dOptions) # compile graph rules | | | 586 587 588 589 590 591 592 593 594 595 596 | "paragraph_rules": mergeRulesByOption(lParagraphRules), "sentence_rules": mergeRulesByOption(lSentenceRules), "paragraph_rules_JS": jsconv.writeRulesToJSArray(mergeRulesByOption(lParagraphRulesJS)), "sentence_rules_JS": jsconv.writeRulesToJSArray(mergeRulesByOption(lSentenceRulesJS)) } dVars.update(dOptions) # compile graph rules dVars2 = crg.make(lGraphRule, dDEF, sLang, dOptPriority, bJavaScript) dVars.update(dVars2) return dVars |
Modified compile_rules_graph.py from [3fa8a2a061] to [3db92c7cf8].
︙ | ︙ | |||
98 99 100 101 102 103 104 | else: for aRule in lTokenLines: aRule.append(sToken) for aRule in lTokenLines: yield aRule | | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | else: for aRule in lTokenLines: aRule.append(sToken) for aRule in lTokenLines: yield aRule def createRule (iLine, sRuleName, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef): "generator: create rule as list" # print(iLine, "//", sRuleName, "//", sTokenLine, "//", sActions, "//", nPriority) for lToken in genTokenLines(sTokenLine, dDef): # Calculate positions dPos = {} # key: iGroup, value: iToken iGroup = 0 for i, sToken in enumerate(lToken): if sToken.startswith("(") and sToken.endswith(")"): lToken[i] = sToken[1:-1] iGroup += 1 dPos[iGroup] = i + 1 # we add 1, for we count tokens from 1 to n (not from 0) # Parse actions for iAction, sAction in enumerate(sActions.split(" <<- ")): sAction = sAction.strip() if sAction: sActionId = sRuleName + "__b" + str(iActionBlock) + "_a" + str(iAction) + "_" + str(len(lToken)) aAction = createAction(sActionId, sAction, nPriority, dOptPriority, len(lToken), dPos) if aAction: dACTIONS[sActionId] = aAction lResult = list(lToken) lResult.extend(["##"+str(iLine), sActionId]) yield lResult else: print(" # Error on action at line:", iLine) |
︙ | ︙ | |||
148 149 150 151 152 153 154 | def checkIfThereIsCode (sText, sActionId): "check if there is code in <sText> (debugging)" if re.search("[.]\\w+[(]|sugg\\w+[(]|\\([0-9]|\\[[0-9]", sText): print("# Warning at line " + sActionId + ": This message looks like code. Line should probably begin with =") print(sText) | | > > | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | def checkIfThereIsCode (sText, sActionId): "check if there is code in <sText> (debugging)" if re.search("[.]\\w+[(]|sugg\\w+[(]|\\([0-9]|\\[[0-9]", sText): print("# Warning at line " + sActionId + ": This message looks like code. Line should probably begin with =") print(sText) def createAction (sActionId, sAction, nPriority, dOptPriority, nToken, dPos): "create action rule as a list" # Option sOption = False m = re.match("/(\\w+)/", sAction) if m: sOption = m.group(1) sAction = sAction[m.end():].strip() if nPriority == -1: nPriority = dOptPriority.get(sOption, 4) # valid action? m = re.search(r"(?P<action>[-~=/>])(?P<start>\d+\.?|)(?P<end>:\.?\d+|)>>", sAction) if not m: print(" # Error. No action found at: ", sActionId) return None # Condition sCondition = sAction[:m.start()].strip() |
︙ | ︙ | |||
270 271 272 273 274 275 276 | sAction = "_g_d_"+sActionId return [sOption, sCondition, cAction, sAction] else: print(" # Unknown action.", sActionId) return None | | | | 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | sAction = "_g_d_"+sActionId return [sOption, sCondition, cAction, sAction] else: print(" # Unknown action.", sActionId) return None def make (lRule, dDef, sLang, dOptPriority, bJavaScript): "compile rules, returns a dictionary of values" # for clarity purpose, don’t create any file here # removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines print(" parsing rules...") lTokenLine = [] sActions = "" nPriority = -1 dAllGraph = {} sGraphName = "" iActionBlock = 0 for i, sLine in lRule: sLine = sLine.rstrip() if "\t" in sLine: |
︙ | ︙ | |||
307 308 309 310 311 312 313 | exit() elif sLine.startswith("__") and sLine.endswith("__"): # new rule group m = re.match("__(\\w+)(!\\d|)__", sLine) if m: sRuleName = m.group(1) iActionBlock = 1 | | | 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 | exit() elif sLine.startswith("__") and sLine.endswith("__"): # new rule group m = re.match("__(\\w+)(!\\d|)__", sLine) if m: sRuleName = m.group(1) iActionBlock = 1 nPriority = int(m.group(2)[1:]) if m.group(2) else -1 else: print("Error at rule group: ", sLine, " -- line:", i) break elif re.search("^ +<<- ", sLine) or sLine.startswith(" ") \ or re.search("^ +#", sLine) or re.search(r"^ [-~=>/](?:\d(?::\d+|)|)>> ", sLine) : # actions sActions += " " + sLine.strip() |
︙ | ︙ | |||
342 343 344 345 346 347 348 | print(sLine) # processing rules print(" preparing rules...") for sGraphName, lRuleLine in dAllGraph.items(): lPreparedRule = [] for i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority in lRuleLine: | | | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | print(sLine) # processing rules print(" preparing rules...") for sGraphName, lRuleLine in dAllGraph.items(): lPreparedRule = [] for i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority in lRuleLine: for lRule in createRule(i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef): lPreparedRule.append(lRule) # Graph creation oDARG = darg.DARG(lPreparedRule, sLang) dAllGraph[sGraphName] = oDARG.createGraph() # Debugging #print("\nGRAPH:", sGraphName) #for e in lPreparedRule: |
︙ | ︙ |
Modified gc_lang/fr/rules.grx from [7fb40ebc09] to [f842ed1125].
︙ | ︙ | |||
2287 2288 2289 2290 2291 2292 2293 | <<- morph(\1, ":N") ->> pseudo-\1 # Si vous voulez évoquer le simulacre de “\1”, mettez un trait d’union. <<- __also__ ~>> \1 __[i](p_pseudo_xxx)__ (pseudo-){w_2} @@0 <<- ~1>> * TEST: il n’avait contracté qu’un {{pseudo mariage}}. | < < < < < < < < < < > > > > > > > > > > > > > > | | | 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 | <<- morph(\1, ":N") ->> pseudo-\1 # Si vous voulez évoquer le simulacre de “\1”, mettez un trait d’union. <<- __also__ ~>> \1 __[i](p_pseudo_xxx)__ (pseudo-){w_2} @@0 <<- ~1>> * TEST: il n’avait contracté qu’un {{pseudo mariage}}. @@@@ @@@@ @@@@ @@@@ @@@@GRAPH: graphe1 _ @@@@ @@@@ @@@@ @@@@ __tu_préfixe_divers__ [anti|auto|arrière|avant|demi|extra|intra|multi|post] *WORD <<- /tu/ analyse_with_next(\1, "-", ":") and morph(<1, ":D|<start>") ->> \1-\2 # Il manque probablement un trait d’union. [non|sans|sous] *WORD <<- /tu/ analyse_with_next(\1, "-", ":") and morph(<1, ":D") ->> \1-\2 # Il manque probablement un trait d’union. TEST: il a pris une balle dans l’{{arrière train}}. TEST: Ce {{sans gêne}} mérite une bonne leçon TEST: Sans gêne, il avança parmi nous. __tu_mots_composés_verbe_nom__ [attrape|garde|porte|brise|cache|casse|chauffe|contre|coupe|cure|croque|entre|essuie|lance|lave|lève|marque|pare|passe|perce|pèse|porte|poste|pousse|presse|protège|ramasse|serre|taille|tire|tourne|traîne|traine|vide] *WORD <<- /tu/ not (morph(\1, ":G") and morph(\2, ":[GYB]")) and morph(<1, ":(?:D|V0e)|<start>") and analyse_with_next(\1, "-", ":N") ->> \1-\2 # Il manque probablement un trait d’union. TEST: ce sont des {{lève tard}}. TEST: un {{brise glace}} TEST: entre deux chaises… __tu_substantifs__ |
︙ | ︙ |