首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入.txt文件并在马尔可夫模型中使用

导入.txt文件并在马尔可夫模型中使用
EN

Stack Overflow用户
提问于 2011-12-31 01:17:24
回答 3查看 372关注 0票数 0

我使用下面的代码来生成随机文本:

代码语言:javascript
复制
from collections import defaultdict, Counter
from itertools import ifilter
from random import choice, randrange

def pairwise(iterable):
    it = iter(iterable)
    last = next(it)
    for curr in it:
        yield last, curr
        last = curr

valid = set('abcdefghijklmnopqrstuvwxyz ')
def valid_pair((last, curr)):
    return last in valid and curr in valid

def make_markov(text):
    markov = defaultdict(Counter)
    lowercased = (c.lower() for c in text)
    for p, q in ifilter(valid_pair, pairwise(lowercased)):
        markov[p][q] += 1
    return markov

def genrandom(model, n):
    curr = choice(list(model))
    for i in xrange(n):
        yield curr
        if curr not in model:   # handle case where there is no known successor
            curr = choice(list(model)) #i.e. letter appears for first time at end of text
        d = model[curr]
        target = randrange(sum(d.values()))
        cumulative = 0
        for curr, cnt in d.items():
            cumulative += cnt
            if cumulative > target:
                break

model = make_markov(**'the fox jumped over the fence'**)
print ''.join(genrandom(model, 280))

然而,我想使用一个txt文件作为输入,而不是我一直尝试使用的'the fox over the fence‘:

代码语言:javascript
复制
text=open('moby.txt','r+').read()

然后:

代码语言:javascript
复制
model = make_markov(text)

但是我好像有些地方不对劲,我不知道该怎么处理。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-31 02:05:30

您的参数text应该是Moby Dick的全部内容,并以字符串的形式传入?尝试传递文本文件的位置,并将其用作从read()生成字符串的句柄

代码语言:javascript
复制
Def makemarcov(fileloc):
    with open(fileloc, 'r') as f:
        text = f.read()
    #proceed...

即时消息在我的手机上,否则id也会在try子句中包含open()语句。

编辑

with关键字(如果我没弄错的话)在幕后使用yield语句,使用生成器打开文件。它使用较少的资源来读取大文件。

票数 1
EN

Stack Overflow用户

发布于 2011-12-31 02:20:19

打开文件,读入,使用它。我将使用with语句,该语句将确保文件随后被关闭。

代码语言:javascript
复制
with open(my_file, 'r') as f:
    text = f.read()
model = make_markov(text)

对于又快又脏的代码,你可以一次完成所有的工作。

代码语言:javascript
复制
model = make_markov(open(my_file, 'r').read())
票数 2
EN

Stack Overflow用户

发布于 2011-12-31 02:14:37

我试过了,它起作用了。

代码语言:javascript
复制
Aux = open("c:/Codes/A.txt",'r')
mystring = []
for i in Aux:
    mystring += i 

model = make_markov(mystring)

输出不是“那么”清楚;-)

(你读过乔姆斯基关于马尔可夫语法的书吗?)

但是,您可能并没有真正处理没有已知继任者的情况!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8682077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档