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

Python nameparser库解析"Maj Kmetic"时名字字段为空的问题咨询

问题解析与解决:nameparser无法识别"Maj"为名字

当使用nameparser解析姓名"Maj Kmetic"时,first字段为空,但类似的"Ma Kmetic"、"Maji Kmetic"能正常提取名字,核心原因是nameparser将"Maj"识别成了头衔(title)——它的内置头衔列表包含"Maj"(军衔Major的缩写),而非名字。

验证问题

运行以下代码可以确认这一点:

from nameparser import HumanName

name = HumanName('Maj Kmetic')
print(f"Title: {name.title}")   # 输出:Title: Maj
print(f"First: {name.first}")   # 输出:First: 
print(f"Last: {name.surnames}") # 输出:Last: Kmetic

解决方案

方案1:修改全局头衔配置

如果你的场景中"Maj"不会作为头衔使用,可以直接从nameparser的内置头衔列表中移除"Maj":

from nameparser import HumanName
from nameparser.config import CONSTANTS

# 移除小写的"maj"(内置列表用小写存储)
if "maj" in CONSTANTS.titles:
    CONSTANTS.titles.remove("maj")

name = HumanName('Maj Kmetic')
print(f"First: {name.first}")   # 输出:First: Maj
print(f"Last: {name.surnames}") # 输出:Last: Kmetic

注意:此修改是全局的,会影响所有后续姓名解析。

方案2:手动修正解析结果

如果需要保留头衔识别能力(比如同时处理真实军衔场景),可以在解析后手动判断并调整字段:

from nameparser import HumanName

name = HumanName('Maj Kmetic')
# 当title是"Maj"且first为空时,将title移至first字段
if name.title.strip().lower() == 'maj' and not name.first.strip():
    name.first = name.title
    name.title = ''

print(f"First: {name.first}")   # 输出:First: Maj
print(f"Last: {name.surnames}") # 输出:Last: Kmetic

这种方式更灵活,能根据具体场景适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:03