在凌乱的数据中查找电话号码

数据挖掘 机器学习
2021-09-24 01:40:56

我希望这不是一个太基本的问题,我指望数据科学网站的描述是真实的,它说“......以及那些有兴趣了解更多有关该领域的人”。我不是在寻求编程帮助,只是验证机器学习可以帮助我解决问题。

我正在尝试在我们的数据库中查找所有客户的电话号码。一个数据库有一个包含来自我们客户服务中心的自由格式评论的字段。这是一个混淆的片段:

多个#'s 123-456-7890 和 2345678901...经常账户#2233445566

如您所见,此记录包含两个电话号码和一个 10 位数的帐号。其中一个电话号码有破折号,而第二个没有。寻找括号会有所帮助,但只能找到一小部分。还有其他 10 位数字可能看起来像电话号码,但实际上并非如此。

如果我运行查询以返回所有带有破折号格式的 10 位数字的记录,我会得到数千条记录。如果我检查任何 10 位数字,我会得到数万个。因此,手动扫描这些记录以验证准确匹配是不切实际的。

我想知道我是否可以建立一个机器学习模型,我可以训练它来准确地找到这个混乱中的电话号码。当我说“准确”时,我并不是指 100%,只是比标准 SQL 查询更好。如果可以的话,我会用它来解析在这个数据库中创建的新数据。

在我看来,这个问题可能是机器学习的一个很好的候选。但我是机器学习的新手,到目前为止我所做的研究讨论了看起来不太一样的不同场景。

3个回答

原则上,这似乎接近于NER任务,您可以尝试注释样本并在其上训练序列标记模型。然而,这需要大量的工作才能使其正确:注释,然后可能需要大量的反复试验来调整正确的功能组合。

在这种情况下,我宁愿选择一些精心挑选的正则表达式,它们的性能可能大致相同,而不需要太多工作。

我认为正则表达式比使用机器学习更容易、更快捷。

请检查一下。

https://stackoverflow.com/questions/3868753/find-phone-numbers-in-python-script

这将解析出电话号码。

import re
Source = """I'm trying to find all customer phone numbers in our databases. One database has a field with free-form comments from our customer service center. Here is an obfuscated snippet:
multiple #'s 123-456-7890 and 2345678901...current account #2233445566
As you can see, this record contains two phone numbers and also a 10 digit account number. One of the phone numbers has dashes while the 2nd doesn't. Looking for parenthesis helps, but only finds a small set. There are also other 10 digit numbers that could look like a phone number but in fact aren't."""

pattern = re.compile(r'(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})')
for m in re.finditer(pattern, Source):
    print(m)

结果:

<re.Match object; span=(191, 203), match='123-456-7890'>
<re.Match object; span=(208, 218), match='2345678901'>
<re.Match object; span=(238, 248), match='2233445566'>