Raspar y encontrar palabras ordenadas en un diccionario usando Python

¿Qué son las palabras ordenadas?

Una palabra ordenada es una palabra en la que las letras aparecen en orden alfabético. Por ejemplo abadía y suciedad . El resto de las palabras están desordenadas por ejemplo geeks

La tarea a mano

Esta tarea está tomada de Rosetta Code y no es tan mundana como parece en la descripción anterior. Para obtener una gran cantidad de palabras, usaremos un diccionario en línea disponible en http://www.puzzlers.org/pub/wordlists/unixdict.txt que tiene una colección de alrededor de 2500 palabras y, dado que usaremos Python, podemos hágalo raspando el diccionario en lugar de descargarlo como un archivo de texto y luego realizar algunas operaciones de manejo de archivos en él.

Requisitos:

pip install requests

Código

El enfoque será recorrer la palabra completa y comparar los valores ascii de los elementos en pares hasta que encontremos un resultado falso; de lo contrario, se ordenará la palabra.
Por lo que esta tarea se dividirá en 2 partes:
Raspado

  1. Usando las requests de la biblioteca de python, obtendremos los datos de la URL dada
  2. Almacene el contenido obtenido de la URL como una string
  3. Descodificación del contenido que suele estar codificado en la web mediante UTF-8
  4. Convertir la string larga de contenido en una lista de palabras

Encontrar las palabras ordenadas

  1. Recorriendo la lista de palabras
  2. Comparación por pares del valor ASCII de cada carácter adyacente en cada palabra
  3. Almacenar un resultado falso si un par no está ordenado
  4. De lo contrario imprimiendo la palabra ordenada
# Python program to find ordered words
import requests
  
# Scrapes the words from the URL below and stores 
# them in a list
def getWords():
  
    # contains about 2500 words
    url = "http://www.puzzlers.org/pub/wordlists/unixdict.txt"
    fetchData = requests.get(url)
  
    # extracts the content of the webpage
    wordList = fetchData.content
  
    # decodes the UTF-8 encoded text and splits the 
    # string to turn it into a list of words
    wordList = wordList.decode("utf-8").split()
  
    return wordList
  
  
# function to determine whether a word is ordered or not
def isOrdered():
  
    # fetching the wordList
    collection = getWords()
  
    # since the first few of the elements of the 
    # dictionary are numbers, getting rid of those
    # numbers by slicing off the first 17 elements
    collection = collection[16:]
    word = ''
  
    for word in collection:
        result = 'Word is ordered'
        i = 0
        l = len(word) - 1
  
        if (len(word) < 3): # skips the 1 and 2 lettered strings
            continue
  
        # traverses through all characters of the word in pairs
        while i < l:         
            if (ord(word[i]) > ord(word[i+1])):
                result = 'Word is not ordered'
                break
            else:
                i += 1
  
        # only printing the ordered words
        if (result == 'Word is ordered'):
            print(word,': ',result)
  
  
# execute isOrdered() function
if __name__ == '__main__':
    isOrdered()
Output:
aau: Word is ordered
abbe: Word is ordered
abbey: Word is ordered
abbot: Word is ordered
abbott: Word is ordered
abc: Word is ordered
abe: Word is ordered
abel: Word is ordered
abet: Word is ordered
abo: Word is ordered
abort: Word is ordered
accent: Word is ordered
accept: Word is ordered
...........................
...........................
...........................

Referencias: Código Rosetta

Este artículo es una contribución de Palash Nigam . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *