Puede que se de el caso de que encuentres alguna incompatibilidad con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.
Solución:
Leer una lista de palabras locales
Si está haciendo esto repetidamente, lo descargaría localmente y lo extraería del archivo local. * los usuarios de nix pueden usar /usr/share/dict/words
.
Ejemplo:
word_file = "/usr/share/dict/words"
WORDS = open(word_file).read().splitlines()
Tirando de un diccionario remoto
Si desea extraer de un diccionario remoto, aquí hay un par de formas. La biblioteca de solicitudes hace que esto sea realmente fácil (tendrá que pip install requests
):
import requests
word_site = "https://www.mit.edu/~ecprice/wordlist.10000"
response = requests.get(word_site)
WORDS = response.content.splitlines()
Alternativamente, puede usar el urllib2 incorporado.
import urllib2
word_site = "https://www.mit.edu/~ecprice/wordlist.10000"
response = urllib2.urlopen(word_site)
txt = response.read()
WORDS = txt.splitlines()
Solución para Python 3
Para Python3, el siguiente código toma la lista de palabras de la web y devuelve una lista. Respuesta basada en la respuesta aceptada anteriormente por Kyle Kelley.
import urllib.request
word_url = "http://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain"
response = urllib.request.urlopen(word_url)
long_txt = response.read().decode()
words = long_txt.splitlines()
Producción:
>>> words
['a', 'AAA', 'AAAS', 'aardvark', 'Aarhus', 'Aaron', 'ABA', 'Ababa',
'aback', 'abacus', 'abalone', 'abandon', 'abase', 'abash', 'abate',
'abbas', 'abbe', 'abbey', 'abbot', 'Abbott', 'abbreviate', ... ]
Y para generar (porque era mi objetivo) una lista de 1) solo palabras en mayúsculas, 2) solo palabras con “nombre similar” y 3) un nombre aleatorio que suene realista pero divertido:
import random
upper_words = [word for word in words if word[0].isupper()]
name_words = [word for word in upper_words if not word.isupper()]
rand_name = ' '.join([name_words[random.randint(0, len(name_words))] for i in range(2)])
Y algunos nombres aleatorios:
>>> for n in range(10):
' '.join([name_words[random.randint(0,len(name_words))] for i in range(2)])
'Semiramis Sicilian'
'Julius Genevieve'
'Rwanda Cohn'
'Quito Sutherland'
'Eocene Wheller'
'Olav Jove'
'Weldon Pappas'
'Vienna Leyden'
'Io Dave'
'Schwartz Stromberg'
Hay una serie de archivos de diccionario disponibles en línea: si está en Linux, muchas (¿todas?) distribuciones vienen con un archivo /etc/dictionaries-common/words, que puede analizar fácilmente (words = open('/etc/dictionaries-common/words').readlines()
por ejemplo) para su uso.