我正在编写一个程序,从许多网站上抓取博客文章。我试图从免费文本中提取他们澳大利亚格式的电话号码。事实证明,这是相当困难的。
下面是一些构建的博客文章示例:
示例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模式验证结果。
显然,我尝试过正则表达式,但在这种情况下,它们失败了。
我的系统大部分时间都能工作,但是代码一点也不好看。
你会怎么攻击这个?
发布于 2015-08-04 03:38:02
您要寻找的实际上是自然语言处理的一个研究领域,已知的是实体提取。解决这个问题的方法很多,解决此类任务的数学模型也很多,幸运的是,有一些工具箱可以完成类似的任务- -OpenNLP和斯坦福纳就是两个例子。它有自动提取姓名、日期、词类等的工具。你可以修改它来提取电话号码--需要知道的一件事是,这些都是统计模型(相对于基于规则的统计模型,而规则是你目前的方法),所以你需要培训数据。
请注意,这可能需要对您当前所做的工作进行重大更改,这可能值得,也可能不值得,但如果要处理与从非结构化文本中提取实体相关的问题,则可能值得了解这些工具。
首先,我将查看OpenNLP/Stanford文档,以了解您正在寻找的内容是否可行。
发布于 2015-08-04 03:32:35
我会用一种更简单的方法:
发布于 2015-08-04 03:56:06
我会使用regexp,因为如果只使用所有数字,有时就会得到错误的数字:
+49 (0) 7121 / 1229-276
那应该是本地的071211229276或国际的004971211229276。
https://stackoverflow.com/questions/31800141
复制相似问题