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

如何用Python与NLP技术识别文本中的人名

Python识别文本中的人名:正则 vs NLP方案

一、正则表达式方案

适合格式固定、结构化强的文本,比如你提供的示例场景。核心思路是利用人名“首字母大写、由连续单词组成(支持中间带缩写点)”的特征来匹配。

代码实现:

import re

mystring = 'Elon R. Musk (245)436-7956 elonmusk@teslabooya.com Jeff Bezos (235)231-3432 jeffreyallenbiz@amizbiz.net Tim Apple apple.chickadee.org 432-455-5467'
# 匹配首字母大写的连续词,支持中间带点的缩写形式
name_pattern = re.compile(r'[A-Z][a-z]+(?: [A-Z][a-z.]+)+')
names = name_pattern.findall(mystring)
print(names)  # 输出: ['Elon R. Musk', 'Jeff Bezos', 'Tim Apple']

优缺点

  • 优势:代码简单、运行速度快,无需额外依赖。
  • 劣势:泛化能力极差,一旦遇到格式变化(比如全小写人名、带连字符的人名、非英文人名)就会失效,无法处理复杂语境下的文本。

二、NLP工具包方案(推荐用于后续扩展)

如果后续要处理更多类型的文本,优先用**命名实体识别(NER)**技术,比如Python的spaCy库,它能通过训练好的模型识别语境中的人名,泛化能力强。

代码实现:

import spacy

# 加载spaCy英文小模型(需先安装:pip install spacy && python -m spacy download en_core_web_sm)
nlp = spacy.load("en_core_web_sm")
mystring = 'Elon R. Musk (245)436-7956 elonmusk@teslabooya.com Jeff Bezos (235)231-3432 jeffreyallenbiz@amizbiz.net Tim Apple apple.chickadee.org 432-455-5467'

doc = nlp(mystring)
# 提取标注为PERSON的实体
names = [ent.text for ent in doc.ents if ent.label_ == "PERSON"]
print(names)  # 输出: ['Elon R. Musk', 'Jeff Bezos', 'Tim Apple']

优缺点

  • 优势:能处理复杂语境、不同格式的人名,支持多语言(更换对应模型即可),准确率远高于正则,适合大规模扩展。
  • 劣势:需要加载预训练模型,运行速度略慢于正则,但对于大多数业务场景完全够用。

方案选择建议

  • 仅处理示例这类固定格式文本:用正则。
  • 后续要扩展到更多复杂文本:用NLP工具包(如spaCy)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:01:18