javascript - 从自由文本中提取电话号码

标签 javascript node.js phone-number phonenumberutils

我正在编写一个程序,从多个网站上抓取博客文章。我正在尝试从免费文本中提取他们的澳大利亚格式的电话号码。事实证明这相当困难。

以下是一些构建的博客文章示例:

示例1:

“您好,我叫艾丽西亚 (Alicia),今年 32 岁,过去 40 年来一直住在布里斯类。我高度 6 英寸,是一名敏捷的运行者。自2004年以来,我每周运行2-3次。请随时调用 +61 (04) 654 456 或尝试调用我的其他号码 0434 43 22 34。”

从这篇博文中,我需要提取“04654456”和“0434432234”

示例2:

“我是 Joe,也喜欢运行。高度 7 英寸,自 2004 年以来一直在运行。如需训练建议,请调用 043 572-6087 或 (02) 1232 23 56。”

从这篇博文中,我需要提取“0435726087 和”0212322356”。

示例3:

“我叫 Pricilla,我喜欢运行。您可以调用 0 434 45 45 12 联系我,但请不要在上午 12 点之前调用(我的客户直到 10 点至 11 点左右)。我的驾照号码是4335TE33 和我驾驶一辆 2004 款福特 Bronco,配备全新 6 英寸轮胎。我可以跑28公里,但通常每3或4公里需要休息一次。今天给我打电话 (04) 3 445 4512"

从这篇博文中我需要提取“0434454512”。

我想出了一个相当复杂的系统,每个博客条目都会执行以下操作:

1) 去掉所有非数字字符, trim 并删除双空格

2) 将字符串转换为数组。所以现在我们只有一个数字数组,例如 ['0', '434', '45', '45, '12', '4335',​​ '33', '2004', '6', '28', '3'、'4'、'04'、'34'、'832'、'234]

3) 迭代数字数组并应用规则将其拼凑在一起。这段代码比较臃肿而且不太漂亮。

4) 使用澳大利亚手机和固定电话号码的正则表达式模式验证结果

显然我已经尝试过使用正则表达式,但在这种情况下它们失败了。

我的系统大部分时间都可以工作,但至少可以说代码并不漂亮。

你会如何攻击这个?

最佳答案

您正在寻找的实际上是自然语言处理的一个研究领域,即实体提取。有许多方法可以解决该问题,也有多种数学模型可以解决此类任务,幸运的是,有可用的工具包可以执行类似的任务 - OpenNLPStanford NER这是几个例子。它具有自动提取姓名、日期、词性等的工具。您也许可以修改它以提取电话号码 - 需要知道的一件事是这些是统计模型(与您当前的基于规则的方法相反)你需要训练数据。

请注意,这可能需要对您当前正在做的事情进行重大更改,因此可能值得也可能不值得,但如果您要解决与从非结构化文本中提取实体相关的此类问题,那么可能值得了解一下这些工具。

我会首先查看 OpenNLP/Stanford 文档,看看您正在寻找的内容是否可行。

关于javascript - 从自由文本中提取电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31800141/

相关文章:

javascript - AngularJS 如何发送多部分/混合

node.js - 未捕获( promise )TypeError : dispatch is not a function useContext/useReducer

javascript - Node.js 中的 URL 组件编码

ios - 如何从字符串中提取数值?

android - 读取设备电话号码抛出 NULLPointerException

Javascript 正则表达式检测页面源中的所有电话号码

javascript - 以自然宽度显示 DataTables 列

javascript - 我真的需要一个单例吗?

javascript - 复制具有所有属性的元素-更新

当用户在浏览器上单击刷新时,node.js 会转到特定页面