UNPKG

4.01 kBTypeScriptView Raw
1import { SubSModuleTokenizer, ISubTokenizerCreate } from '../mod';
2import Segment, { IDICT, IWord, IDICT2 } from '../Segment';
3export declare const DEFAULT_MAX_CHUNK_COUNT = 40;
4export declare const DEFAULT_MAX_CHUNK_COUNT_MIN = 30;
5/**
6 * 字典识别模块
7 *
8 * @author 老雷<leizongmin@gmail.com>
9 */
10export declare class DictTokenizer extends SubSModuleTokenizer {
11 /**
12 * 防止因無分段導致分析過久甚至超過處理負荷
13 * 越高越精準但是處理時間會加倍成長甚至超過記憶體能處理的程度
14 *
15 * 數字越小越快
16 *
17 * FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
18 *
19 * @type {number}
20 */
21 MAX_CHUNK_COUNT: number;
22 /**
23 *
24 * 追加新模式使 MAX_CHUNK_COUNT 遞減來防止無分段長段落的總處理次數過高 由 DEFAULT_MAX_CHUNK_COUNT_MIN 來限制最小值
25 */
26 DEFAULT_MAX_CHUNK_COUNT_MIN: number;
27 protected _TABLE: IDICT<IWord>;
28 protected _TABLE2: IDICT2<IWord>;
29 _cache(): void;
30 /**
31 * 对未识别的单词进行分词
32 *
33 * @param {array} words 单词数组
34 * @return {array}
35 */
36 split(words: IWord[]): IWord[];
37 /**
38 * 匹配单词,返回相关信息
39 *
40 * @param {string} text 文本
41 * @param {int} cur 开始位置
42 * @param {object} preword 上一个单词
43 * @return {array} 返回格式 {w: '单词', c: 开始位置}
44 */
45 protected matchWord(text: string, cur: number, preword: IWord): Segment.IWord[];
46 /**
47 * 选择最有可能匹配的单词
48 *
49 * @param {array} words 单词信息数组
50 * @param {object} preword 上一个单词
51 * @param {string} text 本节要分词的文本
52 * @return {array}
53 */
54 protected filterWord(words: IWord[], preword: IWord, text: string): Segment.IWord[];
55 /**
56 * 评价排名
57 *
58 * @param {object} assess
59 * @return {object}
60 */
61 getTops(assess: Array<IAssessRow>): number;
62 /**
63 * 将单词按照位置排列
64 *
65 * @param {array} words
66 * @param {string} text
67 * @return {object}
68 */
69 getPosInfo(words: IWord[], text: string): {
70 [index: number]: IWord[];
71 };
72 /**
73 * 取所有分支
74 *
75 * @param {{[p: number]: Segment.IWord[]}} wordpos
76 * @param {number} pos 当前位置
77 * @param {string} text 本节要分词的文本
78 * @param {number} total_count
79 * @returns {Segment.IWord[][]}
80 */
81 getChunks(wordpos: {
82 [index: number]: IWord[];
83 }, pos: number, text?: string, total_count?: number, MAX_CHUNK_COUNT?: number): IWord[][];
84}
85export declare namespace DictTokenizer {
86 /**
87 * 使用类似于MMSG的分词算法
88 * 找出所有分词可能,主要根据一下几项来评价:
89 *
90 * x、词数量最少;
91 * a、词平均频率最大;
92 * b、每个词长度标准差最小;
93 * c、未识别词最少;
94 * d、符合语法结构项:如两个连续的动词减分,数词后面跟量词加分;
95 *
96 * 取以上几项综合排名最最好的
97 */
98 type IAssessRow = {
99 /**
100 * 词数量,越小越好
101 */
102 x: number;
103 /**
104 * 词总频率,越大越好
105 */
106 a: number;
107 /**
108 * 词标准差,越小越好
109 * 每个词长度标准差最小
110 */
111 b: number;
112 /**
113 * 未识别词,越小越好
114 */
115 c: number;
116 /**
117 * 符合语法结构程度,越大越好
118 * 符合语法结构项:如两个连续的动词减分,数词后面跟量词加分
119 */
120 d: number;
121 /**
122 * 結算評分(自動計算)
123 */
124 score?: number;
125 readonly index?: number;
126 };
127}
128export import IAssessRow = DictTokenizer.IAssessRow;
129export declare const init: ISubTokenizerCreate<DictTokenizer, SubSModuleTokenizer>;
130export default DictTokenizer;