</> Cómo funciona
Función pura del español.
| parámetro | tipo | por defecto | qué hace |
|---|---|---|---|
palabra | string | — (obligatorio) | la palabra a analizar |
commons/numara.py → función numero().fuente usada.flowchart TD
MOD[("repositorio")]
numero["numero()"]
numero -. datos .-> MOD
classDef red fill:#fde7f0,stroke:#c0397b,color:#7a1e4d;
class MOD red;# -*- coding: utf-8 -*-
"""numara.py — número gramatical (singular / plural / invariable) de una palabra.
Dos vías, en cascada:
1) LÉXICO: si la palabra está en el repositorio, se lee su número de la etiqueta
gramatical (restringido a categorías nominales, para no confundir con el número
del verbo).
2) FALLBACK ALGORÍTMICO: si no está, se compara la palabra con el plural de su
lema (usando el pluralizador, ya validado): si coincide con el lema → singular;
si coincide con su plural → plural; si con ambos → invariable.
"""
import pluralizador
NUM = {"S": "singular", "P": "plural", "N": "invariable"}
# […consultas al repositorio léxico (esquema interno: número por etiqueta nominal, y lemas de una forma)…]
def numero(cur, palabra):
# 1) vía léxico: número(s) leídos de la etiqueta gramatical nominal
cur.execute(SQL_EAGLES, (palabra,))
nums = {NUM[r[0]] for r in cur.fetchall() if r[0] in NUM}
fuente = "eagles" if nums else None
if not nums:
# 2) fallback algorítmico: comparar la palabra con el plural de cada lema
cur.execute(SQL_LEMAS, (palabra,))
w = palabra.lower()
for (lema,) in cur.fetchall():
ll = lema.lower()
plopts = {p.lower() for p in (pluralizador.pluralizar(lema) or "").split(",") if p}
if w == ll and w in plopts:
nums.add("invariable") # el lema es igual a su plural → invariable
elif w == ll:
nums.add("singular") # coincide con el lema → singular
elif w in plopts:
nums.add("plural") # coincide con el plural del lema → plural
fuente = "algorítmico" if nums else None
return {"encontrado": bool(nums), "numero": sorted(nums), "fuente": fuente}
Llámala con el código a la vista.
curl "https://api.wordkers.com/v1/numero" \
-H "X-API-Key: TU_CLAVE"