Skip to content

Commit

Permalink
Merge pull request #380 from hotoo/feat/dyn-import
Browse files Browse the repository at this point in the history
feat: 动态import可选依赖
  • Loading branch information
hotoo committed Nov 20, 2023
2 parents f3d3b22 + 5ead496 commit 0688722
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 39 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG.md
Expand Up @@ -2,7 +2,11 @@

----

## 3.0.0-alpha.6 (2022-09-21)
## 3.0.0-alpha.7 (2023-11-20)

- feat: dynamic import optional dependencies.

## 3.0.0-alpha.6 (2023-11-12)

- feat: support [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter) for segment.
- dict: 雪茄
Expand Down
6 changes: 3 additions & 3 deletions babel.config.js
@@ -1,7 +1,7 @@
module.exports = {
presets: [
[ '@babel/preset-env', {targets: {node: 'current'}} ],
[ '@babel/preset-typescript', {allExtensions: true}],
[ "@babel/preset-env", {targets: {node: "current"}} ],
[ "@babel/preset-typescript", {allExtensions: true}],
],
'compact': true,
"compact": true,
};
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "pinyin",
"version": "3.0.0-alpha.6",
"version": "3.0.0-alpha.7",
"description": "汉语拼音转换工具。",
"main": "./lib/pinyin.js",
"module": "./esm/pinyin.js",
Expand Down
73 changes: 39 additions & 34 deletions src/segment.ts
@@ -1,7 +1,3 @@
import nodejieba from "nodejieba";
import { load, cut /*, tag */ } from "@node-rs/jieba";
// @ts-ignore
import { Segment, useDefault } from "segmentit";
import type { IPinyinSegment } from "./declare";

let nodeRsJiebaLoaded = false; // @node-rs/jieba 加载词典。
Expand All @@ -13,41 +9,50 @@ let hansIntlSegmenter: any; // Intl.Segmenter
* 分词并标注词性。
*/
export function segment(hans: string, segment?: IPinyinSegment): string[] {
// @node-rs/jieba (Rust)
if (segment === "@node-rs/jieba") {
if (!nodeRsJiebaLoaded) {
nodeRsJiebaLoaded = true;
load();
try {
// @node-rs/jieba (Rust)
if (segment === "@node-rs/jieba") {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { load, cut /*, tag */ } = require("@node-rs/jieba");
if (!nodeRsJiebaLoaded) {
nodeRsJiebaLoaded = true;
load();
}
return cut(hans, false);
// return tag(hans);
}
return cut(hans, false);
// return tag(hans);
}

// segmentit (Node.js)
if (segment === "segmentit") {
if (!segmentit) {
segmentit = useDefault(new Segment());
// segmentit (Node.js)
if (segment === "segmentit") {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { Segment, useDefault } = require("segmentit");
if (!segmentit) {
segmentit = useDefault(new Segment());
}
return segmentit.doSegment(hans, {
simple: true,
});
}
return segmentit.doSegment(hans, {
simple: true,
});
}

// Intl.Segmenter
if (segment === "Intl.Segmenter") {
if (typeof Intl?.Segmenter === "function") {
if (!hansIntlSegmenter) {
hansIntlSegmenter = new Intl.Segmenter("zh-Hans-CN", {
granularity: "word",
});
// Intl.Segmenter
if (segment === "Intl.Segmenter") {
if (typeof Intl?.Segmenter === "function") {
if (!hansIntlSegmenter) {
hansIntlSegmenter = new Intl.Segmenter("zh-Hans-CN", {
granularity: "word",
});
}
return [...hansIntlSegmenter.segment(hans)].map((s) => s.segment);
}
return [...hansIntlSegmenter.segment(hans)].map((s) => s.segment);
}
}

// 默认使用 nodejieba (C++)
// return nodejieba.tag(hans);
// nodejieba 定义的类型返回值错误,先忽略。
// @ts-ignore
return nodejieba.cutSmall(hans, 4);
// eslint-disable-next-line @typescript-eslint/no-var-requires
const nodejieba = require("nodejieba");
// 默认使用 nodejieba (C++)
// return nodejieba.tag(hans);
// nodejieba 定义的类型返回值错误,先忽略。
return nodejieba.cutSmall(hans, 4) as unknown as string[];
} catch (ex) {
return [hans];
}
}

0 comments on commit 0688722

Please sign in to comment.