135 lines
3.1 KiB
Markdown
135 lines
3.1 KiB
Markdown
|
|
# jieba-wasm
|
||
|
|
|
||
|
|
> [jieba-rs](https://github.com/messense/jieba-rs) 的 wasm binding
|
||
|
|
|
||
|
|
_编译成 WASM 摆脱编译 Node Addon 的烦恼_
|
||
|
|
|
||
|
|
# Usage
|
||
|
|
## Node.js
|
||
|
|
```js
|
||
|
|
const {
|
||
|
|
cut,
|
||
|
|
cut_all,
|
||
|
|
cut_for_search,
|
||
|
|
tokenize,
|
||
|
|
add_word,
|
||
|
|
} = require("jieba-wasm");
|
||
|
|
cut("中华人民共和国武汉市长江大桥", true);
|
||
|
|
// [ '中华人民共和国', '武汉市', '长江大桥' ]
|
||
|
|
cut_all("中华人民共和国武汉市长江大桥", true);
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
'中', '中华',
|
||
|
|
'中华人民', '中华人民共和国',
|
||
|
|
'华', '华人',
|
||
|
|
'人', '人民',
|
||
|
|
'人民共和国', '民',
|
||
|
|
'共', '共和',
|
||
|
|
'共和国', '和',
|
||
|
|
'国', '武',
|
||
|
|
'武汉', '武汉市',
|
||
|
|
'汉', '市',
|
||
|
|
'市长', '长',
|
||
|
|
'长江', '长江大桥',
|
||
|
|
'江', '大',
|
||
|
|
'大桥', '桥'
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
cut_for_search("中华人民共和国武汉市长江大桥", true);
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
'中华', '华人',
|
||
|
|
'人民', '共和',
|
||
|
|
'共和国', '中华人民共和国',
|
||
|
|
'武汉', '武汉市',
|
||
|
|
'长江', '大桥',
|
||
|
|
'长江大桥'
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
tokenize("中华人民共和国武汉市长江大桥", "default", true);
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
{ word: '中华人民共和国', start: 0, end: 7 },
|
||
|
|
{ word: '武汉市', start: 7, end: 10 },
|
||
|
|
{ word: '长江大桥', start: 10, end: 14 }
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
tokenize("中华人民共和国武汉市长江大桥", "search", true);
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
{ word: '中华', start: 0, end: 2 },
|
||
|
|
{ word: '华人', start: 1, end: 3 },
|
||
|
|
{ word: '人民', start: 2, end: 4 },
|
||
|
|
{ word: '共和', start: 4, end: 6 },
|
||
|
|
{ word: '共和国', start: 4, end: 7 },
|
||
|
|
{ word: '中华人民共和国', start: 0, end: 7 },
|
||
|
|
{ word: '武汉', start: 7, end: 9 },
|
||
|
|
{ word: '武汉市', start: 7, end: 10 },
|
||
|
|
{ word: '长江', start: 10, end: 12 },
|
||
|
|
{ word: '大桥', start: 12, end: 14 },
|
||
|
|
{ word: '长江大桥', start: 10, end: 14 }
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
|
||
|
|
cut("桥大江长市汉武的省北湖国和共民人华中");
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
'桥', '大江', '长',
|
||
|
|
'市', '汉', '武',
|
||
|
|
'的', '省', '北湖',
|
||
|
|
'国', '和', '共',
|
||
|
|
'民', '人', '华中'
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
["桥大江长", "市汉武", "省北湖", "国和共民人华中"].map((word) => {
|
||
|
|
add_word(word);
|
||
|
|
});
|
||
|
|
cut("桥大江长市汉武的省北湖国和共民人华中");
|
||
|
|
// ["桥大江长", "市汉武", "的", "省北湖", "国和共民人华中"];
|
||
|
|
|
||
|
|
with_dict("自动借书机 1 n"); // 导入自定义字典,词条格式:词语 词频 词性(可选),以换行符分隔
|
||
|
|
cut("你好我是一个自动借书机");
|
||
|
|
// ["你好", "我", "是", "一个", "自动借书机"];
|
||
|
|
```
|
||
|
|
|
||
|
|
## Browser
|
||
|
|
```ts
|
||
|
|
import init, { cut } from 'jieba-wasm';
|
||
|
|
|
||
|
|
// 重要:使用前必须初始化
|
||
|
|
await init();
|
||
|
|
|
||
|
|
cut("中华人民共和国武汉市长江大桥", true);
|
||
|
|
// [ '中华人民共和国', '武汉市', '长江大桥' ]
|
||
|
|
```
|
||
|
|
|
||
|
|
# 示例 Demo
|
||
|
|
|
||
|
|
## 安装依赖
|
||
|
|
|
||
|
|
安装 wasm-bindgen 和 wasm-opt
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo install wasm-bindgen-cli --locked
|
||
|
|
cargo install wasm-opt --locked
|
||
|
|
```
|
||
|
|
|
||
|
|
## 前期准备
|
||
|
|
|
||
|
|
首先保证存在 rust 环境,然后运行以下命令
|
||
|
|
```bash
|
||
|
|
npm run build:cargo
|
||
|
|
npm run build
|
||
|
|
```
|
||
|
|
|
||
|
|
## 运行浏览器端示例
|
||
|
|
```bash
|
||
|
|
cd demo/web
|
||
|
|
npm install
|
||
|
|
npm run dev
|
||
|
|
```
|
||
|
|
|
||
|
|
# Piror Art
|
||
|
|
|
||
|
|
https://github.com/messense/jieba-rs
|