@ycookiey/yfuzzy 0.1.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/LICENSE +21 -0
- package/README.md +144 -0
- package/THIRD_PARTY_NOTICES.md +38 -0
- package/dist/ablate.d.ts +8 -0
- package/dist/ablate.d.ts.map +1 -0
- package/dist/ablate.js +11 -0
- package/dist/ablate.js.map +1 -0
- package/dist/bigram.d.ts +6 -0
- package/dist/bigram.d.ts.map +1 -0
- package/dist/bigram.js +17 -0
- package/dist/bigram.js.map +1 -0
- package/dist/charmask.d.ts +5 -0
- package/dist/charmask.d.ts.map +1 -0
- package/dist/charmask.js +23 -0
- package/dist/charmask.js.map +1 -0
- package/dist/entry.d.ts +29 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +32 -0
- package/dist/entry.js.map +1 -0
- package/dist/expand.d.ts +12 -0
- package/dist/expand.d.ts.map +1 -0
- package/dist/expand.js +52 -0
- package/dist/expand.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/matches.d.ts +8 -0
- package/dist/matches.d.ts.map +1 -0
- package/dist/matches.js +68 -0
- package/dist/matches.js.map +1 -0
- package/dist/normalize.d.ts +24 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +114 -0
- package/dist/normalize.js.map +1 -0
- package/dist/pipeline.d.ts +31 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +75 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/query.d.ts +21 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +33 -0
- package/dist/query.js.map +1 -0
- package/dist/romaji/convert.d.ts +23 -0
- package/dist/romaji/convert.d.ts.map +1 -0
- package/dist/romaji/convert.js +34 -0
- package/dist/romaji/convert.js.map +1 -0
- package/dist/romaji/table-hepburn.d.ts +5 -0
- package/dist/romaji/table-hepburn.d.ts.map +1 -0
- package/dist/romaji/table-hepburn.js +46 -0
- package/dist/romaji/table-hepburn.js.map +1 -0
- package/dist/romaji/table-kunrei.d.ts +5 -0
- package/dist/romaji/table-kunrei.d.ts.map +1 -0
- package/dist/romaji/table-kunrei.js +46 -0
- package/dist/romaji/table-kunrei.js.map +1 -0
- package/dist/syllable.d.ts +37 -0
- package/dist/syllable.d.ts.map +1 -0
- package/dist/syllable.js +91 -0
- package/dist/syllable.js.map +1 -0
- package/dist/tiers/tier1-exact.d.ts +3 -0
- package/dist/tiers/tier1-exact.d.ts.map +1 -0
- package/dist/tiers/tier1-exact.js +59 -0
- package/dist/tiers/tier1-exact.js.map +1 -0
- package/dist/tiers/tier2-flexible.d.ts +3 -0
- package/dist/tiers/tier2-flexible.d.ts.map +1 -0
- package/dist/tiers/tier2-flexible.js +169 -0
- package/dist/tiers/tier2-flexible.js.map +1 -0
- package/dist/tiers/tier3-typo.d.ts +3 -0
- package/dist/tiers/tier3-typo.d.ts.map +1 -0
- package/dist/tiers/tier3-typo.js +95 -0
- package/dist/tiers/tier3-typo.js.map +1 -0
- package/dist/tiers/tier4-structural.d.ts +3 -0
- package/dist/tiers/tier4-structural.d.ts.map +1 -0
- package/dist/tiers/tier4-structural.js +29 -0
- package/dist/tiers/tier4-structural.js.map +1 -0
- package/dist/tiers/types.d.ts +17 -0
- package/dist/tiers/types.d.ts.map +1 -0
- package/dist/tiers/types.js +4 -0
- package/dist/tiers/types.js.map +1 -0
- package/dist/to-kana.d.ts +2 -0
- package/dist/to-kana.d.ts.map +1 -0
- package/dist/to-kana.js +8 -0
- package/dist/to-kana.js.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/vendor/wanakana/romaji-to-kana.d.ts +6 -0
- package/dist/vendor/wanakana/romaji-to-kana.d.ts.map +1 -0
- package/dist/vendor/wanakana/romaji-to-kana.js +182 -0
- package/dist/vendor/wanakana/romaji-to-kana.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** 元文字列上の半開区間 [start, end)(UTF-16 コードユニット) */
|
|
2
|
+
export type Span = readonly [number, number];
|
|
3
|
+
export interface Normalized {
|
|
4
|
+
/** 正規化後の文字列 */
|
|
5
|
+
readonly text: string;
|
|
6
|
+
/**
|
|
7
|
+
* map[i] = text のコードユニット i に対応する元文字列の [start, end)。
|
|
8
|
+
* 不変条件: map.length === text.length。
|
|
9
|
+
* n:1 変換(ガ→ガ)は元の両コードポイントを覆う区間を割り当てる。
|
|
10
|
+
*/
|
|
11
|
+
readonly map: readonly Span[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 適用する変換ステップの範囲。
|
|
15
|
+
* - 'all': 全ステップ(データ側 normalize 用)
|
|
16
|
+
* - 'preKana': 手順 1–3(U+3000・全角英数・小文字化)。クエリ側 toKana の前段
|
|
17
|
+
* - 'postKana': 手順 4–5(半角カナ合成・ひら→カタ)。クエリ側 toKana の後段
|
|
18
|
+
*/
|
|
19
|
+
export type TransformMode = 'all' | 'preKana' | 'postKana';
|
|
20
|
+
/** 共通正規化(全手順)+ normMap 生成。データ側 Index 構築用。 */
|
|
21
|
+
export declare function normalize(raw: string): Normalized;
|
|
22
|
+
/** 指定ステップのみ適用し文字列を返す(位置マップ不要のクエリ側用)。 */
|
|
23
|
+
export declare function applyTransforms(raw: string, mode: TransformMode): string;
|
|
24
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAWA,8CAA8C;AAC9C,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC;CAC/B;AAwBD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AA+E3D,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAGjD;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAExE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// 共通正規化(spec 2.1)。クエリ・データ両方に適用し、正規化カナ形と
|
|
2
|
+
// 元文字列への位置マップ(normMap)を生成する。
|
|
3
|
+
//
|
|
4
|
+
// 適用順(コードポイント単位、1パス):
|
|
5
|
+
// 1. 全角スペース U+3000 → 半角スペース
|
|
6
|
+
// 2. 全角英数記号 U+FF01–FF5E → ASCII
|
|
7
|
+
// 3. ASCII 大文字 → 小文字
|
|
8
|
+
// 4. 半角カタカナ → 全角カタカナ(濁点/半濁点は合成)
|
|
9
|
+
// 5. ひらがな → カタカナ
|
|
10
|
+
// 漢字・絵文字・記号は無変換で通す。サロゲートペアは分断しない。
|
|
11
|
+
const IDEOGRAPHIC_SPACE = 0x3000;
|
|
12
|
+
const FULLWIDTH_ASCII_START = 0xff01;
|
|
13
|
+
const FULLWIDTH_ASCII_END = 0xff5e;
|
|
14
|
+
const FULLWIDTH_OFFSET = 0xfee0;
|
|
15
|
+
const ASCII_UPPER_START = 0x41;
|
|
16
|
+
const ASCII_UPPER_END = 0x5a;
|
|
17
|
+
const HW_KATAKANA_START = 0xff61;
|
|
18
|
+
const HW_KATAKANA_END = 0xff9d; // ン まで(゙ FF9E / ゚ FF9F は結合記号として別扱い)
|
|
19
|
+
const HW_DAKUTEN = 0xff9e;
|
|
20
|
+
const HW_HANDAKUTEN = 0xff9f;
|
|
21
|
+
const COMBINING_DAKUTEN = '゙';
|
|
22
|
+
const COMBINING_HANDAKUTEN = '゚';
|
|
23
|
+
const STANDALONE_DAKUTEN = '゛';
|
|
24
|
+
const STANDALONE_HANDAKUTEN = '゜';
|
|
25
|
+
const HIRAGANA_START = 0x3041;
|
|
26
|
+
const HIRAGANA_END = 0x3096;
|
|
27
|
+
const HIRA_TO_KATA_OFFSET = 0x60;
|
|
28
|
+
// 半角カタカナ FF61..FF9D → 全角(順序は Unicode ブロック順、61 文字)
|
|
29
|
+
const HW_KATA_TABLE = '。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン';
|
|
30
|
+
function toUnits(raw) {
|
|
31
|
+
const units = [];
|
|
32
|
+
let offset = 0;
|
|
33
|
+
for (const cp of raw) {
|
|
34
|
+
units.push({ cp, start: offset, end: offset + cp.length });
|
|
35
|
+
offset += cp.length;
|
|
36
|
+
}
|
|
37
|
+
return units;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 正規化のコア(spec 2.1)。mode で適用ステップを絞り、withMap で normMap 生成を制御する。
|
|
41
|
+
* normalize()(mode='all'・map あり)と applyTransforms()(map なし)が共有する。
|
|
42
|
+
*/
|
|
43
|
+
function run(raw, mode, withMap) {
|
|
44
|
+
const doPre = mode === 'all' || mode === 'preKana';
|
|
45
|
+
const doPost = mode === 'all' || mode === 'postKana';
|
|
46
|
+
const units = toUnits(raw);
|
|
47
|
+
let text = '';
|
|
48
|
+
const map = [];
|
|
49
|
+
for (let i = 0; i < units.length; i++) {
|
|
50
|
+
const cur = units[i];
|
|
51
|
+
const code = cur.cp.codePointAt(0);
|
|
52
|
+
let out;
|
|
53
|
+
let spanEnd = cur.end;
|
|
54
|
+
if (doPre && code === IDEOGRAPHIC_SPACE) {
|
|
55
|
+
out = ' ';
|
|
56
|
+
}
|
|
57
|
+
else if (doPre && code >= FULLWIDTH_ASCII_START && code <= FULLWIDTH_ASCII_END) {
|
|
58
|
+
const half = String.fromCharCode(code - FULLWIDTH_OFFSET);
|
|
59
|
+
out = half >= 'A' && half <= 'Z' ? half.toLowerCase() : half;
|
|
60
|
+
}
|
|
61
|
+
else if (doPre && code >= ASCII_UPPER_START && code <= ASCII_UPPER_END) {
|
|
62
|
+
out = cur.cp.toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
else if (doPost && code >= HW_KATAKANA_START && code <= HW_KATAKANA_END) {
|
|
65
|
+
const base = HW_KATA_TABLE[code - HW_KATAKANA_START];
|
|
66
|
+
const next = i + 1 < units.length ? units[i + 1] : null;
|
|
67
|
+
const nextCode = next ? next.cp.codePointAt(0) : -1;
|
|
68
|
+
if (nextCode === HW_DAKUTEN || nextCode === HW_HANDAKUTEN) {
|
|
69
|
+
const mark = nextCode === HW_DAKUTEN ? COMBINING_DAKUTEN : COMBINING_HANDAKUTEN;
|
|
70
|
+
const composed = (base + mark).normalize('NFC');
|
|
71
|
+
if ([...composed].length === 1) {
|
|
72
|
+
out = composed;
|
|
73
|
+
spanEnd = next.end;
|
|
74
|
+
i++; // 結合記号を消費
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
out = base; // 合成不可(例: ア+゙)→ 記号は次反復で単独処理
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
out = base;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else if (doPost && code === HW_DAKUTEN) {
|
|
85
|
+
out = STANDALONE_DAKUTEN;
|
|
86
|
+
}
|
|
87
|
+
else if (doPost && code === HW_HANDAKUTEN) {
|
|
88
|
+
out = STANDALONE_HANDAKUTEN;
|
|
89
|
+
}
|
|
90
|
+
else if (doPost && code >= HIRAGANA_START && code <= HIRAGANA_END) {
|
|
91
|
+
out = String.fromCodePoint(code + HIRA_TO_KATA_OFFSET);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
out = cur.cp; // 対象外ステップ・漢字・記号・絵文字などは無変換
|
|
95
|
+
}
|
|
96
|
+
if (withMap) {
|
|
97
|
+
const span = [cur.start, spanEnd];
|
|
98
|
+
for (let k = 0; k < out.length; k++)
|
|
99
|
+
map.push(span);
|
|
100
|
+
}
|
|
101
|
+
text += out;
|
|
102
|
+
}
|
|
103
|
+
return { text, map };
|
|
104
|
+
}
|
|
105
|
+
/** 共通正規化(全手順)+ normMap 生成。データ側 Index 構築用。 */
|
|
106
|
+
export function normalize(raw) {
|
|
107
|
+
const { text, map } = run(raw, 'all', true);
|
|
108
|
+
return { text, map };
|
|
109
|
+
}
|
|
110
|
+
/** 指定ステップのみ適用し文字列を返す(位置マップ不要のクエリ側用)。 */
|
|
111
|
+
export function applyTransforms(raw, mode) {
|
|
112
|
+
return run(raw, mode, false).text;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type SeparatorConfig } from './expand.js';
|
|
2
|
+
import type { IndexEntry } from './entry.js';
|
|
3
|
+
import type { RomajiOption } from './romaji/convert.js';
|
|
4
|
+
import type { TierMatch } from './tiers/types.js';
|
|
5
|
+
/** pipeline 実行設定(index.ts が options から解決して渡す) */
|
|
6
|
+
export interface SearchConfig {
|
|
7
|
+
readonly romaji: RomajiOption;
|
|
8
|
+
readonly separatorExpansion: SeparatorConfig;
|
|
9
|
+
readonly maxTier: number;
|
|
10
|
+
readonly minScore: number;
|
|
11
|
+
readonly limit: number | undefined;
|
|
12
|
+
readonly includeMatches: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** 1 item の照合結果(公開層が item を解決し SearchResult 化する。match は M8 の matches 用に保持) */
|
|
15
|
+
export interface SearchHit {
|
|
16
|
+
readonly refIndex: number;
|
|
17
|
+
readonly score: number;
|
|
18
|
+
readonly tier: 1 | 2 | 3 | 4;
|
|
19
|
+
readonly match: TierMatch;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 検索本体。query は生入力、entries は構築済みエントリ。
|
|
23
|
+
* 経路展開・クエリ正規化は item 非依存なので item ループ前に1回だけ行う。
|
|
24
|
+
*
|
|
25
|
+
* 実行は tier-first 転置(tier 昇順の外ループ × エントリ内ループ)。各エントリは
|
|
26
|
+
* 最初にマッチした tier で claim し以降の tier では評価しない(first-match-wins と等価)。
|
|
27
|
+
* tier 完了時に limit 件溜まれば打ち切る: tier レンジは分離(tier1>tier2>…)し後続 tier は
|
|
28
|
+
* 必ず下回るため、上位 limit 件は確定済みで結果は非転置と同一(spec 4.0/5章)。
|
|
29
|
+
*/
|
|
30
|
+
export declare function runSearch(query: string, entries: readonly IndexEntry[], config: SearchConfig): SearchHit[];
|
|
31
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +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;AAED,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,CA4Bb"}
|
package/dist/pipeline.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// 実行モデル(spec 4.0)+ スコアリング・ソート・limit(spec 5章)。
|
|
2
|
+
// 公開 API(index.ts)から呼ばれる内部エンジン。
|
|
3
|
+
import { normalizeQuery } from './query.js';
|
|
4
|
+
import { expandQuery } from './expand.js';
|
|
5
|
+
import { tier1Exact } from './tiers/tier1-exact.js';
|
|
6
|
+
import { tier2Flexible } from './tiers/tier2-flexible.js';
|
|
7
|
+
import { tier3Typo } from './tiers/tier3-typo.js';
|
|
8
|
+
import { tier4Structural } from './tiers/tier4-structural.js';
|
|
9
|
+
// tier 昇順。slice(0, maxTier) で実行対象を絞る(spec 4.0)。
|
|
10
|
+
// 既定 maxTier=3 では tier4 は実行されない(インデックス3が範囲外)。
|
|
11
|
+
const ALL_MATCHERS = [tier1Exact, tier2Flexible, tier3Typo, tier4Structural];
|
|
12
|
+
function clamp01(x) {
|
|
13
|
+
return x < 0 ? 0 : x > 1 ? 1 : x;
|
|
14
|
+
}
|
|
15
|
+
/** tier 間レンジ分離スコア(spec 5章)。tier1=(0.75,1] … tier4=(0,0.25] */
|
|
16
|
+
function finalScore(m) {
|
|
17
|
+
return (4 - m.tier + clamp01(m.intraScore)) / 4;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 単一 tier の matcher を全経路で照合し、最良(score 降順、同点は経路順)を返す。
|
|
21
|
+
* strict > により同点は先の経路((c)>(a)>(b))が残る。
|
|
22
|
+
*/
|
|
23
|
+
function bestPathAtTier(matcher, e, paths) {
|
|
24
|
+
let best = null;
|
|
25
|
+
for (const q of paths) {
|
|
26
|
+
const m = matcher(q, e);
|
|
27
|
+
if (m === null)
|
|
28
|
+
continue;
|
|
29
|
+
const score = finalScore(m);
|
|
30
|
+
if (best === null || score > best.score) {
|
|
31
|
+
best = { refIndex: e.refIndex, score, tier: m.tier, match: m };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return best;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 検索本体。query は生入力、entries は構築済みエントリ。
|
|
38
|
+
* 経路展開・クエリ正規化は item 非依存なので item ループ前に1回だけ行う。
|
|
39
|
+
*
|
|
40
|
+
* 実行は tier-first 転置(tier 昇順の外ループ × エントリ内ループ)。各エントリは
|
|
41
|
+
* 最初にマッチした tier で claim し以降の tier では評価しない(first-match-wins と等価)。
|
|
42
|
+
* tier 完了時に limit 件溜まれば打ち切る: tier レンジは分離(tier1>tier2>…)し後続 tier は
|
|
43
|
+
* 必ず下回るため、上位 limit 件は確定済みで結果は非転置と同一(spec 4.0/5章)。
|
|
44
|
+
*/
|
|
45
|
+
export function runSearch(query, entries, config) {
|
|
46
|
+
const trimmed = query.trim();
|
|
47
|
+
if (trimmed === '')
|
|
48
|
+
return []; // 空文字・空白のみ(spec 7章)
|
|
49
|
+
const pathStrings = expandQuery(trimmed, config.separatorExpansion);
|
|
50
|
+
if (pathStrings.length === 0)
|
|
51
|
+
return [];
|
|
52
|
+
const paths = pathStrings.map((p) => normalizeQuery(p, config.romaji));
|
|
53
|
+
const matchers = ALL_MATCHERS.slice(0, config.maxTier);
|
|
54
|
+
const { limit, minScore } = config;
|
|
55
|
+
const hits = [];
|
|
56
|
+
const claimed = new Uint8Array(entries.length); // 既にマッチ確定したエントリ
|
|
57
|
+
for (const matcher of matchers) {
|
|
58
|
+
for (let idx = 0; idx < entries.length; idx++) {
|
|
59
|
+
if (claimed[idx])
|
|
60
|
+
continue;
|
|
61
|
+
const hit = bestPathAtTier(matcher, entries[idx], paths);
|
|
62
|
+
if (hit === null)
|
|
63
|
+
continue;
|
|
64
|
+
claimed[idx] = 1;
|
|
65
|
+
if (hit.score >= minScore)
|
|
66
|
+
hits.push(hit);
|
|
67
|
+
}
|
|
68
|
+
// tier 完了時点で limit を満たせば後続 tier は不要(レンジ分離による)
|
|
69
|
+
if (limit !== undefined && hits.length >= limit)
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
hits.sort((a, b) => b.score - a.score || a.refIndex - b.refIndex);
|
|
73
|
+
return limit !== undefined ? hits.slice(0, limit) : hits;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type RomajiOption } from './romaji/convert.js';
|
|
2
|
+
/** クエリ1経路分の正規化結果 */
|
|
3
|
+
export interface NormalizedQuery {
|
|
4
|
+
/** 正規化カナ形 */
|
|
5
|
+
readonly kana: string;
|
|
6
|
+
/** 訓令式ローマ字(romaji オプションで無効時 null) */
|
|
7
|
+
readonly kunrei: string | null;
|
|
8
|
+
/** ヘボン式ローマ字(romaji オプションで無効時 null) */
|
|
9
|
+
readonly hepburn: string | null;
|
|
10
|
+
/** 各空間の文字集合マスク(前置フィルタ用、空間が無効なら 0) */
|
|
11
|
+
readonly kanaMask: number;
|
|
12
|
+
readonly kunreiMask: number;
|
|
13
|
+
readonly hepburnMask: number;
|
|
14
|
+
/** bigram 集合(tier 4 用、遅延生成) */
|
|
15
|
+
bigrams: Set<string> | null;
|
|
16
|
+
}
|
|
17
|
+
/** クエリ文字列(1経路分)を正規化する */
|
|
18
|
+
export declare function normalizeQuery(raw: string, romaji: RomajiOption): NormalizedQuery;
|
|
19
|
+
/** tier 4 実行時に bigram を遅延生成してキャッシュする */
|
|
20
|
+
export declare function ensureQueryBigrams(q: NormalizedQuery): Set<string>;
|
|
21
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAK7B,oBAAoB;AACpB,MAAM,WAAW,eAAe;IAC9B,aAAa;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sCAAsC;IACtC,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,+BAA+B;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAC7B;AAED,yBAAyB;AACzB,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CAajF;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAGlE"}
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// クエリ正規化の束ね(spec 2.2 / 2.3)。1経路分の文字列を NormalizedQuery にする。
|
|
2
|
+
// 経路展開(expand.ts)は呼び出し側で行い、各経路文字列を本モジュールへ渡す。
|
|
3
|
+
//
|
|
4
|
+
// 正規化順(spec 2.2): preKana(手順1-3)→ toKana(ローマ字→かな、常時有効)→
|
|
5
|
+
// postKana(手順4-5)。toKana は romaji オプションと無関係(入力利便のため常時)。
|
|
6
|
+
import { applyTransforms } from './normalize.js';
|
|
7
|
+
import { toKana } from './to-kana.js';
|
|
8
|
+
import { KUNREI, HEPBURN, kunreiEnabled, hepburnEnabled, } from './romaji/convert.js';
|
|
9
|
+
import { kanaToRomaji } from './syllable.js';
|
|
10
|
+
import { generateBigrams } from './bigram.js';
|
|
11
|
+
import { charMask } from './charmask.js';
|
|
12
|
+
/** クエリ文字列(1経路分)を正規化する */
|
|
13
|
+
export function normalizeQuery(raw, romaji) {
|
|
14
|
+
const kana = applyTransforms(toKana(applyTransforms(raw, 'preKana')), 'postKana');
|
|
15
|
+
const kunrei = kunreiEnabled(romaji) ? kanaToRomaji(kana, KUNREI) : null;
|
|
16
|
+
const hepburn = hepburnEnabled(romaji) ? kanaToRomaji(kana, HEPBURN) : null;
|
|
17
|
+
return {
|
|
18
|
+
kana,
|
|
19
|
+
kunrei,
|
|
20
|
+
hepburn,
|
|
21
|
+
kanaMask: charMask(kana),
|
|
22
|
+
kunreiMask: kunrei !== null ? charMask(kunrei) : 0,
|
|
23
|
+
hepburnMask: hepburn !== null ? charMask(hepburn) : 0,
|
|
24
|
+
bigrams: null,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** tier 4 実行時に bigram を遅延生成してキャッシュする */
|
|
28
|
+
export function ensureQueryBigrams(q) {
|
|
29
|
+
if (q.bigrams === null)
|
|
30
|
+
q.bigrams = generateBigrams(q.kana);
|
|
31
|
+
return q.bigrams;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,6CAA6C;AAC7C,EAAE;AACF,wDAAwD;AACxD,wDAAwD;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,MAAM,EACN,OAAO,EACP,aAAa,EACb,cAAc,GAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAkBzC,yBAAyB;AACzB,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,MAAoB;IAC9D,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,OAAO;QACL,IAAI;QACJ,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;QACxB,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,kBAAkB,CAAC,CAAkB;IACnD,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;QAAE,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface RomajiTable {
|
|
2
|
+
readonly single: Record<string, string>;
|
|
3
|
+
readonly digraphs: Record<string, string>;
|
|
4
|
+
}
|
|
5
|
+
export declare const KUNREI: RomajiTable;
|
|
6
|
+
export declare const HEPBURN: RomajiTable;
|
|
7
|
+
/**
|
|
8
|
+
* romaji オプション(spec 2.3 / design.md)。データ側 romaji 表現の生成と
|
|
9
|
+
* romaji 照合空間の有効/無効を制御する(クエリ側 toKana には影響しない)。
|
|
10
|
+
*/
|
|
11
|
+
export type RomajiOption = 'hepburn' | 'kunrei' | 'both' | false;
|
|
12
|
+
/** 訓令式の生成・照合が有効か */
|
|
13
|
+
export declare function kunreiEnabled(option: RomajiOption): boolean;
|
|
14
|
+
/** ヘボン式の生成・照合が有効か */
|
|
15
|
+
export declare function hepburnEnabled(option: RomajiOption): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* core kana(1文字 or 拗音ダイグラフ 2文字、ー/ッ を含まない)をローマ字へ。
|
|
18
|
+
* テーブルに無い文字(漢字・記号・英数)は小文字化してそのまま返す(パススルー)。
|
|
19
|
+
*/
|
|
20
|
+
export declare function convertCore(core: string, table: RomajiTable): string;
|
|
21
|
+
/** 促音ッの直後に重ねる対象か(romaji 先頭が子音か)。spec 2.4。 */
|
|
22
|
+
export declare function startsWithConsonant(romaji: string): boolean;
|
|
23
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/romaji/convert.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,MAAM,EAAE,WAAkE,CAAC;AACxF,eAAO,MAAM,OAAO,EAAE,WAAoE,CAAC;AAE3F;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEjE,oBAAoB;AACpB,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE3D;AAED,qBAAqB;AACrB,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAQpE;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// かな→ローマ字変換のコア(spec 2.4)。音節1個(core kana)単位の変換と、
|
|
2
|
+
// 促音重ね判定を提供する。全文変換・音節分割は syllable.ts が担う。
|
|
3
|
+
import { SINGLE as KUNREI_SINGLE, DIGRAPHS as KUNREI_DIGRAPHS } from './table-kunrei.js';
|
|
4
|
+
import { SINGLE as HEPBURN_SINGLE, DIGRAPHS as HEPBURN_DIGRAPHS } from './table-hepburn.js';
|
|
5
|
+
export const KUNREI = { single: KUNREI_SINGLE, digraphs: KUNREI_DIGRAPHS };
|
|
6
|
+
export const HEPBURN = { single: HEPBURN_SINGLE, digraphs: HEPBURN_DIGRAPHS };
|
|
7
|
+
/** 訓令式の生成・照合が有効か */
|
|
8
|
+
export function kunreiEnabled(option) {
|
|
9
|
+
return option === 'both' || option === 'kunrei';
|
|
10
|
+
}
|
|
11
|
+
/** ヘボン式の生成・照合が有効か */
|
|
12
|
+
export function hepburnEnabled(option) {
|
|
13
|
+
return option === 'both' || option === 'hepburn';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* core kana(1文字 or 拗音ダイグラフ 2文字、ー/ッ を含まない)をローマ字へ。
|
|
17
|
+
* テーブルに無い文字(漢字・記号・英数)は小文字化してそのまま返す(パススルー)。
|
|
18
|
+
*/
|
|
19
|
+
export function convertCore(core, table) {
|
|
20
|
+
if (core.length === 2) {
|
|
21
|
+
const d = table.digraphs[core];
|
|
22
|
+
if (d !== undefined)
|
|
23
|
+
return d;
|
|
24
|
+
}
|
|
25
|
+
const s = table.single[core];
|
|
26
|
+
if (s !== undefined)
|
|
27
|
+
return s;
|
|
28
|
+
return core.toLowerCase();
|
|
29
|
+
}
|
|
30
|
+
/** 促音ッの直後に重ねる対象か(romaji 先頭が子音か)。spec 2.4。 */
|
|
31
|
+
export function startsWithConsonant(romaji) {
|
|
32
|
+
return /^[bcdfghjklmnpqrstvwxyz]/.test(romaji);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-hepburn.d.ts","sourceRoot":"","sources":["../../src/romaji/table-hepburn.ts"],"names":[],"mappings":"AAGA,4BAA4B;AAC5B,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBzC,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoB3C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// ヘボン式ローマ字テーブル(移植元: AnalyzerCH core-interface/search-normalize/romaji-hepburn.ts、
|
|
2
|
+
// ユーザー所有)。検索特化(shi/chi/tsu/fu/ji…)。
|
|
3
|
+
/** 単音カタカナ→ヘボン式(小書き単独も含む) */
|
|
4
|
+
export const SINGLE = {
|
|
5
|
+
ア: 'a', イ: 'i', ウ: 'u', エ: 'e', オ: 'o',
|
|
6
|
+
カ: 'ka', キ: 'ki', ク: 'ku', ケ: 'ke', コ: 'ko',
|
|
7
|
+
ガ: 'ga', ギ: 'gi', グ: 'gu', ゲ: 'ge', ゴ: 'go',
|
|
8
|
+
サ: 'sa', シ: 'shi', ス: 'su', セ: 'se', ソ: 'so',
|
|
9
|
+
ザ: 'za', ジ: 'ji', ズ: 'zu', ゼ: 'ze', ゾ: 'zo',
|
|
10
|
+
タ: 'ta', チ: 'chi', ツ: 'tsu', テ: 'te', ト: 'to',
|
|
11
|
+
ダ: 'da', ヂ: 'di', ヅ: 'du', デ: 'de', ド: 'do',
|
|
12
|
+
ナ: 'na', ニ: 'ni', ヌ: 'nu', ネ: 'ne', ノ: 'no',
|
|
13
|
+
ハ: 'ha', ヒ: 'hi', フ: 'fu', ヘ: 'he', ホ: 'ho',
|
|
14
|
+
バ: 'ba', ビ: 'bi', ブ: 'bu', ベ: 'be', ボ: 'bo',
|
|
15
|
+
パ: 'pa', ピ: 'pi', プ: 'pu', ペ: 'pe', ポ: 'po',
|
|
16
|
+
マ: 'ma', ミ: 'mi', ム: 'mu', メ: 'me', モ: 'mo',
|
|
17
|
+
ヤ: 'ya', ユ: 'yu', ヨ: 'yo',
|
|
18
|
+
ラ: 'ra', リ: 'ri', ル: 'ru', レ: 're', ロ: 'ro',
|
|
19
|
+
ワ: 'wa', ヲ: 'wo', ン: 'n',
|
|
20
|
+
ヴ: 'vu',
|
|
21
|
+
ァ: 'a', ィ: 'i', ゥ: 'u', ェ: 'e', ォ: 'o',
|
|
22
|
+
ャ: 'ya', ュ: 'yu', ョ: 'yo',
|
|
23
|
+
};
|
|
24
|
+
/** 拗音・外来音ダイグラフ(先頭+小書き) */
|
|
25
|
+
export const DIGRAPHS = {
|
|
26
|
+
キャ: 'kya', キュ: 'kyu', キョ: 'kyo', キェ: 'kye',
|
|
27
|
+
ギャ: 'gya', ギュ: 'gyu', ギョ: 'gyo',
|
|
28
|
+
シャ: 'sha', シュ: 'shu', ショ: 'sho', シェ: 'she',
|
|
29
|
+
ジャ: 'ja', ジュ: 'ju', ジョ: 'jo', ジェ: 'je',
|
|
30
|
+
チャ: 'cha', チュ: 'chu', チョ: 'cho', チェ: 'che',
|
|
31
|
+
ヂャ: 'dya', ヂュ: 'dyu', ヂョ: 'dyo',
|
|
32
|
+
ニャ: 'nya', ニュ: 'nyu', ニョ: 'nyo',
|
|
33
|
+
ヒャ: 'hya', ヒュ: 'hyu', ヒョ: 'hyo',
|
|
34
|
+
ビャ: 'bya', ビュ: 'byu', ビョ: 'byo',
|
|
35
|
+
ピャ: 'pya', ピュ: 'pyu', ピョ: 'pyo',
|
|
36
|
+
ミャ: 'mya', ミュ: 'myu', ミョ: 'myo',
|
|
37
|
+
リャ: 'rya', リュ: 'ryu', リョ: 'ryo',
|
|
38
|
+
ファ: 'fa', フィ: 'fi', フェ: 'fe', フォ: 'fo',
|
|
39
|
+
ヴァ: 'va', ヴィ: 'vi', ヴェ: 've', ヴォ: 'vo',
|
|
40
|
+
ウィ: 'wi', ウェ: 'we', ウォ: 'wo',
|
|
41
|
+
ティ: 'ti', トゥ: 'tu',
|
|
42
|
+
ディ: 'di', ドゥ: 'du',
|
|
43
|
+
ツァ: 'tsa', ツィ: 'tsi', ツェ: 'tse', ツォ: 'tso',
|
|
44
|
+
イェ: 'ye',
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=table-hepburn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-hepburn.js","sourceRoot":"","sources":["../../src/romaji/table-hepburn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-kunrei.d.ts","sourceRoot":"","sources":["../../src/romaji/table-kunrei.ts"],"names":[],"mappings":"AAGA,2BAA2B;AAC3B,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBzC,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoB3C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// 訓令式ローマ字テーブル(移植元: AnalyzerCH core-interface/search-normalize/romaji-kunrei.ts、
|
|
2
|
+
// ユーザー所有)。検索特化(si/ti/tu/hu/zi…)。
|
|
3
|
+
/** 単音カタカナ→訓令式(小書き単独も含む) */
|
|
4
|
+
export const SINGLE = {
|
|
5
|
+
ア: 'a', イ: 'i', ウ: 'u', エ: 'e', オ: 'o',
|
|
6
|
+
カ: 'ka', キ: 'ki', ク: 'ku', ケ: 'ke', コ: 'ko',
|
|
7
|
+
ガ: 'ga', ギ: 'gi', グ: 'gu', ゲ: 'ge', ゴ: 'go',
|
|
8
|
+
サ: 'sa', シ: 'si', ス: 'su', セ: 'se', ソ: 'so',
|
|
9
|
+
ザ: 'za', ジ: 'zi', ズ: 'zu', ゼ: 'ze', ゾ: 'zo',
|
|
10
|
+
タ: 'ta', チ: 'ti', ツ: 'tu', テ: 'te', ト: 'to',
|
|
11
|
+
ダ: 'da', ヂ: 'di', ヅ: 'du', デ: 'de', ド: 'do',
|
|
12
|
+
ナ: 'na', ニ: 'ni', ヌ: 'nu', ネ: 'ne', ノ: 'no',
|
|
13
|
+
ハ: 'ha', ヒ: 'hi', フ: 'hu', ヘ: 'he', ホ: 'ho',
|
|
14
|
+
バ: 'ba', ビ: 'bi', ブ: 'bu', ベ: 'be', ボ: 'bo',
|
|
15
|
+
パ: 'pa', ピ: 'pi', プ: 'pu', ペ: 'pe', ポ: 'po',
|
|
16
|
+
マ: 'ma', ミ: 'mi', ム: 'mu', メ: 'me', モ: 'mo',
|
|
17
|
+
ヤ: 'ya', ユ: 'yu', ヨ: 'yo',
|
|
18
|
+
ラ: 'ra', リ: 'ri', ル: 'ru', レ: 're', ロ: 'ro',
|
|
19
|
+
ワ: 'wa', ヲ: 'wo', ン: 'n',
|
|
20
|
+
ヴ: 'vu',
|
|
21
|
+
ァ: 'a', ィ: 'i', ゥ: 'u', ェ: 'e', ォ: 'o',
|
|
22
|
+
ャ: 'ya', ュ: 'yu', ョ: 'yo',
|
|
23
|
+
};
|
|
24
|
+
/** 拗音・外来音ダイグラフ(先頭+小書き) */
|
|
25
|
+
export const DIGRAPHS = {
|
|
26
|
+
キャ: 'kya', キュ: 'kyu', キョ: 'kyo', キェ: 'kye',
|
|
27
|
+
ギャ: 'gya', ギュ: 'gyu', ギョ: 'gyo',
|
|
28
|
+
シャ: 'sya', シュ: 'syu', ショ: 'syo', シェ: 'sye',
|
|
29
|
+
ジャ: 'zya', ジュ: 'zyu', ジョ: 'zyo', ジェ: 'zye',
|
|
30
|
+
チャ: 'tya', チュ: 'tyu', チョ: 'tyo', チェ: 'tye',
|
|
31
|
+
ヂャ: 'dya', ヂュ: 'dyu', ヂョ: 'dyo',
|
|
32
|
+
ニャ: 'nya', ニュ: 'nyu', ニョ: 'nyo',
|
|
33
|
+
ヒャ: 'hya', ヒュ: 'hyu', ヒョ: 'hyo',
|
|
34
|
+
ビャ: 'bya', ビュ: 'byu', ビョ: 'byo',
|
|
35
|
+
ピャ: 'pya', ピュ: 'pyu', ピョ: 'pyo',
|
|
36
|
+
ミャ: 'mya', ミュ: 'myu', ミョ: 'myo',
|
|
37
|
+
リャ: 'rya', リュ: 'ryu', リョ: 'ryo',
|
|
38
|
+
ファ: 'fa', フィ: 'fi', フェ: 'fe', フォ: 'fo',
|
|
39
|
+
ヴァ: 'va', ヴィ: 'vi', ヴェ: 've', ヴォ: 'vo',
|
|
40
|
+
ウィ: 'wi', ウェ: 'we', ウォ: 'wo',
|
|
41
|
+
ティ: 'ti', トゥ: 'tu',
|
|
42
|
+
ディ: 'di', ドゥ: 'du',
|
|
43
|
+
ツァ: 'tua', ツィ: 'tui', ツェ: 'tue', ツォ: 'tuo',
|
|
44
|
+
イェ: 'ye',
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=table-kunrei.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-kunrei.js","sourceRoot":"","sources":["../../src/romaji/table-kunrei.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type RomajiTable } from './romaji/convert.js';
|
|
2
|
+
/** 音節1個の kana↔romaji 位置対応 */
|
|
3
|
+
export interface Syllable {
|
|
4
|
+
readonly kanaStart: number;
|
|
5
|
+
readonly kanaLen: number;
|
|
6
|
+
readonly romajiStart: number;
|
|
7
|
+
readonly romajiLen: number;
|
|
8
|
+
}
|
|
9
|
+
/** romaji 1方式分の表現 */
|
|
10
|
+
export interface RomajiForm {
|
|
11
|
+
readonly text: string;
|
|
12
|
+
readonly syllables: readonly Syllable[];
|
|
13
|
+
/** romaji 空間の境界位置(spec 2.6: 各音節の先頭 = 全 romajiStart) */
|
|
14
|
+
readonly boundaries: ReadonlySet<number>;
|
|
15
|
+
}
|
|
16
|
+
/** kana 文字列のセグメント(方式非依存。romaji 変換前) */
|
|
17
|
+
export interface KanaSegment {
|
|
18
|
+
/** romaji 変換対象の core kana(ー/ッ を含まない 1〜2 文字、または非かな1文字) */
|
|
19
|
+
core: string;
|
|
20
|
+
/** 直前に促音ッが繰り越されたか(romaji 先頭子音を重ねる) */
|
|
21
|
+
sokuon: boolean;
|
|
22
|
+
/** kana 文字列上の開始(繰り越しッを含む) */
|
|
23
|
+
kanaStart: number;
|
|
24
|
+
/** kana 文字列上の長さ(繰り越しッ・後続ー を含む) */
|
|
25
|
+
kanaLen: number;
|
|
26
|
+
}
|
|
27
|
+
/** kana を音節セグメントへ分割する(ー/ッ 帰属規則込み) */
|
|
28
|
+
export declare function splitKanaSegments(kana: string): KanaSegment[];
|
|
29
|
+
/** セグメント列を指定方式の RomajiForm へ変換する */
|
|
30
|
+
export declare function buildRomajiForm(segments: readonly KanaSegment[], table: RomajiTable): RomajiForm;
|
|
31
|
+
/** kana 文字列から RomajiForm を直接生成(データ側 Index 構築用) */
|
|
32
|
+
export declare function toRomajiForm(kana: string, table: RomajiTable): RomajiForm;
|
|
33
|
+
/** kana 文字列のローマ字(位置不要のクエリ側用) */
|
|
34
|
+
export declare function kanaToRomaji(kana: string, table: RomajiTable): string;
|
|
35
|
+
/** かな空間の境界位置(spec 2.6: 先頭 + カナ・英数字以外の直後) */
|
|
36
|
+
export declare function kanaBoundaries(kana: string): Set<number>;
|
|
37
|
+
//# sourceMappingURL=syllable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syllable.d.ts","sourceRoot":"","sources":["../src/syllable.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEzF,6BAA6B;AAC7B,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAqB;AACrB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAaD,qCAAqC;AACrC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAqC7D;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,CAkBhG;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,CAEzE;AAED,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAErE;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CASxD"}
|