首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从免费文本中提取电话号码

从免费文本中提取电话号码
EN

Stack Overflow用户
提问于 2015-08-04 03:25:00
回答 3查看 1.5K关注 0票数 1

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

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

示例1:

“你好,我叫艾丽西娅,32岁,在布里斯班住了40年。我身高6英寸,是个敏捷的跑步者。”从2004年开始,我每周跑步2-3次.请拨打+61 (04) 654 456或我的另一个号码0434 43 22 34。“

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

示例2:

“我是乔,我也喜欢跑步,身高7英尺,从2004年开始就一直在跑步。”如需培训意见,请致电043 572-6087或(02) 1232 23 56。“

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

例3:

“我叫Pricilla,我喜欢跑步。您可以拨打0 434 45 45 12与我联系,但请在上午12点之前不要打电话给我(我在10-11之前有客户)。我的牌照号码是4335TE33,我驾驶的是2004年福特布朗科( Ford Bronco )的全新6英寸轮胎。”我可以跑28公里,但通常要求每3或4公里休息一次。今日(04) 3 445 4512“

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

我已经提出了一个非常详细的系统,为每个博客条目做以下工作:

1)删除所有非数字字符、修边和删除双空格

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

3)遍历数字数组并应用规则将其组合在一起。这个代码很臃肿,不太漂亮。

4)使用澳大利亚移动电话和陆路号码的RegExp模式验证结果。

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

我的系统大部分时间都能工作,但是代码一点也不好看。

你会怎么攻击这个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-04 03:38:02

您要寻找的实际上是自然语言处理的一个研究领域,已知的是实体提取。解决这个问题的方法很多,解决此类任务的数学模型也很多,幸运的是,有一些工具箱可以完成类似的任务- -OpenNLP斯坦福纳就是两个例子。它有自动提取姓名、日期、词类等的工具。你可以修改它来提取电话号码--需要知道的一件事是,这些都是统计模型(相对于基于规则的统计模型,而规则是你目前的方法),所以你需要培训数据。

请注意,这可能需要对您当前所做的工作进行重大更改,这可能值得,也可能不值得,但如果要处理与从非结构化文本中提取实体相关的问题,则可能值得了解这些工具。

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

票数 1
EN

Stack Overflow用户

发布于 2015-08-04 03:32:35

我会用一种更简单的方法:

  1. 删除空格,逗号,括号和任何其他符号你可以。
  2. 使用regex匹配与澳大利亚电话号码长度匹配的行中的X位数。
票数 0
EN

Stack Overflow用户

发布于 2015-08-04 03:56:06

我会使用regexp,因为如果只使用所有数字,有时就会得到错误的数字:

+49 (0) 7121 / 1229-276

那应该是本地的071211229276或国际的004971211229276。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31800141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档