Source code for advutils.randwords
# -*- coding: utf-8 -*-
"""
This module have some utilities to create random words from source
Created on Thu Jan 28 16:59:13 2016
@author: dev
"""
from __future__ import print_function
# http://stackoverflow.com/a/18835426
from future import standard_library
standard_library.install_aliases()
from builtins import map
from builtins import range
import urllib.request
import urllib.error
import urllib.parse
import random
import string
[docs]def getwords(var):
"""
Get whole words from string that are formed with ascii letters.
:param var:
:return:
"""
words = set()
word = ""
letters = string.ascii_letters + "".join(map(str, list(range(10))))
for l in var:
if l in letters:
word += l
else:
words.add(word)
word = ""
return list(words) # urllib2.urlopen(word_site).read().splitlines()
[docs]def sitewords(word_site=None):
"""
Get words from web.
:param word_site:
:return:
"""
if word_site is None:
word_site = "http://www.freebsd.org/cgi/cvsweb.cgi/src/share/dict/web2?rev=1.12;content-type=text%2Fplain"
return getwords(urllib.request.urlopen(word_site).read())
[docs]def filewords(path=None):
"""
Get words from file.
:param path:
:return:
"""
if path is None:
path = __file__
with open(path, "r") as f:
return getwords(f.read())
try:
base_source = sitewords()
except:
base_source = filewords()
[docs]def generate(source=None, minwords=2, maxwords=5, rand=True):
"""
Generate random words from source
:param source:
:param minwords:
:param maxwords:
:param rand:
:return:
"""
if source is None:
source = base_source # use global source
def pickword():
return source[int(random.random() * (len(source) - 1))]
def numwords():
if rand:
return int(minwords + random.random() * (maxwords - minwords))
else:
return maxwords
return [pickword() for _ in range(numwords())]
if __name__ == "__main__":
print(base_source)