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

hotoo / pinyin / 14995748527

13 May 2025 11:44AM UTC coverage: 99.973% (-0.02%) from 99.988%
14995748527

push

github

web-flow
Merge pull request #384 from hotoo/feat/rollup

Feat/rollup

116 of 124 branches covered (93.55%)

3 of 9 new or added lines in 1 file covered. (33.33%)

41493 of 41504 relevant lines covered (99.97%)

5.19 hits per line

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

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

3
let nodeRsJiebaLoaded = false; // @node-rs/jieba 加载词典。
6✔
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 {
444✔
13
    // @node-rs/jieba (Rust)
14
    if (segment === "@node-rs/jieba") {
444✔
15
      // eslint-disable-next-line @typescript-eslint/no-var-requires
16
      const { load, cut /*, tag */ } = require("@node-rs/jieba");
6✔
17
      if (!load || !cut) {
6!
NEW
18
        console.error("pinyin v4: \"@node-rs/jieba\" is peerDependencies");
×
NEW
19
        return [hans];
×
20
      }
21
      if (!nodeRsJiebaLoaded) {
6✔
22
        nodeRsJiebaLoaded = true;
3✔
23
        load();
3✔
24
      }
25
      return cut(hans, false);
6✔
26
      // return tag(hans);
27
    }
28

29
    // segmentit (Node.js)
30
    if (segment === "segmentit") {
438✔
31
      // eslint-disable-next-line @typescript-eslint/no-var-requires
32
      const { Segment, useDefault } = require("segmentit");
15✔
33
      if (!Segment) {
15!
NEW
34
        console.error("pinyin v4: \"segmentit\" is peerDependencies");
×
NEW
35
        return [hans];
×
36
      }
37
      if (!segmentit) {
15✔
38
        segmentit = useDefault(new Segment());
6✔
39
      }
40
      return segmentit.doSegment(hans, {
15✔
41
        simple: true,
42
      });
43
    }
44

45
    // Intl.Segmenter
46
    if (segment === "Intl.Segmenter") {
423✔
47
      if (typeof Intl?.Segmenter === "function") {
408!
48
        if (!hansIntlSegmenter) {
408✔
49
          hansIntlSegmenter = new Intl.Segmenter("zh-Hans-CN", {
6✔
50
            granularity: "word",
51
          });
52
        }
53
        return [...hansIntlSegmenter.segment(hans)].map((s) => s.segment);
765✔
54
      }
55
    }
56

57
    // eslint-disable-next-line @typescript-eslint/no-var-requires
58
    const nodejieba = require("nodejieba");
15✔
59
    if (!nodejieba) {
15!
NEW
60
      console.error("pinyin v4: \"nodejieba\" is peerDependencies");
×
NEW
61
      return [hans];
×
62
    }
63
    // 默认使用 nodejieba (C++)
64
    // return nodejieba.tag(hans);
65
    // nodejieba 定义的类型返回值错误,先忽略。
66
    return nodejieba.cutSmall(hans, 4) as unknown as string[];
15✔
67
  } catch (ex) {
68
    return [hans];
×
69
  }
70
}
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