Fixed word selection

This commit is contained in:
perro tuerto 2024-01-15 12:56:56 -08:00
parent 25f5afdbad
commit 925eb12ada
3 changed files with 140 additions and 145 deletions

View File

@ -10,8 +10,8 @@ class WordList:
"""Scrabble wordlist maker"""
TILES = {
"en": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"es": "ABCDEFGHIJLMNÑOPQRSTUVXYZ",
"en": list("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
"es": list("ABCDEFGHIJLMNÑOPQRSTUVXYZ"),
}
def __init__(self, paths=[], lang="en", max_items=0, word_size=(2, 15)):
@ -34,7 +34,7 @@ class WordList:
tiles = ", ".join(self.TILES.keys())
raise ValueError(f"{self.lang} language is not in {tiles}")
else:
self.tiles = re.compile("[" + self.TILES[self.lang] + "]+")
self.tiles = self.TILES[self.lang]
for path in self.paths:
try:
text = Path(path).read_text()
@ -43,17 +43,36 @@ class WordList:
except Exception:
raise IOError(f"{path} couldn't open")
def select(self, word):
"""Selects valid word. If the word is not valid, returns "", if it is
valid, it means that the word can be played with the current lang tiles
:param word: Word to select
:type word: str
:return: Selected and curated word
:rtype: str
"""
res = ""
if len(word) >= self.size[0] and len(word) <= self.size[1]:
chars = list(word.upper())
chars = [unidecode(c) if c not in self.tiles else c for c in chars]
word = "".join(chars)
no_repeated = len(set(chars)) > 1 if len(chars) > 1 else True
if word not in self.words and no_repeated:
illegal_chars = [c for c in chars if c not in self.tiles]
if not illegal_chars:
self.words.append(word)
res = word
return res
def make(self):
"""Makes wordlist"""
self.check()
for text in self.texts:
for word in re.split(r"\s+", text):
if len(word) >= self.size[0] and len(word) <= self.size[1]:
word = unidecode(word).upper()
if re.match(self.tiles, word) and word not in self.words:
self.words.append(word)
if self.max > 0 and len(self.words) == self.max:
break
self.select(word)
if self.max > 0 and len(self.words) == self.max:
break
self.words = list(sorted(self.words))
if self.max > 0 and len(self.words) < self.max:
warn(f"wordlist ({len(self.words)}) < max_items ({self.max})")

View File

@ -94,15 +94,15 @@ ACLARA
ACLARAR
ACLARO
ACOGIDA
ACOMPANA
ACOMPANABA
ACOMPANADA
ACOMPANADO
ACOMPANADOS
ACOMPANAMIENTO
ACOMPANAN
ACOMPANAR
ACOMPANO
ACOMPAÑA
ACOMPAÑABA
ACOMPAÑADA
ACOMPAÑADO
ACOMPAÑADOS
ACOMPAÑAMIENTO
ACOMPAÑAN
ACOMPAÑAR
ACOMPAÑO
ACONTECIMIENTO
ACONTECIMIENTOS
ACORDADO
@ -430,10 +430,6 @@ AMPLIAS
AMPLIO
AMPLIOS
ANA
ANADE
ANADIDO
ANADIO
ANADIR
ANALISIS
ANALISTA
ANALISTAS
@ -470,9 +466,7 @@ ANIMALES
ANIMO
ANIMOS
ANIVERSARIO
ANO
ANOCHE
ANOS
ANOTACIONES
ANOTAR
ANOTO
@ -816,6 +810,12 @@ AZNAR
AZUCAR
AZUL
AZULES
AÑADE
AÑADIDO
AÑADIO
AÑADIR
AÑO
AÑOS
BACTERIAS
BAGDAD
BAHIA
@ -846,10 +846,7 @@ BANDAS
BANDEJA
BANDERA
BANDERAS
BANO
BANOS
BAR
BARACK
BARATA
BARATO
BARBA
@ -887,6 +884,8 @@ BATA
BATALLA
BATALLAS
BATERIA
BAÑO
BAÑOS
BEATRIZ
BEBE
BEBER
@ -976,9 +975,9 @@ BOTELLAS
BOTON
BOTONES
BRASIL
BRASILENA
BRASILENO
BRASILENOS
BRASILEÑA
BRASILEÑO
BRASILEÑOS
BRAZO
BRAZOS
BRECHA
@ -1106,8 +1105,8 @@ CAMIONETA
CAMISA
CAMISETA
CAMPAMENTO
CAMPANA
CAMPANAS
CAMPAÑA
CAMPAÑAS
CAMPEON
CAMPEONATO
CAMPEONES
@ -1115,7 +1114,6 @@ CAMPESINO
CAMPESINOS
CAMPO
CAMPOS
CANA
CANADA
CANADIENSE
CANAL
@ -1194,7 +1192,7 @@ CARGAS
CARGO
CARGOS
CARIBE
CARINO
CARIÑO
CARLA
CARLOS
CARMEN
@ -1238,7 +1236,7 @@ CATALANA
CATALANES
CATALINA
CATALOGO
CATALUNA
CATALUÑA
CATASTROFE
CATEDRAL
CATEGORIA
@ -1256,7 +1254,7 @@ CAYENDO
CAYERON
CAYO
CAZA
CC
CAÑA
CD
CEBOLLA
CECILIA
@ -1440,7 +1438,6 @@ CLINICOS
CLUB
CLUBES
CM
CO2
COALICION
COBERTURA
COBRA
@ -1557,12 +1554,6 @@ COMO
COMODA
COMODIDAD
COMODO
COMPANERA
COMPANERAS
COMPANERO
COMPANEROS
COMPANIA
COMPANIAS
COMPARA
COMPARACION
COMPARADO
@ -1575,6 +1566,12 @@ COMPARTIR
COMPASION
COMPATRIOTA
COMPATRIOTAS
COMPAÑERA
COMPAÑERAS
COMPAÑERO
COMPAÑEROS
COMPAÑIA
COMPAÑIAS
COMPENSACION
COMPENSAR
COMPETENCIA
@ -1722,7 +1719,6 @@ CONJUNTO
CONJUNTOS
CONLLEVA
CONMIGO
CONO
CONOCE
CONOCEMOS
CONOCEN
@ -2000,6 +1996,7 @@ COTIDIANAS
COTIDIANO
COVID
COYUNTURA
COÑO
CRANEO
CREA
CREACION
@ -2150,7 +2147,7 @@ CUMBRE
CUMPLA
CUMPLAN
CUMPLE
CUMPLEANOS
CUMPLEAÑOS
CUMPLEN
CUMPLIDO
CUMPLIENDO
@ -2190,8 +2187,6 @@ DAN
DANDO
DANDOLE
DANIEL
DANO
DANOS
DANZA
DAR
DARA
@ -2209,6 +2204,8 @@ DATA
DATO
DATOS
DAVID
DAÑO
DAÑOS
DC
DE
DEBA
@ -2464,7 +2461,7 @@ DESEABA
DESEADO
DESEAN
DESECHOS
DESEMPENO
DESEMPEÑO
DESEMPLEO
DESENLACE
DESEO
@ -2665,12 +2662,12 @@ DISCURSOS
DISCUSION
DISCUSIONES
DISCUTIR
DISENADO
DISENADOR
DISENADORES
DISENAR
DISENO
DISENOS
DISEÑADO
DISEÑADOR
DISEÑADORES
DISEÑAR
DISEÑO
DISEÑOS
DISFRUTA
DISFRUTAR
DISFRUTE
@ -2761,7 +2758,6 @@ DOMINICANO
DOMINICANOS
DOMINIO
DON
DONA
DONACION
DONACIONES
DONALD
@ -2778,6 +2774,7 @@ DOSCIENTOS
DOSIS
DOTACION
DOY
DOÑA
DR
DRAMA
DRAMATICA
@ -2790,10 +2787,10 @@ DUDAR
DUDAS
DUELE
DUELO
DUENA
DUENO
DUENOS
DUERME
DUEÑA
DUEÑO
DUEÑOS
DULCE
DULCES
DUO
@ -2846,7 +2843,6 @@ EDUCATIVA
EDUCATIVAS
EDUCATIVO
EDUCATIVOS
EE
EEH
EEUU
EFE
@ -2950,7 +2946,6 @@ EMOCIONALES
EMOCIONES
EMPATE
EMPECE
EMPENO
EMPERADOR
EMPEZABA
EMPEZADO
@ -2959,6 +2954,7 @@ EMPEZANDO
EMPEZAR
EMPEZARON
EMPEZO
EMPEÑO
EMPIEZA
EMPIEZAN
EMPLEA
@ -3039,7 +3035,7 @@ ENFRENTAR
ENFRENTARSE
ENFRENTE
ENFRENTO
ENGANO
ENGAÑO
ENLACE
ENORME
ENORMES
@ -3048,12 +3044,12 @@ ENSALADA
ENSAYO
ENSAYOS
ENSEGUIDA
ENSENA
ENSENADO
ENSENANZA
ENSENANZAS
ENSENAR
ENSENO
ENSEÑA
ENSEÑADO
ENSEÑANZA
ENSEÑANZAS
ENSEÑAR
ENSEÑO
ENTE
ENTENDEMOS
ENTENDER
@ -3084,10 +3080,10 @@ ENTRADA
ENTRADAS
ENTRADO
ENTRAN
ENTRANAS
ENTRANDO
ENTRAR
ENTRARON
ENTRAÑAS
ENTRE
ENTREGA
ENTREGADO
@ -3206,11 +3202,11 @@ ESPACIOS
ESPADA
ESPALDA
ESPALDAS
ESPANA
ESPANOL
ESPANOLA
ESPANOLAS
ESPANOLES
ESPAÑA
ESPAÑOL
ESPAÑOLA
ESPAÑOLAS
ESPAÑOLES
ESPECIAL
ESPECIALES
ESPECIALIDAD
@ -3506,16 +3502,16 @@ EXTINCION
EXTRA
EXTRACCION
EXTRAER
EXTRANA
EXTRANAS
EXTRANJERA
EXTRANJERAS
EXTRANJERO
EXTRANJEROS
EXTRANO
EXTRANOS
EXTRAORDINARIA
EXTRAORDINARIO
EXTRAÑA
EXTRAÑAS
EXTRAÑO
EXTRAÑOS
EXTREMA
EXTREMADAMENTE
EXTREMO
@ -3526,7 +3522,6 @@ FABRICANTE
FABRICANTES
FABRICAR
FABRICAS
FACEBOOK
FACHADA
FACIL
FACILES
@ -3745,7 +3740,6 @@ FRANCIA
FRANCISCO
FRANCO
FRANJA
FRANK
FRASE
FRASES
FRAUDE
@ -4169,7 +4163,6 @@ HOJAS
HOLA
HOLANDA
HOLANDES
HOLLYWOOD
HOMBRE
HOMBRES
HOMBRO
@ -4257,8 +4250,6 @@ IGUAL
IGUALDAD
IGUALES
IGUALMENTE
II
III
ILEGAL
ILEGALES
ILUMINACION
@ -4612,7 +4603,6 @@ INVOLUCRADOS
IPHONE
IR
IRA
IRAK
IRAN
IRENE
IRIA
@ -4639,7 +4629,6 @@ IZQUIERDA
IZQUIERDO
JA
JABON
JACK
JAIME
JAMAS
JAMES
@ -4806,7 +4795,6 @@ LEJANA
LEJANO
LEJOS
LEMA
LENA
LENGUA
LENGUAJE
LENGUAS
@ -4838,6 +4826,7 @@ LEYENDAS
LEYENDO
LEYES
LEYO
LEÑA
LIBERACION
LIBERAL
LIBERALES
@ -5017,7 +5006,7 @@ MADERA
MADRE
MADRES
MADRID
MADRILENO
MADRILEÑO
MADRUGADA
MADUREZ
MAESTRA
@ -5049,8 +5038,6 @@ MALTRATO
MAMA
MAMIFEROS
MANAGUA
MANANA
MANANAS
MANCHA
MANCHAS
MANCHESTER
@ -5135,8 +5122,6 @@ MARINA
MARINO
MARINOS
MARIO
MARK
MARKETING
MARMOL
MARRON
MARRUECOS
@ -5185,6 +5170,8 @@ MAYO
MAYOR
MAYORES
MAYORIA
MAÑANA
MAÑANAS
ME
MECANICA
MECANICO
@ -5316,7 +5303,6 @@ MIERDA
MIGRACION
MIGRANTES
MIGUEL
MIKE
MIL
MILAGRO
MILAN
@ -5374,8 +5360,6 @@ MITAD
MITICO
MITO
MITOS
MM
MMM
MOCHILA
MODA
MODALIDAD
@ -5412,9 +5396,9 @@ MONO
MONSTRUO
MONTADO
MONTAJE
MONTANA
MONTANAS
MONTAR
MONTAÑA
MONTAÑAS
MONTE
MONTERREY
MONTEVIDEO
@ -5488,8 +5472,6 @@ MUNDIAL
MUNDIALES
MUNDO
MUNDOS
MUNECA
MUNECAS
MUNICIPAL
MUNICIPALES
MUNICIPIO
@ -5511,6 +5493,8 @@ MUSICO
MUSICOS
MUSLOS
MUY
MUÑECA
MUÑECAS
NACE
NACEN
NACER
@ -5590,7 +5574,6 @@ NERVIOSO
NESTOR
NEURONAS
NEVERA
NEW
NI
NICARAGUA
NICO
@ -5600,16 +5583,16 @@ NIEGA
NIETO
NIETOS
NIEVE
NINA
NINAS
NINEZ
NINGUN
NINGUNA
NINGUNO
NINO
NINOS
NIVEL
NIVELES
NIÑA
NIÑAS
NIÑEZ
NIÑO
NIÑOS
NO
NOBEL
NOBLE
@ -5893,10 +5876,10 @@ OSCURAS
OSCURIDAD
OSCURO
OSCUROS
OTONO
OTORGA
OTORGADO
OTORGAR
OTOÑO
OTRA
OTRAS
OTRO
@ -5952,7 +5935,6 @@ PANTALLA
PANTALLAS
PANTALON
PANTALONES
PANUELO
PAPA
PAPAS
PAPEL
@ -6076,6 +6058,7 @@ PAULA
PAUSA
PAUTAS
PAZ
PAÑUELO
PC
PECADO
PECES
@ -6093,7 +6076,6 @@ PEDRO
PEGA
PEGADO
PEGO
PEKIN
PELEA
PELEAR
PELEAS
@ -6131,10 +6113,10 @@ PENUMBRA
PEOR
PEORES
PEPE
PEQUENA
PEQUENAS
PEQUENO
PEQUENOS
PEQUEÑA
PEQUEÑAS
PEQUEÑO
PEQUEÑOS
PER
PERCEPCION
PERCIBE
@ -6237,6 +6219,7 @@ PETICIONES
PETROLEO
PETROLERA
PEZ
PEÑA
PIANISTA
PIANO
PIB
@ -6440,7 +6423,6 @@ POTENCIAR
POTENCIAS
POTENTE
POZO
PP
PRACTICA
PRACTICAMENTE
PRACTICAR
@ -6802,8 +6784,6 @@ PULGADAS
PULMON
PULMONES
PULSO
PUNADO
PUNO
PUNTA
PUNTAS
PUNTO
@ -6817,6 +6797,8 @@ PUSIERA
PUSIERON
PUSO
PUTA
PUÑADO
PUÑO
QUE
QUEDA
QUEDABA
@ -6899,7 +6881,6 @@ RAMIREZ
RAMIRO
RAMON
RANGO
RANKING
RAPIDA
RAPIDAMENTE
RAPIDEZ
@ -7316,7 +7297,6 @@ ROBO
ROBOT
ROCA
ROCAS
ROCK
RODAJE
RODAR
RODEA
@ -7549,28 +7529,12 @@ SEMINARIO
SENADO
SENADOR
SENADORES
SENAL
SENALA
SENALABA
SENALADO
SENALAN
SENALANDO
SENALAR
SENALARON
SENALES
SENALO
SENAS
SENCILLA
SENCILLAMENTE
SENCILLO
SENCILLOS
SENDERO
SENO
SENOR
SENORA
SENORAS
SENORES
SENORITA
SENOS
SENSACION
SENSACIONES
@ -7641,7 +7605,22 @@ SEXTO
SEXUAL
SEXUALES
SEXUALIDAD
SHOW
SEÑAL
SEÑALA
SEÑALABA
SEÑALADO
SEÑALAN
SEÑALANDO
SEÑALAR
SEÑALARON
SEÑALES
SEÑALO
SEÑAS
SEÑOR
SEÑORA
SEÑORAS
SEÑORES
SEÑORITA
SI
SIDA
SIDO
@ -7753,7 +7732,6 @@ SOCIO
SOCIOS
SOFA
SOFIA
SOFTWARE
SOJA
SOL
SOLA
@ -7829,6 +7807,7 @@ SOSTIENEN
SOSTUVO
SOTANO
SOY
SOÑAR
SU
SUAREZ
SUAVE
@ -7872,9 +7851,9 @@ SUELO
SUELOS
SUELTA
SUENA
SUENO
SUENOS
SUERTE
SUEÑO
SUEÑOS
SUFICIENTE
SUFICIENTEMENTE
SUFICIENTES
@ -7972,8 +7951,8 @@ TALES
TALLA
TALLER
TALLERES
TAMANO
TAMANOS
TAMAÑO
TAMAÑOS
TAMBIEN
TAMPOCO
TAN
@ -8173,7 +8152,6 @@ TODAS
TODAVIA
TODO
TODOS
TOKIO
TOLEDO
TOLERANCIA
TOM
@ -8355,7 +8333,6 @@ TUVO
TUYA
TUYO
TV
TWITTER
UBICA
UBICACION
UBICADA
@ -8413,7 +8390,6 @@ URIBE
URNAS
URUGUAY
URUGUAYO
US$
USA
USABA
USADO
@ -8441,6 +8417,7 @@ UTILIZANDO
UTILIZAR
UTILIZARON
UTILIZO
UÑAS
VA
VACA
VACACIONES
@ -8766,7 +8743,6 @@ XIX
XVI
XVII
XVIII
XX
XXI
YA
YENDO

View File

@ -71,15 +71,15 @@ def test_class_attrs_custom():
def test_class_results_default():
wlist = WordList([TXT_RAW])
wlist.make()
assert len(wlist.words) == 8797
assert len(wlist.words) == 8786
def test_class_results_lang():
wlist = WordList([TXT_RAW], lang="es")
wlist.make()
assert len(wlist.words) == 8780
assert WordList.TILES["es"] in str(wlist.tiles)
assert not WordList.TILES["en"] in str(wlist.tiles)
assert len(wlist.words) == 8756
assert WordList.TILES["es"] == wlist.tiles
assert WordList.TILES["en"] != wlist.tiles
assert wlist.max == 0