首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本中接触信息的检测模型

文本中接触信息的检测模型
EN

Data Science用户
提问于 2022-08-21 13:12:39
回答 1查看 68关注 0票数 0

是否有SOTA解决方案来查找带有联系信息(电话号码、社交媒体链接等)的文本?

我知道这个任务是通过正则表达式来解决的,我已经尝试过了,但是这种类型的数字存在问题:"8 994 966 12 72“、"39_30_03*”、"912 five69 O7 OO“、"8918ob801ra70sha10s”等等。如果在所有这些表达式下编写正则表达式,它们已经开始影响正则数字,不需要删除。我试过使用NER模型,但他们没有看到具体的电话号码。

我并不要求编写一个通用的正则表达式,我特别感兴趣的是使用机器学习技术的解决方案(例如,我尝试了NER,但它没有工作)。我也推迟使用BERT和类似的SOTA模型,因为它们没有很好的嵌入,而且我的计算能力和时间是有限的。

提前谢谢你。

EN

回答 1

Data Science用户

发布于 2022-08-22 10:30:45

您的主要问题可能来自缺乏不正确的数据,而不是模型本身。

这就是为什么您可以很容易地使用随机规则生成不正确的数据及其校正值。

例如,要创建1000个错误的电话号码:

代码语言:javascript
复制
import random

def random_phone_num_generator():
    first = str(random.randint(100, 999))
    second = str(random.randint(1, 888)).zfill(3)
    last = (str(random.randint(1, 9998)).zfill(4))
    while last in ['1111', '2222', '3333', '4444', '5555', '6666', '7777', '8888']:
        last = (str(random.randint(1, 9998)).zfill(4))
    return '{}-{}-{}'.format(first, second, last)


n = 1000


wrong_numbers = []

right_numbers = []


for i in range(0, n):
    right_numbers.append(random_phone_num_generator())
    
    

error_probability = 0.1
phone_number_len = 12


def random_option(options_list = []):
    
    len_options = len(options_list)-1
    
    random_position = random.randint(0, len_options)
    
    return options_list[random_position]


#code to have one char error in a phone number
for i in range(0, len(right_numbers)):
    
    current_phone_number = right_numbers[i]
    
    random_float = random.uniform(0, 1)
    
    random_position = int(random_float * phone_number_len)
    
    current_char_random_position = current_phone_number[random_position]
    
    new_error_char = ''
    if current_char_random_position == '-':
        new_error_char = random_option(['dash','~','/'])
    elif current_char_random_position == '1':
        new_error_char = random_option(['one','One'])
    elif current_char_random_position == '2':
        new_error_char = random_option(['two','tWo'])    
    elif current_char_random_position == '3':
        new_error_char = random_option(['three','Three','E'])            
    elif current_char_random_position == '4':
        new_error_char = random_option(['four','Four'])    
    elif current_char_random_position == '5':
        new_error_char = random_option(['five','Five'])            
    elif current_char_random_position == '6':
        new_error_char = random_option(['six','Six','b'])        
    elif current_char_random_position == '7':
        new_error_char = random_option(['seven','Seven','T'])    
    elif current_char_random_position == '8':
        new_error_char = random_option(['height','Height'])    
    elif current_char_random_position == '9':
        new_error_char = random_option(['nine','Nine'])    
    elif current_char_random_position == '0':
        new_error_char = random_option(['zero','Zero','O'])    
        
    new_error_char = random_option(['',' ']) + new_error_char + random_option(['',' ']) #random spaces around the number
    new_error_string = current_phone_number[:random_position] + new_error_char + current_phone_number[random_position+1:]
    
    wrong_numbers.append(new_error_string)
    

print(wrong_numbers)

现在,您可以使用大量不正确和正确的数据来训练任何模型(包括NER)。

请注意,您必须为可能拥有的每个场景生成不正确的数据。

这不需要大量的计算,只要生成的不正确/正确的数据与实际数据(可能约为10%)相比并不太重要,这样才能足够接近现实。

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

https://datascience.stackexchange.com/questions/113723

复制
相关文章

相似问题

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