标注词输出范围限制:提取文档前两个完整人名的技术实现问题
提取文档中全名并仅展示前两个完整人名的问题解决
问题描述
我需要从文档里提取所有包含名、中间名、姓的完整全名,并且只展示前两个符合要求的人名。尝试用循环处理但没搞定,现在的代码输出了一堆无关内容,完全不是我想要的结果。
现有代码
for result in classified_text: tag_value= result[0], tag_name= result[1] if tag_name=='PERSON': print(''.join([tup for tup in tag_value]))
预期输出
Steven.K.Lamberson Steve.I.Blanton
实际输出
Briazz Steven K. Lamberson Steve I. Blanton Briazz Briazz Proto Briazz Moulder Briazz Briazz Briazz Briazz Briazz Briazz Briazz Briazz Cess Briazz Briazz Briazz Briazz Briazz Briazz Briazz Briazz
解决方案
我看你现在的代码主要有两个问题:一是语法小错误,tag_value= result[0], tag_name= result[1] 这种写法不符合Python语法,得改成正确的元组解构;二是没过滤掉那些单个的名字片段(比如输出里的"Briazz"),导致无关内容混进了结果里。
咱们可以这样改,精准提取符合要求的全名并只保留前两个:
# 先收集所有符合格式的完整全名 full_names = [] for result in classified_text: # 正确解构结果里的标签值和标签名 tag_value, tag_name = result if tag_name == 'PERSON': # 把元组形式的名字转成字符串 name_str = ''.join(tag_value) if isinstance(tag_value, tuple) else tag_value # 根据你的预期格式,全名是「名.中间名.姓」的结构,所以判断是否包含至少两个点 if '.' in name_str and len(name_str.split('.')) >= 3: # 去掉名字里的空格,转成你要的Steven.K.Lamberson格式 formatted_name = name_str.replace(' ', '') full_names.append(formatted_name) # 输出前两个全名,用空格分隔 if len(full_names) >= 2: print(' '.join(full_names[:2])) elif full_names: print(full_names[0]) else: print("没找到符合要求的完整全名哦")
简单解释下改动点:
- 先把
result正确拆成tag_value和tag_name,避免语法报错 - 对每个标记为
PERSON的内容,先转成字符串,然后判断是否是符合「名.中间名.姓」的完整结构(通过检查点的数量) - 把符合条件的全名收集起来后,只取前两个用空格拼接输出,这样就不会出现那些无关的单个名字了
内容的提问来源于stack exchange,提问作者Niroop_satish
相关产品推荐
相关产品推荐

