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

Spacy是否提供将西班牙语阴性名词归一化为阳性的方法?

问题

使用Spacy处理西班牙语文本时,需要统一文档中的名词形式,例如将阴性名词clienta归一化为阳性形式cliente。现有代码如下:

doc = nlp('la clienta ha pedido una coca cola')
for token in doc:
    print(token.text, token.lemma_, token.base_form_)

期望base_form_能输出该名词的归一化阳性形式。

解决方法

Spacy默认的西班牙语词形还原不会自动将阴性名词转为阳性,需要自定义逻辑实现:

  • 识别阴性名词
    通过token.pos_判断是否为名词(NOUN),再用token.morph.get("Gender")获取性别标记,筛选出标记为Fem的阴性名词。

  • 自定义阳性转换规则
    西班牙语阴性转阳性的常见规则:

    • 多数以-a结尾的阴性名词,替换结尾为-o或-e(如clienta→cliente、amiga→amigo)
    • 不规则变化的名词单独维护映射表(如mujer→hombre、señora→señor)
  • 完整实现代码

    import spacy
    
    # 加载西班牙语模型
    nlp = spacy.load("es_core_news_sm")
    
    # 不规则阴阳性名词映射表,可按需扩展
    irregular_gender_map = {
        "mujer": "hombre",
        "señora": "señor",
        "madre": "padre"
    }
    
    doc = nlp('la clienta ha pedido una coca cola, la mujer quiere un café')
    for token in doc:
        normalized_form = token.text
        if token.pos_ == "NOUN":
            gender_tags = token.morph.get("Gender")
            if "Fem" in gender_tags:
                # 优先处理不规则映射
                if token.text in irregular_gender_map:
                    normalized_form = irregular_gender_map[token.text]
                # 处理常规以-a结尾的阴性名词
                elif token.text.endswith("a"):
                    # 部分名词转-e(如clienta→cliente),其余转-o
                    root_lemma = token.lemma_
                    normalized_form = root_lemma[:-1] + "e" if root_lemma.endswith("ta") or root_lemma.endswith("ca") else root_lemma[:-1] + "o"
            print(f"{token.text} → {normalized_form}")
        else:
            print(f"{token.text} (非名词,无需转换)")
    
  • 补充说明

    • 若使用更大的西班牙语模型(如es_core_news_md/es_core_news_lg),词性和性别标记的准确率会更高
    • 可根据业务需求扩展不规则映射表,覆盖更多特殊名词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:43:12