@ycookiey/yfuzzy 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -176
- package/THIRD_PARTY_NOTICES.md +49 -3
- package/dist/entry.d.ts +6 -1
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +31 -1
- package/dist/entry.js.map +1 -1
- package/dist/expand.d.ts +1 -1
- package/dist/expand.js +3 -3
- package/dist/expand.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/keystroke.d.ts +5 -0
- package/dist/keystroke.d.ts.map +1 -0
- package/dist/keystroke.js +79 -0
- package/dist/keystroke.js.map +1 -0
- package/dist/lattice.d.ts +54 -0
- package/dist/lattice.d.ts.map +1 -0
- package/dist/lattice.js +241 -0
- package/dist/lattice.js.map +1 -0
- package/dist/pipeline.d.ts +2 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +26 -2
- package/dist/pipeline.js.map +1 -1
- package/dist/query.d.ts +13 -9
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +11 -7
- package/dist/query.js.map +1 -1
- package/dist/tiers/tier1-exact.d.ts.map +1 -1
- package/dist/tiers/tier1-exact.js +240 -49
- package/dist/tiers/tier1-exact.js.map +1 -1
- package/dist/tiers/tier2-flexible.d.ts.map +1 -1
- package/dist/tiers/tier2-flexible.js +45 -1
- package/dist/tiers/tier2-flexible.js.map +1 -1
- package/dist/tiers/tier3-typo.d.ts.map +1 -1
- package/dist/tiers/tier3-typo.js +112 -1
- package/dist/tiers/tier3-typo.js.map +1 -1
- package/dist/tiers/tier4-structural.d.ts.map +1 -1
- package/dist/tiers/tier4-structural.js +2 -0
- package/dist/tiers/tier4-structural.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vendor/wanakana/romaji-to-kana.d.ts +5 -0
- package/dist/vendor/wanakana/romaji-to-kana.d.ts.map +1 -1
- package/dist/vendor/wanakana/romaji-to-kana.js +21 -0
- package/dist/vendor/wanakana/romaji-to-kana.js.map +1 -1
- package/dist/yfuzzy.min.js +2 -2
- package/package.json +61 -61
- package/dist/ablate.d.ts +0 -8
- package/dist/ablate.d.ts.map +0 -1
- package/dist/ablate.js +0 -11
- package/dist/ablate.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -5,10 +5,11 @@ import { runSearch } from './pipeline.js';
|
|
|
5
5
|
import { computeMatches } from './matches.js';
|
|
6
6
|
const DEFAULT_MAX_TIER = 3;
|
|
7
7
|
const DEFAULT_MIN_SCORE = 0;
|
|
8
|
-
function resolveConfig(romaji, separatorExpansion, opts) {
|
|
8
|
+
function resolveConfig(romaji, separatorExpansion, matching, opts) {
|
|
9
9
|
return {
|
|
10
10
|
romaji,
|
|
11
11
|
separatorExpansion,
|
|
12
|
+
matching,
|
|
12
13
|
maxTier: opts.maxTier ?? DEFAULT_MAX_TIER,
|
|
13
14
|
minScore: opts.minScore ?? DEFAULT_MIN_SCORE,
|
|
14
15
|
limit: opts.limit,
|
|
@@ -19,6 +20,7 @@ export function createIndex(items, options = {}) {
|
|
|
19
20
|
const getText = options.getText ?? ((x) => x);
|
|
20
21
|
const romaji = options.romaji ?? 'both';
|
|
21
22
|
const separatorExpansion = options.separatorExpansion ?? false;
|
|
23
|
+
const matching = options.matching ?? 'both';
|
|
22
24
|
// 構築時に SearchOptions のデフォルトを保持(per-call で上書き可)
|
|
23
25
|
const defaults = {
|
|
24
26
|
limit: options.limit,
|
|
@@ -31,7 +33,7 @@ export function createIndex(items, options = {}) {
|
|
|
31
33
|
size: items.length,
|
|
32
34
|
search(query, searchOptions = {}) {
|
|
33
35
|
const merged = { ...defaults, ...searchOptions };
|
|
34
|
-
const config = resolveConfig(romaji, separatorExpansion, merged);
|
|
36
|
+
const config = resolveConfig(romaji, separatorExpansion, matching, merged);
|
|
35
37
|
const hits = runSearch(query, entries, config);
|
|
36
38
|
return hits.map((h) => {
|
|
37
39
|
const result = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,oDAAoD;AAEpD,OAAO,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystroke.d.ts","sourceRoot":"","sources":["../src/keystroke.ts"],"names":[],"mappings":"AA2CA,2BAA2B;AAC3B,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAyBtD;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// 打鍵の逆引き(spec 2.2)。IME でローマ字入力した結果のかなを、それを生む打鍵列へ戻す。
|
|
2
|
+
// 変換木(vendor wanakana)の全エントリを元に、主要な IME(Mozc / Google 日本語入力の
|
|
3
|
+
// ローマ字表で確認。THIRD_PARTY_NOTICES.md)と食い違う表記を外し、IME が受理する表記と促音の打ち方を加える。
|
|
4
|
+
import { romajiKanaPairs } from './vendor/wanakana/romaji-to-kana.js';
|
|
5
|
+
import { applyTransforms } from './normalize.js';
|
|
6
|
+
// wanakana 独自で IME と食い違う表記(IME では ci=し, ce=せ, qu=く)
|
|
7
|
+
const NOT_IME = new Set(['ci', 'ce', 'qu']);
|
|
8
|
+
// 変換木に無いが IME が受理する表記(打鍵列, かな)
|
|
9
|
+
const IME_EXTRA = [
|
|
10
|
+
['ci', 'し'],
|
|
11
|
+
['ce', 'せ'],
|
|
12
|
+
['qu', 'く'],
|
|
13
|
+
['nn', 'ん'],
|
|
14
|
+
['-', 'ー'],
|
|
15
|
+
["t'i", 'てぃ'],
|
|
16
|
+
["t'yu", 'てゅ'],
|
|
17
|
+
["d'i", 'でぃ'],
|
|
18
|
+
["d'yu", 'でゅ'],
|
|
19
|
+
["t'u", 'とぅ'],
|
|
20
|
+
["d'u", 'どぅ'],
|
|
21
|
+
['hwa', 'ふぁ'],
|
|
22
|
+
['hwi', 'ふぃ'],
|
|
23
|
+
['hwe', 'ふぇ'],
|
|
24
|
+
['hwo', 'ふぉ'],
|
|
25
|
+
['hwyu', 'ふゅ'],
|
|
26
|
+
['zwa', 'ずぁ'],
|
|
27
|
+
['zwi', 'ずぃ'],
|
|
28
|
+
['zwu', 'ずぅ'],
|
|
29
|
+
['zwe', 'ずぇ'],
|
|
30
|
+
['zwo', 'ずぉ'],
|
|
31
|
+
['wyi', 'ゐ'],
|
|
32
|
+
['wye', 'ゑ'],
|
|
33
|
+
];
|
|
34
|
+
// 促音: 次の音節の先頭の子音を重ねる(kka → っか)。tch は ch の前の促音(tchi → っち)
|
|
35
|
+
const DOUBLING = new Set('qvlxkgszjtdhfbpmyrwc');
|
|
36
|
+
let table = null;
|
|
37
|
+
let maxKanaLen = 0;
|
|
38
|
+
/** カタカナ正規形のかな列 → 打鍵列の一覧 */
|
|
39
|
+
export function keystrokeTable() {
|
|
40
|
+
if (table !== null)
|
|
41
|
+
return table;
|
|
42
|
+
const t = new Map();
|
|
43
|
+
const add = (keys, kana) => {
|
|
44
|
+
const k = applyTransforms(kana, 'postKana');
|
|
45
|
+
let s = t.get(k);
|
|
46
|
+
if (s === undefined)
|
|
47
|
+
t.set(k, (s = new Set()));
|
|
48
|
+
s.add(keys);
|
|
49
|
+
};
|
|
50
|
+
const base = [];
|
|
51
|
+
for (const [keys, kana] of romajiKanaPairs()) {
|
|
52
|
+
if (NOT_IME.has(keys))
|
|
53
|
+
continue;
|
|
54
|
+
if (kana.startsWith('っ') && keys.length > 1 && keys[0] === keys[1])
|
|
55
|
+
continue; // 重ね打ちは下で一律に作る
|
|
56
|
+
base.push([keys, kana]);
|
|
57
|
+
}
|
|
58
|
+
base.push(...IME_EXTRA);
|
|
59
|
+
for (const [keys, kana] of base) {
|
|
60
|
+
add(keys, kana);
|
|
61
|
+
if (kana.startsWith('っ'))
|
|
62
|
+
continue;
|
|
63
|
+
if (DOUBLING.has(keys[0]))
|
|
64
|
+
add(keys[0] + keys, 'っ' + kana);
|
|
65
|
+
if (keys.startsWith('ch'))
|
|
66
|
+
add('t' + keys, 'っ' + kana);
|
|
67
|
+
}
|
|
68
|
+
for (const k of t.keys())
|
|
69
|
+
if (k.length > maxKanaLen)
|
|
70
|
+
maxKanaLen = k.length;
|
|
71
|
+
table = new Map([...t].map(([k, s]) => [k, [...s]]));
|
|
72
|
+
return table;
|
|
73
|
+
}
|
|
74
|
+
/** 表のかな列の最大長 */
|
|
75
|
+
export function keystrokeMaxKanaLen() {
|
|
76
|
+
keystrokeTable();
|
|
77
|
+
return maxKanaLen;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=keystroke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystroke.js","sourceRoot":"","sources":["../src/keystroke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export interface Lattice {
|
|
2
|
+
readonly nodeCount: number;
|
|
3
|
+
/** 終端節点(始点は 0) */
|
|
4
|
+
readonly final: number;
|
|
5
|
+
/** 辺(from 昇順)。ks=1 は打鍵の辺 */
|
|
6
|
+
readonly from: Int32Array;
|
|
7
|
+
readonly to: Int32Array;
|
|
8
|
+
readonly ch: readonly string[];
|
|
9
|
+
readonly ks: Uint8Array;
|
|
10
|
+
/** 辺の文字の charMask ビット */
|
|
11
|
+
readonly bit: Int32Array;
|
|
12
|
+
/** 節点 v から出る辺の添字 outEdges[outStart[v] .. outStart[v+1]) */
|
|
13
|
+
readonly outStart: Int32Array;
|
|
14
|
+
readonly outEdges: Int32Array;
|
|
15
|
+
/** 始点から出る辺の文字 */
|
|
16
|
+
readonly firstChars: ReadonlySet<string>;
|
|
17
|
+
}
|
|
18
|
+
/** 正規化済み literal 文字列からラティスを作る。打鍵の辺が無ければ null(文字列照合で足りる) */
|
|
19
|
+
export declare function buildLattice(s: string): Lattice | null;
|
|
20
|
+
/** 全文字が dMask に含まれうる経路が始点→終端にあるか(charMask の衝突は安全側) */
|
|
21
|
+
export declare function latticeFeasible(lat: Lattice, dMask: number): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* ラティスのいずれかの経路が data の subsequence か(tier 2 前段の線形判定)。
|
|
24
|
+
* skipDirect は始点→終端の直結辺(長さ1の経路)を除く。
|
|
25
|
+
*/
|
|
26
|
+
export declare function latticeIsSubsequence(lat: Lattice, data: string, skipDirect: boolean): boolean;
|
|
27
|
+
/** 連続一致の結果。打鍵の辺を通らない経路(plain)と通る経路(ks)それぞれの最長一致長 */
|
|
28
|
+
export interface ContiguousMatch {
|
|
29
|
+
plain: number;
|
|
30
|
+
ks: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* data[start..] の先頭からラティスの始点→終端の経路が連続一致する最長の長さを、
|
|
34
|
+
* 経路種別(打鍵の辺を通るか)ごとに out へ書く。一致なしは 0。
|
|
35
|
+
*/
|
|
36
|
+
export declare function contiguousAt(lat: Lattice, data: string, start: number, out: ContiguousMatch): void;
|
|
37
|
+
/** ラティスを(節点, 始点からの経路長)の状態に展開したもの。tier 2/3 が経路長ごとに評価する */
|
|
38
|
+
export interface Expanded {
|
|
39
|
+
readonly X: number;
|
|
40
|
+
/** 状態 x の経路長 */
|
|
41
|
+
readonly depth: Int32Array;
|
|
42
|
+
/** 状態 x に入る辺 [inStart[x] .. inStart[x+1]) の前状態・文字コード・charMask ビット・打鍵の辺か */
|
|
43
|
+
readonly inStart: Int32Array;
|
|
44
|
+
readonly inFrom: Int32Array;
|
|
45
|
+
readonly inCh: Int32Array;
|
|
46
|
+
readonly inBit: Int32Array;
|
|
47
|
+
/** 入り辺が打鍵の辺か */
|
|
48
|
+
readonly inKs: Uint8Array;
|
|
49
|
+
/** 終端の状態と経路長(経路長昇順) */
|
|
50
|
+
readonly finals: readonly [x: number, m: number][];
|
|
51
|
+
}
|
|
52
|
+
/** 経路長で展開する(クエリごとに1回作りキャッシュ)。状態番号は位相順、始点は 0 */
|
|
53
|
+
export declare function expandByDepth(lat: Lattice): Expanded;
|
|
54
|
+
//# sourceMappingURL=lattice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lattice.d.ts","sourceRoot":"","sources":["../src/lattice.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kBAAkB;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,yBAAyB;IACzB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,iBAAiB;IACjB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAuEtD;AASD,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAOpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAkB7F;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAQD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CAwClG;AAED,yDAAyD;AACzD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;CACpD;AAID,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CA6CpD"}
|
package/dist/lattice.js
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// 打鍵ラティス(spec 2.2)。literal 経路のクエリを「位置ごとの選択肢の列」として表す。
|
|
2
|
+
// 各位置に入力文字そのものの辺、かなの位置にはそのかなを生む打鍵列(keystroke.ts)の辺の鎖を張る。
|
|
3
|
+
// 節点番号は位相順(辺は常に番号の小さい節点から大きい節点へ)。
|
|
4
|
+
import { keystrokeTable, keystrokeMaxKanaLen } from './keystroke.js';
|
|
5
|
+
import { charMask } from './charmask.js';
|
|
6
|
+
/** 正規化済み literal 文字列からラティスを作る。打鍵の辺が無ければ null(文字列照合で足りる) */
|
|
7
|
+
export function buildLattice(s) {
|
|
8
|
+
const table = keystrokeTable();
|
|
9
|
+
const maxLen = keystrokeMaxKanaLen();
|
|
10
|
+
const n = s.length;
|
|
11
|
+
// 仮番号: 位置節点 0..n、中間節点は n+1 以降。位相順へは後で振り直す
|
|
12
|
+
const order = Array.from({ length: n + 1 }, (_, i) => [i]);
|
|
13
|
+
let next = n + 1;
|
|
14
|
+
const edges = [];
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
const addEdge = (f, t, c, k) => {
|
|
17
|
+
const key = `${f},${t},${c},${k}`;
|
|
18
|
+
if (seen.has(key))
|
|
19
|
+
return;
|
|
20
|
+
seen.add(key);
|
|
21
|
+
edges.push([f, t, c, k]);
|
|
22
|
+
};
|
|
23
|
+
let hasAlt = false;
|
|
24
|
+
for (let i = 0; i < n; i++) {
|
|
25
|
+
addEdge(i, i + 1, s[i], 0);
|
|
26
|
+
// 同じ始点の打鍵列は接頭辞を共有する(trie)
|
|
27
|
+
const trie = new Map();
|
|
28
|
+
for (let L = 1; L <= maxLen && i + L <= n; L++) {
|
|
29
|
+
const keys = table.get(s.slice(i, i + L));
|
|
30
|
+
if (keys === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
for (const k of keys) {
|
|
33
|
+
hasAlt = true;
|
|
34
|
+
let cur = i;
|
|
35
|
+
for (let p = 0; p < k.length - 1; p++) {
|
|
36
|
+
const prefix = k.slice(0, p + 1);
|
|
37
|
+
let node = trie.get(prefix);
|
|
38
|
+
if (node === undefined) {
|
|
39
|
+
node = next++;
|
|
40
|
+
trie.set(prefix, node);
|
|
41
|
+
order[i].push(node);
|
|
42
|
+
}
|
|
43
|
+
addEdge(cur, node, k[p], 1);
|
|
44
|
+
cur = node;
|
|
45
|
+
}
|
|
46
|
+
addEdge(cur, i + L, k[k.length - 1], 1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!hasAlt)
|
|
51
|
+
return null;
|
|
52
|
+
const remap = new Int32Array(next);
|
|
53
|
+
let id = 0;
|
|
54
|
+
for (const group of order)
|
|
55
|
+
for (const v of group)
|
|
56
|
+
remap[v] = id++;
|
|
57
|
+
const m = edges.length;
|
|
58
|
+
const list = edges.map(([f, t, c, k]) => [remap[f], remap[t], c, k]);
|
|
59
|
+
list.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
|
|
60
|
+
const from = new Int32Array(m);
|
|
61
|
+
const to = new Int32Array(m);
|
|
62
|
+
const ch = new Array(m);
|
|
63
|
+
const ks = new Uint8Array(m);
|
|
64
|
+
const bit = new Int32Array(m);
|
|
65
|
+
list.forEach(([f, t, c, k], e) => {
|
|
66
|
+
from[e] = f;
|
|
67
|
+
to[e] = t;
|
|
68
|
+
ch[e] = c;
|
|
69
|
+
ks[e] = k;
|
|
70
|
+
bit[e] = charMask(c);
|
|
71
|
+
});
|
|
72
|
+
const V = id;
|
|
73
|
+
const outStart = new Int32Array(V + 1);
|
|
74
|
+
for (let e = 0; e < m; e++)
|
|
75
|
+
outStart[from[e] + 1]++;
|
|
76
|
+
for (let v = 0; v < V; v++)
|
|
77
|
+
outStart[v + 1] += outStart[v];
|
|
78
|
+
const outEdges = new Int32Array(m);
|
|
79
|
+
for (let e = 0; e < m; e++)
|
|
80
|
+
outEdges[e] = e; // 辺は from 昇順に並んでいる
|
|
81
|
+
const firstChars = new Set();
|
|
82
|
+
for (let k = outStart[0]; k < outStart[1]; k++)
|
|
83
|
+
firstChars.add(ch[outEdges[k]]);
|
|
84
|
+
return { nodeCount: V, final: remap[n], from, to, ch, ks, bit, outStart, outEdges, firstChars };
|
|
85
|
+
}
|
|
86
|
+
let reachBuf = new Uint8Array(0);
|
|
87
|
+
function reachScratch(size) {
|
|
88
|
+
if (reachBuf.length < size)
|
|
89
|
+
reachBuf = new Uint8Array(size);
|
|
90
|
+
reachBuf.fill(0, 0, size);
|
|
91
|
+
return reachBuf;
|
|
92
|
+
}
|
|
93
|
+
/** 全文字が dMask に含まれうる経路が始点→終端にあるか(charMask の衝突は安全側) */
|
|
94
|
+
export function latticeFeasible(lat, dMask) {
|
|
95
|
+
const reach = reachScratch(lat.nodeCount);
|
|
96
|
+
reach[0] = 1;
|
|
97
|
+
for (let e = 0; e < lat.from.length; e++) {
|
|
98
|
+
if (reach[lat.from[e]] && (lat.bit[e] & dMask) !== 0)
|
|
99
|
+
reach[lat.to[e]] = 1;
|
|
100
|
+
}
|
|
101
|
+
return reach[lat.final] === 1;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* ラティスのいずれかの経路が data の subsequence か(tier 2 前段の線形判定)。
|
|
105
|
+
* skipDirect は始点→終端の直結辺(長さ1の経路)を除く。
|
|
106
|
+
*/
|
|
107
|
+
export function latticeIsSubsequence(lat, data, skipDirect) {
|
|
108
|
+
const reach = reachScratch(lat.nodeCount);
|
|
109
|
+
reach[0] = 1;
|
|
110
|
+
for (let j = 0; j < data.length; j++) {
|
|
111
|
+
const c = data[j];
|
|
112
|
+
// 位相順の逆で走査し、同じ文字で2辺進まないようにする
|
|
113
|
+
for (let v = lat.nodeCount - 1; v >= 0; v--) {
|
|
114
|
+
if (!reach[v])
|
|
115
|
+
continue;
|
|
116
|
+
for (let k = lat.outStart[v]; k < lat.outStart[v + 1]; k++) {
|
|
117
|
+
const e = lat.outEdges[k];
|
|
118
|
+
if (lat.ch[e] !== c)
|
|
119
|
+
continue;
|
|
120
|
+
if (skipDirect && v === 0 && lat.to[e] === lat.final)
|
|
121
|
+
continue;
|
|
122
|
+
reach[lat.to[e]] = 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (reach[lat.final])
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
// 連続一致の状態集合(状態 = 節点*2 + 打鍵経由フラグ)。重複除去用の世代印付き
|
|
131
|
+
let curList = new Int32Array(0);
|
|
132
|
+
let nxtList = new Int32Array(0);
|
|
133
|
+
let stamp = new Int32Array(0);
|
|
134
|
+
let gen = 0;
|
|
135
|
+
/**
|
|
136
|
+
* data[start..] の先頭からラティスの始点→終端の経路が連続一致する最長の長さを、
|
|
137
|
+
* 経路種別(打鍵の辺を通るか)ごとに out へ書く。一致なしは 0。
|
|
138
|
+
*/
|
|
139
|
+
export function contiguousAt(lat, data, start, out) {
|
|
140
|
+
out.plain = 0;
|
|
141
|
+
out.ks = 0;
|
|
142
|
+
const S = lat.nodeCount * 2;
|
|
143
|
+
if (stamp.length < S) {
|
|
144
|
+
stamp = new Int32Array(S);
|
|
145
|
+
curList = new Int32Array(S);
|
|
146
|
+
nxtList = new Int32Array(S);
|
|
147
|
+
gen = 0;
|
|
148
|
+
}
|
|
149
|
+
let cur = curList;
|
|
150
|
+
let nxt = nxtList;
|
|
151
|
+
let curLen = 1;
|
|
152
|
+
cur[0] = 0;
|
|
153
|
+
const finalPlain = lat.final * 2;
|
|
154
|
+
for (let j = start; j < data.length && curLen > 0; j++) {
|
|
155
|
+
const c = data[j];
|
|
156
|
+
gen++;
|
|
157
|
+
let nxtLen = 0;
|
|
158
|
+
for (let a = 0; a < curLen; a++) {
|
|
159
|
+
const st = cur[a];
|
|
160
|
+
const v = st >> 1;
|
|
161
|
+
const f = st & 1;
|
|
162
|
+
for (let k = lat.outStart[v]; k < lat.outStart[v + 1]; k++) {
|
|
163
|
+
const e = lat.outEdges[k];
|
|
164
|
+
if (lat.ch[e] !== c)
|
|
165
|
+
continue;
|
|
166
|
+
const ns = lat.to[e] * 2 + (f | lat.ks[e]);
|
|
167
|
+
if (stamp[ns] === gen)
|
|
168
|
+
continue;
|
|
169
|
+
stamp[ns] = gen;
|
|
170
|
+
nxt[nxtLen++] = ns;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const len = j - start + 1;
|
|
174
|
+
if (stamp[finalPlain] === gen)
|
|
175
|
+
out.plain = len;
|
|
176
|
+
if (stamp[finalPlain + 1] === gen)
|
|
177
|
+
out.ks = len;
|
|
178
|
+
const t = cur;
|
|
179
|
+
cur = nxt;
|
|
180
|
+
nxt = t;
|
|
181
|
+
curLen = nxtLen;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const expandedCache = new WeakMap();
|
|
185
|
+
/** 経路長で展開する(クエリごとに1回作りキャッシュ)。状態番号は位相順、始点は 0 */
|
|
186
|
+
export function expandByDepth(lat) {
|
|
187
|
+
const cached = expandedCache.get(lat);
|
|
188
|
+
if (cached !== undefined)
|
|
189
|
+
return cached;
|
|
190
|
+
const V = lat.nodeCount;
|
|
191
|
+
const depths = Array.from({ length: V }, () => []);
|
|
192
|
+
depths[0].push(0);
|
|
193
|
+
for (let v = 0; v < V; v++) {
|
|
194
|
+
for (let k = lat.outStart[v]; k < lat.outStart[v + 1]; k++) {
|
|
195
|
+
const w = lat.to[lat.outEdges[k]];
|
|
196
|
+
for (const d of depths[v])
|
|
197
|
+
if (!depths[w].includes(d + 1))
|
|
198
|
+
depths[w].push(d + 1);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
for (const ds of depths)
|
|
202
|
+
ds.sort((a, b) => a - b);
|
|
203
|
+
const base = new Int32Array(V + 1);
|
|
204
|
+
for (let v = 0; v < V; v++)
|
|
205
|
+
base[v + 1] = base[v] + depths[v].length;
|
|
206
|
+
const X = base[V];
|
|
207
|
+
const xid = (v, d) => base[v] + depths[v].indexOf(d);
|
|
208
|
+
const depth = new Int32Array(X);
|
|
209
|
+
for (let v = 0; v < V; v++)
|
|
210
|
+
for (const d of depths[v])
|
|
211
|
+
depth[xid(v, d)] = d;
|
|
212
|
+
const lists = Array.from({ length: X }, () => []);
|
|
213
|
+
for (let e = 0; e < lat.from.length; e++) {
|
|
214
|
+
const u = lat.from[e];
|
|
215
|
+
const v = lat.to[e];
|
|
216
|
+
for (const d of depths[u])
|
|
217
|
+
lists[xid(v, d + 1)].push([xid(u, d), lat.ch[e].charCodeAt(0), lat.bit[e], lat.ks[e]]);
|
|
218
|
+
}
|
|
219
|
+
const inStart = new Int32Array(X + 1);
|
|
220
|
+
for (let x = 0; x < X; x++)
|
|
221
|
+
inStart[x + 1] = inStart[x] + lists[x].length;
|
|
222
|
+
const total = inStart[X];
|
|
223
|
+
const inFrom = new Int32Array(total);
|
|
224
|
+
const inCh = new Int32Array(total);
|
|
225
|
+
const inBit = new Int32Array(total);
|
|
226
|
+
const inKs = new Uint8Array(total);
|
|
227
|
+
let p = 0;
|
|
228
|
+
for (const list of lists) {
|
|
229
|
+
for (const [y, c, b, k] of list) {
|
|
230
|
+
inFrom[p] = y;
|
|
231
|
+
inCh[p] = c;
|
|
232
|
+
inBit[p] = b;
|
|
233
|
+
inKs[p++] = k;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const finals = depths[lat.final].map((m) => [xid(lat.final, m), m]);
|
|
237
|
+
const ex = { X, depth, inStart, inFrom, inCh, inBit, inKs, finals };
|
|
238
|
+
expandedCache.set(lat, ex);
|
|
239
|
+
return ex;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=lattice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lattice.js","sourceRoot":"","sources":["../src/lattice.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type SeparatorConfig } from './expand.js';
|
|
2
2
|
import type { IndexEntry } from './entry.js';
|
|
3
3
|
import type { RomajiOption } from './romaji/convert.js';
|
|
4
|
+
import type { MatchingOption } from './types.js';
|
|
4
5
|
import type { TierMatch } from './tiers/types.js';
|
|
5
6
|
/** pipeline 実行設定(index.ts が options から解決して渡す) */
|
|
6
7
|
export interface SearchConfig {
|
|
7
8
|
readonly romaji: RomajiOption;
|
|
8
9
|
readonly separatorExpansion: SeparatorConfig;
|
|
10
|
+
readonly matching: MatchingOption;
|
|
9
11
|
readonly maxTier: number;
|
|
10
12
|
readonly minScore: number;
|
|
11
13
|
readonly limit: number | undefined;
|
package/dist/pipeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAU3D,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAU3D,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAuBD,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAgCD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,YAAY,GACnB,SAAS,EAAE,CA8Bb"}
|
package/dist/pipeline.js
CHANGED
|
@@ -9,6 +9,28 @@ import { tier4Structural } from './tiers/tier4-structural.js';
|
|
|
9
9
|
// tier 昇順。slice(0, maxTier) で実行対象を絞る(spec 4.0)。
|
|
10
10
|
// 既定 maxTier=3 では tier4 は実行されない(インデックス3が範囲外)。
|
|
11
11
|
const ALL_MATCHERS = [tier1Exact, tier2Flexible, tier3Typo, tier4Structural];
|
|
12
|
+
/** matching オプションに対応する照合経路(評価順。spec 2.2 / 5章) */
|
|
13
|
+
function modesFor(matching) {
|
|
14
|
+
if (matching === 'literal')
|
|
15
|
+
return ['literal'];
|
|
16
|
+
if (matching === 'phonetic')
|
|
17
|
+
return ['phonetic'];
|
|
18
|
+
return ['literal', 'phonetic'];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 展開経路文字列を照合経路ごとに正規化する。literal の kana が phonetic の kana と
|
|
22
|
+
* 同一なら(かなのみ・かな化できない英字のみのクエリ)phonetic が包含するため省く。
|
|
23
|
+
* 打鍵ラティスがあれば、打鍵の文字を含むデータでのみ照合するよう shadowed を立てる。
|
|
24
|
+
*/
|
|
25
|
+
function normalizePath(p, romaji, modes) {
|
|
26
|
+
const qs = modes.map((mode) => normalizeQuery(p, romaji, mode));
|
|
27
|
+
if (qs.length === 2 && qs[0].kana === qs[1].kana) {
|
|
28
|
+
if (qs[0].lattice === null)
|
|
29
|
+
return [qs[1]];
|
|
30
|
+
qs[0].shadowed = true;
|
|
31
|
+
}
|
|
32
|
+
return qs;
|
|
33
|
+
}
|
|
12
34
|
function clamp01(x) {
|
|
13
35
|
return x < 0 ? 0 : x > 1 ? 1 : x;
|
|
14
36
|
}
|
|
@@ -18,7 +40,7 @@ function finalScore(m) {
|
|
|
18
40
|
}
|
|
19
41
|
/**
|
|
20
42
|
* 単一 tier の matcher を全経路で照合し、最良(score 降順、同点は経路順)を返す。
|
|
21
|
-
* strict >
|
|
43
|
+
* strict > により同点は先の経路が残る(経路順は runSearch の paths 構築順)。
|
|
22
44
|
*/
|
|
23
45
|
function bestPathAtTier(matcher, e, paths) {
|
|
24
46
|
let best = null;
|
|
@@ -49,7 +71,9 @@ export function runSearch(query, entries, config) {
|
|
|
49
71
|
const pathStrings = expandQuery(trimmed, config.separatorExpansion);
|
|
50
72
|
if (pathStrings.length === 0)
|
|
51
73
|
return [];
|
|
52
|
-
|
|
74
|
+
// 経路順(同点タイブレーク順、spec 5章): 展開経路 (c)>(a)>(b) の各々で literal > phonetic
|
|
75
|
+
const modes = modesFor(config.matching);
|
|
76
|
+
const paths = pathStrings.flatMap((p) => normalizePath(p, config.romaji, modes));
|
|
53
77
|
const matchers = ALL_MATCHERS.slice(0, config.maxTier);
|
|
54
78
|
const { limit, minScore } = config;
|
|
55
79
|
const hits = [];
|
package/dist/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,gCAAgC;AAEhC,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/query.d.ts
CHANGED
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
import { type RomajiOption } from './romaji/convert.js';
|
|
2
|
+
import { type Lattice } from './lattice.js';
|
|
3
|
+
/** クエリの照合経路(spec 2.2) */
|
|
4
|
+
export type QueryMode = 'phonetic' | 'literal';
|
|
2
5
|
/** クエリ1経路分の正規化結果 */
|
|
3
6
|
export interface NormalizedQuery {
|
|
4
7
|
/** 正規化カナ形 */
|
|
5
8
|
readonly kana: string;
|
|
6
9
|
/** 正規化カナ形が1コードポイントか(tier 1 の1文字レンジ分離用、spec 4.1) */
|
|
7
10
|
readonly singleChar: boolean;
|
|
8
|
-
/**
|
|
9
|
-
* かな変換前のリテラル形(spec 2.2)。英数1コードポイントのクエリが変換で
|
|
10
|
-
* 形を変えた場合(母音 a/i/u/e/o と n)のみ非 null。tier 1 かな空間で並列照合し、
|
|
11
|
-
* ASCII データへの中間一致が変換で不可能になるのを防ぐ
|
|
12
|
-
*/
|
|
13
|
-
readonly literal: string | null;
|
|
14
|
-
/** 訓令式ローマ字(romaji オプションで無効時 null) */
|
|
11
|
+
/** 訓令式ローマ字(romaji オプションで無効時・literal 経路では null) */
|
|
15
12
|
readonly kunrei: string | null;
|
|
16
|
-
/** ヘボン式ローマ字(romaji
|
|
13
|
+
/** ヘボン式ローマ字(romaji オプションで無効時・literal 経路では null) */
|
|
17
14
|
readonly hepburn: string | null;
|
|
18
15
|
/** 各空間の文字集合マスク(前置フィルタ用、空間が無効なら 0) */
|
|
19
16
|
readonly kanaMask: number;
|
|
20
17
|
readonly kunreiMask: number;
|
|
21
18
|
readonly hepburnMask: number;
|
|
19
|
+
/** 打鍵ラティス(literal 経路でかなを含むとき。それ以外は null で kana を文字列照合) */
|
|
20
|
+
readonly lattice: Lattice | null;
|
|
21
|
+
/**
|
|
22
|
+
* literal 経路で kana が同じ展開経路の phonetic と同一か。打鍵の文字を含まないデータでは
|
|
23
|
+
* ラティスは kana の文字列照合に帰着し phonetic が包含するため、照合を省く(pipeline が設定)
|
|
24
|
+
*/
|
|
25
|
+
shadowed: boolean;
|
|
22
26
|
/** bigram 集合(tier 4 用、遅延生成) */
|
|
23
27
|
bigrams: Set<string> | null;
|
|
24
28
|
}
|
|
25
29
|
/** クエリ文字列(1経路分)を正規化する */
|
|
26
|
-
export declare function normalizeQuery(raw: string, romaji: RomajiOption): NormalizedQuery;
|
|
30
|
+
export declare function normalizeQuery(raw: string, romaji: RomajiOption, mode?: QueryMode): NormalizedQuery;
|
|
27
31
|
/** tier 4 実行時に bigram を遅延生成してキャッシュする */
|
|
28
32
|
export declare function ensureQueryBigrams(q: NormalizedQuery): Set<string>;
|
|
29
33
|
//# sourceMappingURL=query.d.ts.map
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE1D,yBAAyB;AACzB,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/C,oBAAoB;AACpB,MAAM,WAAW,eAAe;IAC9B,aAAa;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAC7B;AAED,yBAAyB;AACzB,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,SAAsB,GAC3B,eAAe,CAmBjB;AAOD,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAGlE"}
|