简体   繁体   中英

How to make a random text python

I need help to output a random text. I've been given a text with 25k words, from this text_file I've been calculating the probability for the single letters, and the single words to see which letters/words have been used most.

Now I need to make a other text with 500 letters, but this text should include the probability that I have calculated, and should be wroten by the letters that I "found" from the first text.

It's like: Text1 -> do probability over the usen letters, which letters have been represented most. Make text2 -> use the probability u found from text1.

Hope u can help me, Im new in Python.

The easiest thing is to randomly select letters of the 25k file. Then the resultant has the same probability as the original.

import random
print(''.join(random.choice(original_text) for _ in range(500)))

You could do something like this:

import string
import random

def get_random_letter():
    # depends how you want to randomize getting your letter
    return random.choice(string.letters)

random_letters = []
for i in range(500):
    random_letter = get_random_letter()
    random_letters.append(random_letter)

with open("text.txt", 'w') as f:
    f.write("".join(random_letters))

You would change the "get_random_letter" definition depending on your probability model and return that character (in that case, you do not need to import random or string, these are just used for example).

Edit: To get the letter based on a certain weight you could use this:

import random

inputs = ['e', 'f', 'g', 'h']
weights = [10, 30, 50, 10]

def get_random_letter(inputs, weights):
    r = random.uniform(0, sum(weights))
    current_cutoff = 0
    for index in range(len(weights)):
        current_cutoff = current_cutoff + weights[index]
        if r < current_cutoff:
            return inputs[index]

print get_random_letter(inputs, weights)

which is derived from the post here: Returning a value at random based on a probability weights

I've now this:

def random_text():
   return(''.join(random.choice(text) for _ in range(500)))

random_letters = []

for i in range(1):
random_letter = random_text()
random_letters.append(random_letter)

print random_letters

Now it only runs once. But I don't know how to make the output text onto encoding utf-8?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM