UNPKG

pii-filter

Version:
118 lines 5.21 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PhoneNumber = void 0; const Parsing = __importStar(require("../../../core/parsing")); const ds_phone_number_0_json_1 = __importDefault(require("../dataset/ds_phone_number_0.json")); /** * Checks wether a string is a valid phone number. * @private * @param phone_number the phone number */ function validate_phone_number(phone_number) { return /^((00)?31)?((?!((00)?31))((0[1-9][0-9]{7,8})|([1-9][0-9]{7,8})))$/.test(phone_number.replace(/\D/g, '')); } /** * Checks whether a phone number is a mobile number. * @private * @param phone_number the phone number string */ function is_06(phone_number) { return /^((00)?31)?0?6/.test(phone_number.replace(/\D/g, '')); } /** * A simple phone number classifier. * @private */ class PhoneNumber extends Parsing.CoreAssociativeClassifier { /** * Creates a new Dutch phone number classifier. */ constructor() { super(ds_phone_number_0_json_1.default); /** @inheritdoc */ this.name = 'phone_number'; } /** @inheritdoc */ classify_confidence(token) { if (/^(\+|\(|0|6)/.test(token.symbol)) { const min_number_length = 7; const max_number_length = 15; let has_numbers = /\d+/; let has_letters = /[a-zA-Z]+/; let has_symbols = /\-|\+|\(|\)/; let deferred_text = ''; let number_value = ''; let total_num_length = 0; let last_seen_number = null; let [matched, [start_token, end_token, matches]] = Parsing.collect_tokens(token, (token, deferred_matches) => { let token_symbol = token.symbol; let token_is_space = token_symbol == ' '; let token_has_symbol = has_symbols.test(token_symbol); if (has_letters.test(token_symbol)) return Parsing.collect_tokens.Control.INVALID; else if (has_numbers.test(token_symbol)) { total_num_length += token_symbol.replace(/\D+/g, '').length; if (total_num_length > max_number_length) return Parsing.collect_tokens.Control.INVALID; number_value += deferred_text + token_symbol; deferred_text = ''; if (total_num_length > min_number_length) { last_seen_number = token; if (validate_phone_number(number_value)) return Parsing.collect_tokens.Control.MATCH_AND_CONTINUE; } return Parsing.collect_tokens.Control.VALID; } else if (token_has_symbol || token_is_space) { if (deferred_matches.length == 5) //+31 - ( >^06) return Parsing.collect_tokens.Control.INVALID; deferred_text += token_symbol; return Parsing.collect_tokens.Control.DEFER_VALID; } return Parsing.collect_tokens.Control.INVALID; }); if (!matched || (last_seen_number != end_token && matches.length > 3)) // includes space { return [[], new Parsing.CoreClassificationScore(0.0, 0.0, this)]; } else { let is_06_number = is_06(number_value); let score = (is_06_number ? 0.75 : 0.25); let severity_sum = (is_06_number ? 0.35 : 0.25); let assoc_sum = 0.0; let [assoc_sum_, severity_sum_] = Parsing.calc_assoc_severity_sum(start_token, end_token, this, this.language_model, this.language_model.max_assoc_distance); assoc_sum += assoc_sum_; severity_sum += severity_sum_; return [matches, new Parsing.CoreClassificationScore(Math.min(score + assoc_sum, 1.0), Math.min(severity_sum, 1.0), this)]; } } else { return [[], new Parsing.CoreClassificationScore(0.0, 0.0, this)]; } } } exports.PhoneNumber = PhoneNumber; ; //# sourceMappingURL=phone-number.js.map