UNPKG

2 kBTypeScriptView Raw
1/// <reference types="node" />
2/**
3 * Chinese Whispers Algorithm for Node.js
4 *
5 * https://github.com/huan/chinese-whispers
6 * License: Apache-2.0
7 * Author: Huan LI <zixia@zixia.net>
8 *
9 * Inspired by:
10 * - http://blog.csdn.net/liyuan123zhouhui/article/details/70312716
11 * - http://alexloveless.co.uk/data/chinese-whispers-graph-clustering-in-python/
12 * - https://github.com/uhh-lt/chinese-whispers
13 * - https://github.com/anvaka/ngraph.cw
14 *
15 */
16import { EventEmitter } from 'events';
17export { VERSION } from './version';
18export declare type WeightFunc<T> = (a: T, b: T) => number;
19export declare type CWNode = number;
20export declare type CWEdge = [number, number, {
21 weight: number;
22}];
23export declare type Cluster = number[];
24export interface ChineseWhispersOptions<T> {
25 weightFunc: WeightFunc<T>;
26 epochs?: number;
27 threshold?: number;
28}
29export declare type CWEventName = 'edge' | 'epoch' | 'change';
30export declare class ChineseWhispers<T> extends EventEmitter {
31 private weightFunc;
32 private epochs;
33 private threshold?;
34 private graph;
35 private changeCounter;
36 constructor(options: ChineseWhispersOptions<T>);
37 on(event: 'edge', listener: (edge: CWEdge) => void): this;
38 on(event: 'change', listener: (node: CWNode, oldLabel: string, newLabel: string) => void): this;
39 on(event: 'epoch', listener: (graph: any, changeCounter: number) => void): this;
40 on(event: never, listener: any): this;
41 emit(event: 'edge', edge?: CWEdge): boolean;
42 emit(event: 'change', node: CWNode, oldLabel: string, newLabel: string): boolean;
43 emit(event: 'epoch', graph: any, changeCounter: number): boolean;
44 emit(event: never, ...args: any[]): boolean;
45 cluster(dataList: T[]): Cluster[];
46 iterate(): void;
47 relabelNode(node: CWNode): void;
48 recalcLabel(node: CWNode): string;
49 buildClusterList(G: any): Cluster[];
50 buildNetwork(dataList: T[], weightFunc: WeightFunc<T>, threshold?: number): any;
51}
52export default ChineseWhispers;