2011-12-30 59 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