UNPKG

3.96 kBSource Map (JSON)View Raw
1{"version":3,"file":"DatetimeOptimizer.js","sourceRoot":"","sources":["DatetimeOptimizer.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAWb,wCAAwC;AAExC,WAAW;AACE,QAAA,IAAI,GAAG,WAAW,CAAC;AAGhC;;;;GAIG;AACH,SAAgB,IAAI,CAAC,QAAQ;IAE5B,eAAO,GAAG,QAAQ,CAAC;AACpB,CAAC;AAHD,oBAGC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,KAAc,EAAE,YAAsB;IAEhE,IAAI,OAAO,YAAY,IAAI,WAAW,EACtC;QACC,YAAY,GAAG,KAAK,CAAC;KACrB;IACD,mBAAmB;IACnB,MAAM,KAAK,GAAG,eAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,eAAO,CAAC,MAAM,CAAC;IAE9B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,EAAE,EACb;QACC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,4BAA4B;QAE5B,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAC3B;YACC,4CAA4C;YAC5C,+BAA+B;YAC/B,IAAI,EAAE,CAAC,CAAC,IAAI,gBAAQ,EACpB;gBACC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrB,IAAI,GAAG,GAAG,CAAC,CAAC;gBAEZ,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAElB,kCAAkC;gBAClC,OAAO,IAAI,EACX;oBACC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBACzB,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC7B,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,gBAAQ,EAC/D;wBACC,GAAG,IAAI,CAAC,CAAC;wBACT,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBAEpB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACb,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACb;yBAED;wBACC,MAAM;qBACN;iBACD;gBACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;oBACpB,CAAC,EAAE,EAAE;oBACL,CAAC,EAAE,MAAM,CAAC,GAAG;oBACb,CAAC,EAAE,EAAE;iBACL,CAAC,CAAC;gBACH,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;gBACd,SAAS;aACT;YACD,4CAA4C;SAC5C;QAED,SAAS;QACT,CAAC,EAAE,CAAC;KACJ;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AA/DD,gCA+DC","sourcesContent":["'use strict';\n\n/**\n * 日期时间优化模块\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nimport Segment, { IWord } from '../Segment';\nimport { debug } from '../util';\nimport { arr_cjk } from '../util/cjk';\nimport { DATETIME } from '../mod/const';\n\n/** 模块类型 */\nexport const type = 'optimizer';\nexport let segment: Segment;\n\n/**\n * 模块初始化\n *\n * @param {Segment} segment 分词接口\n */\nexport function init(_segment)\n{\n\tsegment = _segment;\n}\n\n/**\n * 日期时间优化\n *\n * @param {array} words 单词数组\n * @param {bool} is_not_first 是否为管理器调用的\n * @return {array}\n */\nexport function doOptimize(words: IWord[], is_not_first?: boolean)\n{\n\tif (typeof is_not_first == 'undefined')\n\t{\n\t\tis_not_first = false;\n\t}\n\t// 合并相邻的能组成一个单词的两个词\n\tconst TABLE = segment.getDict('TABLE');\n\tconst POSTAG = segment.POSTAG;\n\n\tlet i = 0;\n\tlet ie = words.length - 1;\n\twhile (i < ie)\n\t{\n\t\tlet w1 = words[i];\n\t\tlet w2 = words[i + 1];\n\t\t//debug(w1.w + ', ' + w2.w);\n\n\t\tif ((w1.p & POSTAG.A_M) > 0)\n\t\t{\n\t\t\t// =========================================\n\t\t\t// 日期时间组合 数字 + 日期单位,如 “2005年\"\n\t\t\tif (w2.w in DATETIME)\n\t\t\t{\n\t\t\t\tlet nw = w1.w + w2.w;\n\t\t\t\tlet len = 2;\n\n\t\t\t\tlet ma = [w1, w2];\n\n\t\t\t\t// 继续搜索后面连续的日期时间描述,必须符合 数字 + 日期单位\n\t\t\t\twhile (true)\n\t\t\t\t{\n\t\t\t\t\tlet w11 = words[i + len];\n\t\t\t\t\tlet w22 = words[i + len + 1];\n\t\t\t\t\tif (w11 && w22 && (w11.p & POSTAG.A_M) > 0 && w22.w in DATETIME)\n\t\t\t\t\t{\n\t\t\t\t\t\tlen += 2;\n\t\t\t\t\t\tnw += w11.w + w22.w;\n\n\t\t\t\t\t\tma.push(w11);\n\t\t\t\t\t\tma.push(w22);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twords.splice(i, len, {\n\t\t\t\t\tw: nw,\n\t\t\t\t\tp: POSTAG.D_T,\n\t\t\t\t\tm: ma,\n\t\t\t\t});\n\t\t\t\tie -= len - 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// =========================================\n\t\t}\n\n\t\t// 移到下一个词\n\t\ti++;\n\t}\n\n\treturn words;\n}\n"]}
\No newline at end of file