gs-tokenizer 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/README.cn.md ADDED
@@ -0,0 +1,262 @@
1
+ # gs-tokenizer - 多语言分词器
2
+
3
+ 一个功能强大且轻量级的多语言分词器库,为英语、中文、日语和韩语等多种语言提供自然语言处理能力。
4
+
5
+ ## 文档
6
+
7
+ - [English README](README.md)
8
+ - [中文 README](README.cn.md)
9
+ - [日本語 README](README.ja.md)
10
+ - [한국어 README](README.ko.md)
11
+
12
+ ## 特性
13
+
14
+ - **语言支持**:英语、中文、日语、韩语
15
+ - **智能分词**:
16
+ - 英语:基于词边界的分词
17
+ - CJK(中文、日语、韩语):使用浏览器的Intl.Segmenter进行自然分词
18
+ - 日期:对日期模式的特殊处理
19
+ - **自定义词典**:支持添加带优先级和名称的自定义词语
20
+ - **自动语言检测**:自动检测输入文本的语言
21
+ - **多种输出格式**:获取详细的分词信息或仅获取词语列表
22
+ - **轻量级**:最小依赖,专为浏览器环境设计
23
+ - **快速使用API**:便捷的静态方法,易于集成
24
+
25
+ ## 安装
26
+
27
+ ```bash
28
+ yarn add gs-tokenizer
29
+ ```
30
+
31
+ ### 其他安装方式
32
+
33
+ ```bash
34
+ npm install gs-tokenizer
35
+ ```
36
+
37
+ ## 使用
38
+
39
+ ### 基本用法
40
+
41
+ ```javascript
42
+ import { MultilingualTokenizer, createTokenizer } from 'gs-tokenizer';
43
+
44
+ // 创建分词器实例
45
+ const tokenizer = new MultilingualTokenizer();
46
+ // 或使用工厂函数
47
+ // const tokenizer = createTokenizer();
48
+
49
+ // 分词文本
50
+ const text = 'Hello world! 我爱北京天安门。';
51
+ const tokens = tokenizer.tokenize(text);
52
+ console.log(tokens);
53
+
54
+ // 仅获取词语
55
+ const words = tokenizer.tokenizeToText(text);
56
+ console.log(words);
57
+ ```
58
+
59
+ ### 快速使用(推荐)
60
+
61
+ quick模块提供了便捷的静态方法,方便快速集成:
62
+
63
+ ```javascript
64
+ import { tokenize, tokenizeToText, addCustomDictionary } from 'gs-tokenizer';
65
+
66
+ // 直接分词,无需创建实例
67
+ const text = 'Hello world! 我爱北京天安门。';
68
+ const tokens = tokenize(text);
69
+ const words = tokenizeToText(text);
70
+ console.log(words);
71
+
72
+ // 添加自定义词典
73
+ addCustomDictionary(['人工智能', '技术'], 'zh', 10, 'tech');
74
+ ```
75
+
76
+ ### 高级用法
77
+
78
+ #### 使用快速模块加载自定义词典
79
+
80
+ ```javascript
81
+ import { tokenize, addCustomDictionary } from 'gs-multilingual-tokenizer';
82
+
83
+ // 为不同语言加载多个自定义词典
84
+ addCustomDictionary(['人工智能', '机器学习'], 'zh', 10, 'tech');
85
+ addCustomDictionary(['Web3', 'Blockchain'], 'en', 10, 'crypto');
86
+ addCustomDictionary(['アーティフィシャル・インテリジェンス'], 'ja', 10, 'tech-ja');
87
+
88
+ // 应用自定义词典进行分词
89
+ const text = '人工智能和Web3是未来的重要技术。アーティフィシャル・インテリジェンスも重要です。';
90
+ const tokens = tokenize(text);
91
+ console.log(tokens.filter(token => token.src === 'tech'));
92
+ ```
93
+
94
+ #### 不使用内置词库
95
+
96
+ ```javascript
97
+ import { MultilingualTokenizer } from 'gs-tokenizer';
98
+
99
+ // 创建不使用内置词库的分词器
100
+ const tokenizer = new MultilingualTokenizer({
101
+ customDictionaries: {
102
+ 'zh': [{ priority: 10, data: new Set(['自定义词']), name: 'custom', lang: 'zh' }]
103
+ }
104
+ });
105
+
106
+ // 仅使用自定义词典进行分词
107
+ const text = '这是一个自定义词的示例。';
108
+ const tokens = tokenizer.tokenize(text, 'zh');
109
+ console.log(tokens);
110
+ ```
111
+
112
+ ### 自定义词典
113
+
114
+ ```javascript
115
+ const tokenizer = new MultilingualTokenizer();
116
+
117
+ // 添加带语言、优先级和名称的自定义词语
118
+ tokenizer.addCustomDictionary(['人工智能', '技术'], 'zh', 10, 'tech');
119
+ tokenizer.addCustomDictionary(['Python', 'JavaScript'], 'en', 5, 'programming');
120
+
121
+ const text = '我爱人工智能技术和Python编程';
122
+ const tokens = tokenizer.tokenize(text);
123
+ const words = tokenizer.tokenizeToText(text);
124
+ console.log(words); // 应该包含 '人工智能', 'Python'
125
+
126
+ // 删除自定义词语
127
+ tokenizer.removeCustomWord('Python', 'en', 'programming');
128
+ ```
129
+
130
+ ### 高级选项
131
+
132
+ ```javascript
133
+ const tokenizer = createTokenizer({
134
+ defaultLanguage: 'en',
135
+ customDictionaries: {
136
+ 'zh': [{
137
+ priority: 10,
138
+ data: new Set(['自定义词']),
139
+ name: 'custom',
140
+ lang: 'zh'
141
+ }]
142
+ }
143
+ });
144
+
145
+ // 使用指定语言分词
146
+ const text = '我爱北京天安门';
147
+ const tokens = tokenizer.tokenize(text, 'zh');
148
+ ```
149
+
150
+ ## API 参考
151
+
152
+ ### `MultilingualTokenizer`
153
+
154
+ 处理多语言文本处理的主要分词器类。
155
+
156
+ #### 构造函数
157
+
158
+ ```typescript
159
+ import { MultilingualTokenizer, TokenizerOptions } from 'gs-tokenizer';
160
+
161
+ new MultilingualTokenizer(options?: TokenizerOptions)
162
+ ```
163
+
164
+ **选项**:
165
+ - `customDictionaries`: Record<string, LexiconEntry[]> - 每种语言的自定义词典
166
+ - `defaultLanguage`: string - 默认语言代码(默认:'en')
167
+
168
+ #### 方法
169
+
170
+ | 方法 | 描述 |
171
+ |------|------|
172
+ | `tokenize(text: string, language?: string): Token[]` | 对输入文本进行分词并返回详细的分词信息 |
173
+ | `tokenizeToText(text: string, language?: string): string[]` | 对输入文本进行分词并仅返回词语列表 |
174
+ | `addCustomDictionary(words: string[], language: string, priority: number, name: string): void` | 向分词器添加自定义词语 |
175
+ | `removeCustomWord(word: string, language?: string, lexiconName?: string): void` | 从分词器中删除自定义词语 |
176
+
177
+ ### `createTokenizer(options?: TokenizerOptions): MultilingualTokenizer`
178
+
179
+ 创建一个新的MultilingualTokenizer实例的工厂函数,带有可选配置。
180
+
181
+ ### 快速使用API
182
+
183
+ quick模块提供了便捷的静态方法:
184
+
185
+ ```typescript
186
+ import { Token } from 'gs-tokenizer';
187
+
188
+ // 分词文本
189
+ function tokenize(text: string, language?: string): Token[];
190
+
191
+ // 仅分词为文本
192
+ function tokenizeToText(text: string, language?: string): string[];
193
+
194
+ // 添加自定义词典
195
+ function addCustomDictionary(words: string[], language: string, priority: number, name: string): void;
196
+
197
+ // 删除自定义词语
198
+ function removeCustomWord(word: string, language?: string, lexiconName?: string): void;
199
+
200
+ // 设置词典加载的默认语言
201
+ function setDefaultLanguages(languages: string[]): void;
202
+
203
+ // 设置词典加载的默认类型
204
+ function setDefaultTypes(types: string[]): void;
205
+ ```
206
+
207
+ ### 类型
208
+
209
+ #### `Token` 接口
210
+
211
+ ```typescript
212
+ interface Token {
213
+ txt: string; // 分词文本内容
214
+ type: 'word' | 'punctuation' | 'space' | 'other' | 'emoji' | 'date';
215
+ lang?: string; // 语言代码
216
+ src?: string; // 来源(例如:自定义词典名称)
217
+ }
218
+ ```
219
+
220
+ #### `TokenizerOptions` 接口
221
+
222
+ ```typescript
223
+ import { LexiconEntry } from 'gs-tokenizer';
224
+
225
+ interface TokenizerOptions {
226
+ customDictionaries?: Record<string, LexiconEntry[]>;
227
+ granularity?: 'word' | 'grapheme' | 'sentence';
228
+ defaultLanguage?: string;
229
+ }
230
+ ```
231
+
232
+ ## 浏览器兼容性
233
+
234
+ - Chrome/Edge: 87+
235
+ - Firefox: 86+
236
+ - Safari: 14.1+
237
+
238
+ 注意:对CJK语言使用`Intl.Segmenter`,需要现代浏览器支持。
239
+
240
+ ## 开发
241
+
242
+ ### 构建
243
+
244
+ ```bash
245
+ npm run build
246
+ ```
247
+
248
+ ### 运行测试
249
+
250
+ ```bash
251
+ npm run test # 运行所有测试
252
+ npm run test:base # 运行基础测试
253
+ npm run test:english # 运行英语特定测试
254
+ npm run test:cjk # 运行CJK特定测试
255
+ npm run test:mixed # 运行混合语言测试
256
+ ```
257
+
258
+ ## 许可证
259
+
260
+ MIT
261
+
262
+ [GitHub 仓库](https://github.com/grain-sand/gs-tokenizer)
package/README.ja.md ADDED
@@ -0,0 +1,262 @@
1
+ # gs-tokenizer
2
+
3
+ 英語、中国語、日本語、韓国語など複数の言語に対応した強力で軽量な多言語トークナイザーライブラリです。
4
+
5
+ ## ドキュメント
6
+
7
+ - [English README](README.md)
8
+ - [中文 README](README.cn.md)
9
+ - [日本語 README](README.ja.md)
10
+ - [한국어 README](README.ko.md)
11
+
12
+ ## 特徴
13
+
14
+ - **言語サポート**: 英語、中国語、日本語、韓国語
15
+ - **インテリジェントなトークン化**:
16
+ - 英語: 単語境界に基づくトークン化
17
+ - CJK(中国語、日本語、韓国語): ブラウザのIntl.Segmenterを使用した自然な単語分割
18
+ - 日付: 日付パターンの特殊処理
19
+ - **カスタム辞書**: 優先度と名前を持つカスタム単語の追加をサポート
20
+ - **自動言語検出**: 入力テキストの言語を自動的に検出
21
+ - **複数の出力形式**: 詳細なトークン情報または単語リストのみを取得
22
+ - **軽量**: 最小限の依存関係で、ブラウザ環境向けに設計
23
+ - **クイック使用API**: 簡単に統合できる便利な静的メソッド
24
+
25
+ ## インストール
26
+
27
+ ```bash
28
+ yarn add gs-tokenizer
29
+ ```
30
+
31
+ ### 代替インストール方法
32
+
33
+ ```bash
34
+ npm install gs-tokenizer
35
+ ```
36
+
37
+ ## 使用方法
38
+
39
+ ### 基本的な使用方法
40
+
41
+ ```javascript
42
+ import { MultilingualTokenizer, createTokenizer } from 'gs-tokenizer';
43
+
44
+ // トークナイザーインスタンスを作成
45
+ const tokenizer = new MultilingualTokenizer();
46
+ // またはファクトリー関数を使用
47
+ // const tokenizer = createTokenizer();
48
+
49
+ // テキストをトークン化
50
+ const text = 'Hello world! 私は北京の天安門が好きです。';
51
+ const tokens = tokenizer.tokenize(text);
52
+ console.log(tokens);
53
+
54
+ // 単語トークンのみを取得
55
+ const words = tokenizer.tokenizeToText(text);
56
+ console.log(words);
57
+ ```
58
+
59
+ ### クイック使用(推奨)
60
+
61
+ クイックモジュールは、簡単に統合できる便利な静的メソッドを提供します:
62
+
63
+ ```javascript
64
+ import { tokenize, tokenizeToText, addCustomDictionary } from 'gs-tokenizer';
65
+
66
+ // インスタンスを作成せずに直接トークン化
67
+ const text = 'Hello world! 私は北京の天安門が好きです。';
68
+ const tokens = tokenize(text);
69
+ const words = tokenizeToText(text);
70
+ console.log(words);
71
+
72
+ // カスタム辞書を追加
73
+ addCustomDictionary(['人工知能', '技術'], 'zh', 10, 'tech');
74
+ ```
75
+
76
+ ### 高度な使用方法
77
+
78
+ #### クイックモジュールでカスタム辞書をロード
79
+
80
+ ```javascript
81
+ import { tokenize, addCustomDictionary } from 'gs-tokenizer';
82
+
83
+ // 異なる言語用に複数のカスタム辞書をロード
84
+ addCustomDictionary(['人工知能', '機械学習'], 'zh', 10, 'tech');
85
+ addCustomDictionary(['Web3', 'Blockchain'], 'en', 10, 'crypto');
86
+ addCustomDictionary(['アーティフィシャル・インテリジェンス'], 'ja', 10, 'tech-ja');
87
+
88
+ // カスタム辞書を適用してトークン化
89
+ const text = '人工知能とWeb3は未来の重要な技術です。アーティフィシャル・インテリジェンスも重要です。';
90
+ const tokens = tokenize(text);
91
+ console.log(tokens.filter(token => token.src === 'tech'));
92
+ ```
93
+
94
+ #### 組み込み辞書を使用しない
95
+
96
+ ```javascript
97
+ import { MultilingualTokenizer } from 'gs-tokenizer';
98
+
99
+ // 組み込み辞書を使用しないトークナイザーを作成
100
+ const tokenizer = new MultilingualTokenizer({
101
+ customDictionaries: {
102
+ 'ja': [{ priority: 10, data: new Set(['カスタム単語']), name: 'custom', lang: 'ja' }]
103
+ }
104
+ });
105
+
106
+ // カスタム辞書のみを使用してトークン化
107
+ const text = 'これはカスタム単語の例です。';
108
+ const tokens = tokenizer.tokenize(text, 'ja');
109
+ console.log(tokens);
110
+ ```
111
+
112
+ ### カスタム辞書
113
+
114
+ ```javascript
115
+ const tokenizer = new MultilingualTokenizer();
116
+
117
+ // 言語、優先度、名前を指定してカスタム単語を追加
118
+ okenizer.addCustomDictionary(['人工知能', '技術'], 'zh', 10, 'tech');
119
+ okenizer.addCustomDictionary(['Python', 'JavaScript'], 'en', 5, 'programming');
120
+
121
+ const text = '私は人工知能技術とPythonプログラミングが好きです';
122
+ const tokens = tokenizer.tokenize(text);
123
+ const words = tokenizer.tokenizeToText(text);
124
+ console.log(words); // '人工知能', 'Python' が含まれるはず
125
+
126
+ // カスタム単語を削除
127
+ okenizer.removeCustomWord('Python', 'en', 'programming');
128
+ ```
129
+
130
+ ### 高度なオプション
131
+
132
+ ```javascript
133
+ const tokenizer = createTokenizer({
134
+ defaultLanguage: 'ja',
135
+ customDictionaries: {
136
+ 'ja': [{
137
+ priority: 10,
138
+ data: new Set(['カスタム単語']),
139
+ name: 'custom',
140
+ lang: 'ja'
141
+ }]
142
+ }
143
+ });
144
+
145
+ // 指定した言語でトークン化
146
+ const text = '私は北京の天安門が好きです';
147
+ const tokens = tokenizer.tokenize(text, 'zh');
148
+ ```
149
+
150
+ ## API リファレンス
151
+
152
+ ### `MultilingualTokenizer`
153
+
154
+ 多言語テキスト処理を処理する主要なトークナイザークラスです。
155
+
156
+ #### コンストラクタ
157
+
158
+ ```typescript
159
+ import { MultilingualTokenizer, TokenizerOptions } from 'gs-tokenizer';
160
+
161
+ new MultilingualTokenizer(options?: TokenizerOptions)
162
+ ```
163
+
164
+ **オプション**:
165
+ - `customDictionaries`: Record<string, LexiconEntry[]> - 各言語のカスタム辞書
166
+ - `defaultLanguage`: string - デフォルトの言語コード(デフォルト: 'en')
167
+
168
+ #### メソッド
169
+
170
+ | メソッド | 説明 |
171
+ |------|------|
172
+ | `tokenize(text: string, language?: string): Token[]` | 入力テキストをトークン化し、詳細なトークン情報を返します |
173
+ | `tokenizeToText(text: string, language?: string): string[]` | 入力テキストをトークン化し、単語リストのみを返します |
174
+ | `addCustomDictionary(words: string[], language: string, priority: number, name: string): void` | トークナイザーにカスタム単語を追加します |
175
+ | `removeCustomWord(word: string, language?: string, lexiconName?: string): void` | トークナイザーからカスタム単語を削除します |
176
+
177
+ ### `createTokenizer(options?: TokenizerOptions): MultilingualTokenizer`
178
+
179
+ オプションの設定で新しいMultilingualTokenizerインスタンスを作成するファクトリー関数です。
180
+
181
+ ### クイック使用API
182
+
183
+ クイックモジュールは便利な静的メソッドを提供します:
184
+
185
+ ```typescript
186
+ import { Token } from 'gs-tokenizer';
187
+
188
+ // テキストをトークン化
189
+ function tokenize(text: string, language?: string): Token[];
190
+
191
+ // テキストのみをトークン化
192
+ function tokenizeToText(text: string, language?: string): string[];
193
+
194
+ // カスタム辞書を追加
195
+ function addCustomDictionary(words: string[], language: string, priority: number, name: string): void;
196
+
197
+ // カスタム単語を削除
198
+ function removeCustomWord(word: string, language?: string, lexiconName?: string): void;
199
+
200
+ // 辞書ロードのデフォルト言語を設定
201
+ function setDefaultLanguages(languages: string[]): void;
202
+
203
+ // 辞書ロードのデフォルトタイプを設定
204
+ function setDefaultTypes(types: string[]): void;
205
+ ```
206
+
207
+ ### 型
208
+
209
+ #### `Token` インターフェース
210
+
211
+ ```typescript
212
+ interface Token {
213
+ txt: string; // トークンテキスト内容
214
+ type: 'word' | 'punctuation' | 'space' | 'other' | 'emoji' | 'date';
215
+ lang?: string; // 言語コード
216
+ src?: string; // ソース(例:カスタム辞書名)
217
+ }
218
+ ```
219
+
220
+ #### `TokenizerOptions` インターフェース
221
+
222
+ ```typescript
223
+ import { LexiconEntry } from 'gs-tokenizer';
224
+
225
+ interface TokenizerOptions {
226
+ customDictionaries?: Record<string, LexiconEntry[]>;
227
+ granularity?: 'word' | 'grapheme' | 'sentence';
228
+ defaultLanguage?: string;
229
+ }
230
+ ```
231
+
232
+ ## ブラウザ互換性
233
+
234
+ - Chrome/Edge: 87+
235
+ - Firefox: 86+
236
+ - Safari: 14.1+
237
+
238
+ 注:CJK言語には`Intl.Segmenter`を使用しているため、現代のブラウザーのサポートが必要です。
239
+
240
+ ## 開発
241
+
242
+ ### ビルド
243
+
244
+ ```bash
245
+ npm run build
246
+ ```
247
+
248
+ ### テストの実行
249
+
250
+ ```bash
251
+ npm run test # すべてのテストを実行
252
+ npm run test:base # 基本テストを実行
253
+ npm run test:english # 英語固有のテストを実行
254
+ npm run test:cjk # CJK固有のテストを実行
255
+ npm run test:mixed # 混合言語のテストを実行
256
+ ```
257
+
258
+ ## ライセンス
259
+
260
+ MIT
261
+
262
+ [GitHub Repository](https://github.com/grain-sand/gs-tokenizer)