• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hotoo / pinyin / 6926933632

20 Nov 2023 07:38AM UTC coverage: 99.988% (-0.002%) from 99.99%
6926933632

Pull #380

github

web-flow
Merge 90886a299 into f3d3b2210
Pull Request #380: feat: 动态import可选依赖

111 of 116 branches covered (0.0%)

19 of 20 new or added lines in 1 file covered. (95.0%)

41490 of 41495 relevant lines covered (99.99%)

3.46 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.24
/src/segment.ts
1
import type { IPinyinSegment } from "./declare";
2

3
let nodeRsJiebaLoaded = false; // @node-rs/jieba 加载词典。
4✔
4
let segmentit: any; // segmentit 加载词典。
5
let hansIntlSegmenter: any; // Intl.Segmenter
6

7
/**
8
 * TODO: 分词并带词性信息,需要调整 segment_pinyin 方法。
9
 * 分词并标注词性。
10
 */
11
export function segment(hans: string, segment?: IPinyinSegment): string[] {
12
  try {
296✔
13
    // @node-rs/jieba (Rust)
14
    if (segment === "@node-rs/jieba") {
296✔
15
      // eslint-disable-next-line @typescript-eslint/no-var-requires
16
      const { load, cut /*, tag */ } = require("@node-rs/jieba");
4✔
17
      if (!nodeRsJiebaLoaded) {
4✔
18
        nodeRsJiebaLoaded = true;
2✔
19
        load();
2✔
20
      }
21
      return cut(hans, false);
4✔
22
      // return tag(hans);
23
    }
24

25
    // segmentit (Node.js)
26
    if (segment === "segmentit") {
292✔
27
      // eslint-disable-next-line @typescript-eslint/no-var-requires
28
      const { Segment, useDefault } = require("segmentit");
10✔
29
      if (!segmentit) {
10✔
30
        segmentit = useDefault(new Segment());
4✔
31
      }
32
      return segmentit.doSegment(hans, {
10✔
33
        simple: true,
34
      });
35
    }
36

37
    // Intl.Segmenter
38
    if (segment === "Intl.Segmenter") {
282✔
39
      if (typeof Intl?.Segmenter === "function") {
272!
40
        if (!hansIntlSegmenter) {
272✔
41
          hansIntlSegmenter = new Intl.Segmenter("zh-Hans-CN", {
4✔
42
            granularity: "word",
43
          });
44
        }
45
        return [...hansIntlSegmenter.segment(hans)].map((s) => s.segment);
510✔
46
      }
47
    }
48

49
    // eslint-disable-next-line @typescript-eslint/no-var-requires
50
    const nodejieba = require("nodejieba");
10✔
51
    // 默认使用 nodejieba (C++)
52
    // return nodejieba.tag(hans);
53
    // nodejieba 定义的类型返回值错误,先忽略。
54
    return nodejieba.cutSmall(hans, 4) as unknown as string[];
10✔
55
  } catch (ex) {
NEW
56
    return [hans];
×
57
  }
58
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc