2011-12-30 62 views
1

我使用這生成文本:店輸出文本,而不是列出

for i in xrange(100): 
    sys.stdout.write(alphabet[bisect.bisect(f_list, random.random()) - 1]) 

我得到的輸出將是這樣的:

fnhtlr hhub del tn eleo s d nerowepeldhoantah yf tr e saetenwgkoyears 
oenooe urbmhonnrniwc iasseb 

,我想知道如何存儲輸出作爲TEXT,不是一個列表,所以我可以使用fd.inc(單詞)就可以了。我基本上試圖用我的隨機輸出來繪製Zipf定律。

,如果我用這個:

text1 = [alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)] 

我的輸出存儲成一個列表和FD不進行這項工作,因爲它認爲每個字符是一個單獨的詞。

for word in text1: 
    fd.inc(word) 
print fd 
<FreqDist: ' ': 1776, 'e': 1008, 'a': 752, 't': 750, 'n': 604, 'i': 586, 
'o': 556, 'h': 542, 's': 528, 'r': 478, 'l': 388, 'd': 312, 'u': 242, 
'm': 202, 'w': 192, 'g': 172, 'b': 152, 'p': 152, 'f': 150, 'c': 148, 'y': 120, 
'k': 90, 'v': 66, 'q': 12, 'z': 10, 'x': 8, 'j': 4> 

我希望由空格分隔的每個字母序列被認爲是一個詞,即輸出被視爲文本。

謝謝你的幫助!

+1

當你說「文」我相信你的意思是「字符串」: ) – 2011-12-30 09:59:30

+0

什麼是'fd.inc'?對於這個問題,'alphabet'和'f_list'是什麼? – 2011-12-30 10:07:22

+0

抱歉讓我更加確切:字母表是string.lowercase +'',f_list是我在Moby Dick中發現的字母和空白的累積頻率。然後我生成一個隨機數,它與f_list匹配,這反過來又給了我一個「隨機」字母。這是我如何得到我的「隨機」文本,從字母和空白的頻率在moby雞巴。 f_list = [0,0.068,0.083,0.103等] – Julia 2011-12-30 10:13:19

回答

3

試試這個:

text1 = ' '.join([alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)]) 

至於添加更多的細節:​​是加入列表,以字符串的Python的方式。 ' ' - 部分說它應該與一個空格連接。例如,如果你用逗號加入它,它將代替','

或者你甚至可以跳過這樣的括號:

text1 = ' '.join(alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)) 

也許你想完全地加入列表沒有charachters之間的任何東西。在這種情況下,解決方案使用如下加入方式:

text1 = ''.join([alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)]) 

還有一件事情想過。如果你在你的問題改變你的最後一個樣本代碼段發生:

for word in text1.split(): 
    fd.inc(word) 
print fd 

這將加盟後再次分裂,但這次它會分裂的單詞而不是字符(所以要還加入)。

一錘定音

因爲這個問題已經解決了我只想解釋一下這些東西的意思是:

''.join(list) - 這意味着要由每charachter分離,並進行串出的原始列表它。

string.split() - 這意味着再次列出它(哪個fd.inc無論是明顯需要一個),而是使這個由字隔開,而不是像原始列表字符。

另外,我建議你找一些Python的基礎知識,這將有助於你在未來:)這是一個偉大的系列視頻:http://www.youtube.com/watch?v=tKTZoB2Vjuk

+0

謝謝,不過看起來好像是''.join只是改變輸出,在每個字母之間添加一個額外的空格。這就是我得到: 'pttngcdenswroeaslernh eetauihtnrnrbsaotetnt ttdamtpoteasiggattnwy stnrootipeaggeecdlbsw urnthrtrktweplaachopo rinirhbdttmwhohanutde nhapianrekeoinisetaaa lnttthsda' – Julia 2011-12-30 10:01:45

+0

和頻率分佈是不變的,它仍然只考慮替代的話就像我希望它...字母: ''現在空間的頻率要高得多。 – Julia 2011-12-30 10:03:12

+0

添加了上面的新示例。但是,如果列表不包含任何空格元素,那麼只會有一個字?無論如何,檢查我的第三個樣本,看看它是否做到了你想要的。 – 2011-12-30 10:08:39