@ycookiey/yfuzzy 0.4.0 → 0.5.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 +14 -0
- package/dist/entry.d.ts +12 -0
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +18 -3
- package/dist/entry.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/lattice.d.ts +9 -0
- package/dist/lattice.d.ts.map +1 -1
- package/dist/lattice.js +38 -2
- package/dist/lattice.js.map +1 -1
- package/dist/matches.d.ts +5 -0
- package/dist/matches.d.ts.map +1 -1
- package/dist/matches.js +3 -3
- package/dist/matches.js.map +1 -1
- package/dist/pipeline.d.ts +2 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +46 -0
- package/dist/pipeline.js.map +1 -1
- package/dist/query.d.ts +6 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +13 -1
- package/dist/query.js.map +1 -1
- package/dist/romaji/convert.d.ts +2 -0
- package/dist/romaji/convert.d.ts.map +1 -1
- package/dist/romaji/convert.js +8 -0
- package/dist/romaji/convert.js.map +1 -1
- package/dist/terms.d.ts +20 -0
- package/dist/terms.d.ts.map +1 -0
- package/dist/terms.js +199 -0
- package/dist/terms.js.map +1 -0
- package/dist/tiers/tier1-exact.d.ts +31 -1
- package/dist/tiers/tier1-exact.d.ts.map +1 -1
- package/dist/tiers/tier1-exact.js +255 -153
- 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 +3 -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 +17 -12
- package/dist/tiers/tier3-typo.js.map +1 -1
- package/dist/tiers/tier4-structural.js +1 -1
- package/dist/tiers/tier4-structural.js.map +1 -1
- package/dist/tiers/types.d.ts +4 -1
- package/dist/tiers/types.d.ts.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/yfuzzy.min.js +2 -2
- package/package.json +1 -1
package/dist/romaji/convert.js
CHANGED
|
@@ -12,6 +12,14 @@ export function kunreiEnabled(option) {
|
|
|
12
12
|
export function hepburnEnabled(option) {
|
|
13
13
|
return option === 'both' || option === 'hepburn';
|
|
14
14
|
}
|
|
15
|
+
/** 長音の印つきローマ字(spec 2.2)に使う方式: 訓令、無効なら ヘボン、どちらも無効なら null */
|
|
16
|
+
export function longVowelTable(option) {
|
|
17
|
+
if (kunreiEnabled(option))
|
|
18
|
+
return KUNREI;
|
|
19
|
+
if (hepburnEnabled(option))
|
|
20
|
+
return HEPBURN;
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
15
23
|
/**
|
|
16
24
|
* core kana(1文字 or 拗音ダイグラフ 2文字、ー/ッ を含まない)をローマ字へ。
|
|
17
25
|
* テーブルに無い文字(漢字・記号・英数)は小文字化してそのまま返す(パススルー)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/romaji/convert.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,0CAA0C;AAE1C,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO5F,MAAM,CAAC,MAAM,MAAM,GAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AACxF,MAAM,CAAC,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAQ3F,oBAAoB;AACpB,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC;AAClD,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAkB;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/romaji/convert.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,0CAA0C;AAE1C,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO5F,MAAM,CAAC,MAAM,MAAM,GAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AACxF,MAAM,CAAC,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAQ3F,oBAAoB;AACpB,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC;AAClD,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC;AACnD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAkB;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/terms.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NormalizedQuery } from './query.js';
|
|
2
|
+
import type { IndexEntry } from './entry.js';
|
|
3
|
+
import type { TierMatch } from './tiers/types.js';
|
|
4
|
+
/** item ごとの最良の組み合わせ */
|
|
5
|
+
export interface TermsHit {
|
|
6
|
+
/** 弱い語の段 */
|
|
7
|
+
readonly cls: number;
|
|
8
|
+
/** 弱い語の素点 */
|
|
9
|
+
readonly raw: number;
|
|
10
|
+
/** 語の順番どおりに単語が並ぶか */
|
|
11
|
+
readonly ordered: boolean;
|
|
12
|
+
/** 各語の一致(ハイライト用) */
|
|
13
|
+
readonly parts: readonly TierMatch[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 語ごとの正規化済みクエリ(各語の経路の一覧)で照合し、すべての語を含む item の最良の組み合わせを返す。
|
|
17
|
+
* 先にすべての語の tier 1 で item を絞り(2 語目以降は、それまでの語に当たった item だけ)、残った item で出現を集める。
|
|
18
|
+
*/
|
|
19
|
+
export declare function matchTerms(terms: readonly (readonly NormalizedQuery[])[], singles: readonly boolean[], entries: readonly IndexEntry[]): Map<number, TermsHit>;
|
|
20
|
+
//# sourceMappingURL=terms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../src/terms.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA8BzD,uBAAuB;AACvB,MAAM,WAAW,QAAQ;IACvB,YAAY;IACZ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,oBAAoB;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAyKD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,CAAC,SAAS,eAAe,EAAE,CAAC,EAAE,EAC9C,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,OAAO,EAAE,SAAS,UAAU,EAAE,GAC7B,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAmBvB"}
|
package/dist/terms.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// 複数の語(spec 2.7)。空白で区切った語をすべて含む item に絞る。
|
|
2
|
+
// 各語は tier 1 の直接一致だけを認め(1 文字の語は先頭・単語の頭だけ)、別の語は別の単語に当てる。
|
|
3
|
+
// 語の順番は問わない。item ごとに、語ごとの出現から 1 つずつ選んだ組み合わせのうち、
|
|
4
|
+
// 弱い語の段 → 順番どおりか → 弱い語の素点 の順に最良のものを採る。
|
|
5
|
+
import { contiguousAt } from './lattice.js';
|
|
6
|
+
import { romajiPosToKana } from './matches.js';
|
|
7
|
+
import { grade, initials, KIND_OF_CLASS, KANA_PREFIX, KANA_SUBSTRING, ROMAJI_PREFIX, ROMAJI_SUBSTRING, HEPBURN_PENALTY, PREFIX, WORD, INNER, tier1Exact, } from './tiers/tier1-exact.js';
|
|
8
|
+
/** 組み合わせの総当たりの上限(単語の多い長い item で語ごとの出現が多いときに打ち切る) */
|
|
9
|
+
const MAX_COMBINATIONS = 4096;
|
|
10
|
+
/** かな空間の位置 p が何番目の単語か(heads は単語の頭の昇順) */
|
|
11
|
+
function wordOf(p, heads) {
|
|
12
|
+
let lo = 0;
|
|
13
|
+
let hi = heads.length - 1;
|
|
14
|
+
while (lo < hi) {
|
|
15
|
+
const mid = (lo + hi + 1) >> 1;
|
|
16
|
+
if (heads[mid] <= p)
|
|
17
|
+
lo = mid;
|
|
18
|
+
else
|
|
19
|
+
hi = mid - 1;
|
|
20
|
+
}
|
|
21
|
+
return lo;
|
|
22
|
+
}
|
|
23
|
+
function formOf(e, space) {
|
|
24
|
+
return space === 'kunrei' ? e.kunrei : space === 'hepburn' ? e.hepburn : space === 'long' ? e.long : null;
|
|
25
|
+
}
|
|
26
|
+
function headsOf(e, space) {
|
|
27
|
+
if (space === 'kunrei')
|
|
28
|
+
return [e.kunreiHeads, e.kunreiHeadList];
|
|
29
|
+
if (space === 'hepburn')
|
|
30
|
+
return [e.hepburnHeads, e.hepburnHeadList];
|
|
31
|
+
if (space === 'long')
|
|
32
|
+
return [e.longHeads, e.longHeadList];
|
|
33
|
+
return [e.kanaBoundaries, e.kanaHeadList];
|
|
34
|
+
}
|
|
35
|
+
/** 語の出現を、当たった単語の番号つきで記録する。1 文字の語は先頭・単語の頭だけ */
|
|
36
|
+
function record(out, e, single, space, positions, cls, raw) {
|
|
37
|
+
if (single && cls < WORD)
|
|
38
|
+
return;
|
|
39
|
+
const kanaPositions = space === 'kana' ? positions : positions.flatMap((p) => romajiPosToKana(p, formOf(e, space).syllables));
|
|
40
|
+
const words = [...new Set(kanaPositions.map((p) => wordOf(p, e.kanaHeadList)))].sort((a, b) => a - b);
|
|
41
|
+
const match = { tier: 1, kind: KIND_OF_CLASS[cls], intraScore: grade(cls, raw), space, positions };
|
|
42
|
+
out.push({ cls, raw, words, match });
|
|
43
|
+
}
|
|
44
|
+
function range(offset, len) {
|
|
45
|
+
return Array.from({ length: len }, (_, i) => offset + i);
|
|
46
|
+
}
|
|
47
|
+
/** 文字列の語のすべての出現(前方・単語の頭・単語の途中)と頭文字の一致 */
|
|
48
|
+
function stringOccurrences(out, e, single, query, data, space, prefixFactor, substringFactor, minLen, qMask, dMask) {
|
|
49
|
+
if (query.length === 0 || data.length === 0 || (qMask & ~dMask) !== 0)
|
|
50
|
+
return;
|
|
51
|
+
const [heads, headList] = headsOf(e, space);
|
|
52
|
+
const n = data.length;
|
|
53
|
+
for (let s = data.indexOf(query); s >= 0; s = data.indexOf(query, s + 1)) {
|
|
54
|
+
const cls = s === 0 ? PREFIX : heads.has(s) ? WORD : INNER;
|
|
55
|
+
if (cls !== PREFIX && query.length < minLen)
|
|
56
|
+
continue;
|
|
57
|
+
const factor = cls === PREFIX ? prefixFactor : substringFactor;
|
|
58
|
+
record(out, e, single, space, range(s, query.length), cls, (query.length / n) * factor);
|
|
59
|
+
}
|
|
60
|
+
const ini = initials(query, data, headList, space, substringFactor);
|
|
61
|
+
if (ini !== null)
|
|
62
|
+
record(out, e, single, space, ini.positions, ini.cls, ini.intraScore * 4 - ini.cls);
|
|
63
|
+
}
|
|
64
|
+
const scratchMatch = { plain: 0, ks: 0 };
|
|
65
|
+
/** 1 つの語(1 経路)の出現を集める(tier 1 と同じ空間・係数) */
|
|
66
|
+
function occurrences(out, q, e, single) {
|
|
67
|
+
const kana = e.kana.text;
|
|
68
|
+
if (q.lattice !== null && e.hasKeystrokeChar) {
|
|
69
|
+
const lat = q.lattice;
|
|
70
|
+
const n = kana.length;
|
|
71
|
+
const add = (s, len, ks) => {
|
|
72
|
+
const cls = s === 0 ? PREFIX : e.kanaBoundaries.has(s) ? WORD : INNER;
|
|
73
|
+
if (ks && cls !== PREFIX && len < 2)
|
|
74
|
+
return; // 打鍵の部分一致は 2 文字以上
|
|
75
|
+
const factor = ks ? (cls === PREFIX ? ROMAJI_PREFIX : ROMAJI_SUBSTRING) : cls === PREFIX ? KANA_PREFIX : KANA_SUBSTRING;
|
|
76
|
+
record(out, e, single, 'kana', range(s, len), cls, (len / n) * factor);
|
|
77
|
+
};
|
|
78
|
+
if (lat.paths !== null) {
|
|
79
|
+
for (const [p, ks] of lat.paths)
|
|
80
|
+
for (let s = kana.indexOf(p); s >= 0; s = kana.indexOf(p, s + 1))
|
|
81
|
+
add(s, p.length, ks);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
for (let s = 0; s < n; s++) {
|
|
85
|
+
if (!lat.firstCodes.has(kana.charCodeAt(s)))
|
|
86
|
+
continue;
|
|
87
|
+
contiguousAt(lat, kana, s, scratchMatch);
|
|
88
|
+
if (scratchMatch.plain > 0)
|
|
89
|
+
add(s, scratchMatch.plain, false);
|
|
90
|
+
if (scratchMatch.ks > 0)
|
|
91
|
+
add(s, scratchMatch.ks, true);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else if (!q.shadowed) {
|
|
96
|
+
stringOccurrences(out, e, single, q.kana, kana, 'kana', KANA_PREFIX, KANA_SUBSTRING, 1, q.kanaMask, e.kanaMask);
|
|
97
|
+
}
|
|
98
|
+
if (q.kunrei !== null && e.kunrei !== null) {
|
|
99
|
+
stringOccurrences(out, e, single, q.kunrei, e.kunrei.text, 'kunrei', ROMAJI_PREFIX, ROMAJI_SUBSTRING, 2, q.kunreiMask, e.kunreiMask);
|
|
100
|
+
}
|
|
101
|
+
if (q.hepburn !== null && e.hepburn !== null) {
|
|
102
|
+
const f = HEPBURN_PENALTY;
|
|
103
|
+
stringOccurrences(out, e, single, q.hepburn, e.hepburn.text, 'hepburn', ROMAJI_PREFIX * f, ROMAJI_SUBSTRING * f, 2, q.hepburnMask, e.hepburnMask);
|
|
104
|
+
}
|
|
105
|
+
if (q.long !== null && e.long !== null) {
|
|
106
|
+
stringOccurrences(out, e, single, q.long, e.long.text, 'long', ROMAJI_PREFIX, ROMAJI_SUBSTRING, 2, q.longMask, e.longMask);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** 同じ単語の組に当たる出現は最良の 1 つにまとめ、良い順に並べる */
|
|
110
|
+
function compact(occs) {
|
|
111
|
+
const best = new Map();
|
|
112
|
+
for (const o of occs) {
|
|
113
|
+
const key = o.words.join(',');
|
|
114
|
+
const cur = best.get(key);
|
|
115
|
+
if (cur === undefined || o.match.intraScore > cur.match.intraScore)
|
|
116
|
+
best.set(key, o);
|
|
117
|
+
}
|
|
118
|
+
return [...best.values()].sort((a, b) => b.match.intraScore - a.match.intraScore);
|
|
119
|
+
}
|
|
120
|
+
/** 組み合わせの良さ: 弱い語の段 → 順番どおりか → 弱い語の素点(大きいほど良い) */
|
|
121
|
+
function better(a, b) {
|
|
122
|
+
if (b === null)
|
|
123
|
+
return true;
|
|
124
|
+
if (a.cls !== b.cls)
|
|
125
|
+
return a.cls > b.cls;
|
|
126
|
+
if (a.ordered !== b.ordered)
|
|
127
|
+
return a.ordered;
|
|
128
|
+
return a.raw > b.raw;
|
|
129
|
+
}
|
|
130
|
+
/** 語ごとの出現から、別々の単語に当たる組み合わせのうち最良のものを選ぶ */
|
|
131
|
+
function bestCombination(perTerm) {
|
|
132
|
+
// 総当たりの数を上限に収める(良い順の先頭から残す)
|
|
133
|
+
let lists = perTerm;
|
|
134
|
+
const product = (ls) => ls.reduce((p, l) => p * Math.max(1, l.length), 1);
|
|
135
|
+
for (let keep = 64; product(lists) > MAX_COMBINATIONS && keep > 1; keep >>= 1)
|
|
136
|
+
lists = perTerm.map((l) => l.slice(0, keep));
|
|
137
|
+
let best = null;
|
|
138
|
+
const chosen = [];
|
|
139
|
+
const used = new Set();
|
|
140
|
+
const walk = (i) => {
|
|
141
|
+
if (i === lists.length) {
|
|
142
|
+
let weakest = chosen[0];
|
|
143
|
+
for (const o of chosen)
|
|
144
|
+
if (o.match.intraScore < weakest.match.intraScore)
|
|
145
|
+
weakest = o;
|
|
146
|
+
let ordered = true;
|
|
147
|
+
for (let k = 1; k < chosen.length && ordered; k++) {
|
|
148
|
+
ordered = chosen[k - 1].words[chosen[k - 1].words.length - 1] < chosen[k].words[0];
|
|
149
|
+
}
|
|
150
|
+
const hit = { cls: weakest.cls, raw: weakest.raw, ordered, parts: chosen.map((o) => o.match) };
|
|
151
|
+
if (better(hit, best))
|
|
152
|
+
best = hit;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
for (const o of lists[i]) {
|
|
156
|
+
if (o.words.some((w) => used.has(w)))
|
|
157
|
+
continue;
|
|
158
|
+
for (const w of o.words)
|
|
159
|
+
used.add(w);
|
|
160
|
+
chosen.push(o);
|
|
161
|
+
walk(i + 1);
|
|
162
|
+
chosen.pop();
|
|
163
|
+
for (const w of o.words)
|
|
164
|
+
used.delete(w);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
walk(0);
|
|
168
|
+
return best;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 語ごとの正規化済みクエリ(各語の経路の一覧)で照合し、すべての語を含む item の最良の組み合わせを返す。
|
|
172
|
+
* 先にすべての語の tier 1 で item を絞り(2 語目以降は、それまでの語に当たった item だけ)、残った item で出現を集める。
|
|
173
|
+
*/
|
|
174
|
+
export function matchTerms(terms, singles, entries) {
|
|
175
|
+
// 出現は tier 1 と同じ空間・条件で集めるので、tier 1 に当たらない item には無い。
|
|
176
|
+
// tier 1 は一致が 1 つ見つかれば残りを省けるため、先にすべての語で振るい落としてから出現を集める
|
|
177
|
+
let candidates = entries;
|
|
178
|
+
for (const paths of terms)
|
|
179
|
+
candidates = candidates.filter((e) => paths.some((q) => tier1Exact(q, e) !== null));
|
|
180
|
+
const hits = new Map();
|
|
181
|
+
for (const e of candidates) {
|
|
182
|
+
const perTerm = [];
|
|
183
|
+
for (let t = 0; t < terms.length; t++) {
|
|
184
|
+
const out = [];
|
|
185
|
+
for (const q of terms[t])
|
|
186
|
+
occurrences(out, q, e, singles[t]);
|
|
187
|
+
if (out.length === 0)
|
|
188
|
+
break;
|
|
189
|
+
perTerm.push(compact(out));
|
|
190
|
+
}
|
|
191
|
+
if (perTerm.length < terms.length)
|
|
192
|
+
continue;
|
|
193
|
+
const hit = bestCombination(perTerm);
|
|
194
|
+
if (hit !== null)
|
|
195
|
+
hits.set(e.refIndex, hit);
|
|
196
|
+
}
|
|
197
|
+
return hits;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=terms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terms.js","sourceRoot":"","sources":["../src/terms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,33 @@
|
|
|
1
|
-
import type { Matcher } from './types.js';
|
|
1
|
+
import type { Matcher, Space } from './types.js';
|
|
2
|
+
import type { MatchKind } from '../types.js';
|
|
3
|
+
export declare const KANA_PREFIX = 1;
|
|
4
|
+
export declare const KANA_SUBSTRING = 0.9;
|
|
5
|
+
export declare const ROMAJI_PREFIX = 0.97;
|
|
6
|
+
export declare const ROMAJI_SUBSTRING = 0.87;
|
|
7
|
+
export declare const HEPBURN_PENALTY = 0.99;
|
|
8
|
+
export declare const PREFIX = 3;
|
|
9
|
+
export declare const WORD = 2;
|
|
10
|
+
export declare const INITIALS = 1;
|
|
11
|
+
export declare const INNER = 0;
|
|
12
|
+
export declare const KIND_OF_CLASS: readonly MatchKind[];
|
|
13
|
+
/** 段と素点(coverage × 係数 ∈ (0, 1])から intraScore を作る。完全一致は (3 + 1) / 4 = 1 */
|
|
14
|
+
export declare function grade(cls: number, raw: number): number;
|
|
15
|
+
export interface Candidate {
|
|
16
|
+
readonly intraScore: number;
|
|
17
|
+
/** 段(PREFIX・WORD・INITIALS・INNER) */
|
|
18
|
+
readonly cls: number;
|
|
19
|
+
readonly space: Space;
|
|
20
|
+
readonly offset: number;
|
|
21
|
+
readonly len: number;
|
|
22
|
+
readonly positions: number[] | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 頭文字の一致: クエリの各文字を、単語の頭から始め、直前の続き(+1)か後ろの単語の頭に置けるか。
|
|
26
|
+
* = クエリを、単語の頭から始まる連続一致の断片に分け、断片の頭が右へ進むように並べられるか。
|
|
27
|
+
* 単語の頭(heads、昇順)の上だけで解くため、計算量はデータ長によらない。
|
|
28
|
+
* 置き方は先頭寄り・続き優先(各断片を並べ切れる範囲で最長、次の断片は最も前の単語の頭)。
|
|
29
|
+
* 単語の頭が先頭だけのデータは前方一致と同じため扱わない。
|
|
30
|
+
*/
|
|
31
|
+
export declare function initials(query: string, data: string, heads: readonly number[], space: Space, factor: number): Candidate | null;
|
|
2
32
|
export declare const tier1Exact: Matcher;
|
|
3
33
|
//# sourceMappingURL=tier1-exact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier1-exact.d.ts","sourceRoot":"","sources":["../../src/tiers/tier1-exact.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"tier1-exact.d.ts","sourceRoot":"","sources":["../../src/tiers/tier1-exact.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,eAAO,MAAM,WAAW,IAAM,CAAC;AAC/B,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,eAAe,OAAO,CAAC;AAGpC,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,IAAI,IAAI,CAAC;AACtB,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,KAAK,IAAI,CAAC;AACvB,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAA4C,CAAC;AAE3F,0EAA0E;AAC1E,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAGD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC;AAyCD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,SAAS,GAAG,IAAI,CAwDlB;AA8MD,eAAO,MAAM,UAAU,EAAE,OAgCxB,CAAC"}
|