I have a method to suggest.

I took the table of letter frequencies from that site. I recomputed the frequencies eliminating the space character so it's just the letters A through Z (26 choices instead of 27). I did this by dividing each value by 0.8081818, which is the sum of the frequencies excluding the space, i.e., 1 - 0.1918182. Then I computed a running sum (cumulative frequencies).

This array of 26 floating-point values is the result:

{ 0.0806425, 0.0960163, 0.1229086, 0.1661953, 0.2950576, 0.3195423, 0.3391679, 0.4001551, 0.4692106, 0.4703283, 0.4765805, 0.5175973, 0.5426070, 0.6124568, 0.6862399, 0.7032713, 0.7043362, 0.7659019, 0.8297193, 0.9199659, 0.9478228, 0.9580807, 0.9792730, 0.9809672, 0.9990304, 1.0000000 }

Here's how you can use it to solve your problem:

1. Pick a random number n between 0 and 1, so 0 <= n < 1.

2. Scan the array for the first array value greater than n, let's say at index i.

3. If i is 0, use A. If i is 1, use B. ... If i is 25, use Z.

The letters will be picked at frequencies matching English, based on the website's data.

Please let me know if you use this technique and if it works for you.