# ws-segment-rs
中文分詞函式庫(TypeScript [`novel-segment`](../../packages/novel-segment) 的 Rust 移植)。以盤古分詞詞庫為基礎,並加入網路小說用語。
crates.io 套件名是 `ws-segment-rs`;Rust 裡仍 `use novel_segment::…`。
## 引用
本機 path:
```toml
[dependencies]
ws-segment-rs = { path = "../ws-segment-rs/crates/novel-segment" }
```
Git / crates.io:
```toml
[dependencies]
ws-segment-rs = "0.1"
```
關閉內建字典:
```toml
ws-segment-rs = { version = "0.1", default-features = false }
```
字典根目錄可用環境變數 `NOVEL_SEGMENT_DICT_ROOT` 覆寫(預設為倉庫內 `packages/segment-dict/dict`)。
## 使用
```rust
use novel_segment::{DoSegmentOptions, Segment, POSTAG};
fn main() -> Result<(), novel_segment::Error> {
// JS `new Segment(); useDefault()` — auto_cjk 預設關閉。
// 小說/測試路徑與 JS createSegment 相同:auto_cjk + all_mod + convertSynonym
let mut seg = Segment::new(novel_segment::SegmentOptions {
auto_cjk: true,
..Default::default()
});
seg.use_default()?;
let words = seg.do_segment(
"这是一个基于Rust的中文分词模块。",
DoSegmentOptions::default(),
);
let simple = seg.do_segment_simple("...", DoSegmentOptions::convert_synonym());
seg.add_word("專有名詞", Some(POSTAG::D_N), Some(100.0))?;
seg.add_synonym("標準詞", &["錯字", "異體"]);
Ok(())
}
```
`DoSegmentOptions` 對應 JS `doSegment`:`simple`、`strip_punctuation`、`convert_synonym`、`strip_stopword`、`strip_space`。
預設會回傳所有字元(含換行與空白),與 JS 2.x 相同。
小說長篇語料(`word.novel.test.ts`)請用 `Segment::with_node_novel_default()`:會清空同義詞再載入 `synonym` + `zht.synonym` + `badword.synonym` + `zht.common.synonym`。
CLI / HTTP API / MCP 見 [crates/novel-segment-cli](../novel-segment-cli)(crate:`ws-segment-rs-cli`)。Node 若要直接 `require`,可建 `ws-segment-rs-napi`:
```bash
cargo build -p ws-segment-rs-napi
node packages/novel-segment-native/scripts/copy-addon.js
```