You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python脚本快速提取文本及文件中的人名?

人名处理的两个Python解决方案

一、将每行含人名的文本文件转换为干净的人名列表

通用规则

  • 若两行包含同一人物的姓名,需去重,视为同一条目
  • 不同人物的姓名分属不同条目
  • 人名仅包含大小写字母(含重音字母),不包含数字及其他符号

示例输入

  1. ALICIA SANZ 92.0%
    (2) ANA FIGUEROA 10.0%
    [3] ARIADNA MANZANARES 10.1%
    [4] BRIANA CORONIL 82.1%
    [5] DRÁP THE KLINGON 71.5%
  2. ELEN OF THE DAWN 98.3%
  1. INMACULADA FRAGA 14.8%

示例输出

Alicia Sanz
Ana Figueroa
Ariadna Manzanares
Briana Coronil
Dráp The Klingon
Elen Of The Dawn
Inmaculada Fraga

实现代码

import re

def clean_name_list_from_file(file_path):
    processed_names = set()  # 用集合自动去重
    cleaned_list = []
    
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            # 移除行首的数字、括号、点号等非字母前缀
            name_part = re.sub(r'^[^A-ZÁÉÍÓÚÜÑa-záéíóúüñ]+', '', line)
            # 移除行尾的数字、百分号等非字母后缀
            name_part = re.sub(r'[\d.%]+$', '', name_part).strip()
            # 格式化人名:每个单词首字母大写,其余小写
            formatted_name = ' '.join(word.capitalize() for word in name_part.split())
            if formatted_name not in processed_names:
                processed_names.add(formatted_name)
                cleaned_list.append(formatted_name)
    
    return cleaned_list

# 使用示例
# cleaned_names = clean_name_list_from_file('names.txt')
# for name in cleaned_names:
#     print(name)

二、从文本字符串中提取人名

需求说明

从类似 Sophia Gutierez was painting a picture of a house 的句子中,剔除冗余内容,仅提取符合规则的人名(由大小写字母组成,通常每个单词首字母大写)。

实现代码

import re

def extract_name_from_string(text):
    # 匹配连续的首字母大写单词(支持带重音的字母),至少包含两个单词
    name_pattern = re.compile(r'([A-ZÁÉÍÓÚÜÑ][a-záéíóúüñ]+(?:\s[A-ZÁÉÍÓÚÜÑ][a-záéíóúüñ]+)+)')
    matches = name_pattern.findall(text)
    # 去重后返回结果,若有多个人名则返回列表
    return list(set(matches)) if matches else None

# 使用示例
# text = "Sophia Gutierez was painting a picture of a house"
# print(extract_name_from_string(text))  # 输出: ['Sophia Gutierez']

代码说明

  • 正则表达式针对性匹配符合格式的人名,过滤掉句子中的小写普通词汇
  • 用集合去重,避免同一人名被重复提取

内容的提问来源于stack exchange,提问作者Toothpick Anemone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:39:58