如何用Python脚本快速提取文本及文件中的人名?
人名处理的两个Python解决方案
一、将每行含人名的文本文件转换为干净的人名列表
通用规则
- 若两行包含同一人物的姓名,需去重,视为同一条目
- 不同人物的姓名分属不同条目
- 人名仅包含大小写字母(含重音字母),不包含数字及其他符号
示例输入
- 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%- ELEN OF THE DAWN 98.3%
- 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
相关产品推荐
相关产品推荐

