ここから本文です

pythonのソースについて

dai********さん

2012/6/2301:50:13

pythonのソースについて

twitteのbot製造の
マルコフの連鎖を作る際の
ソースが

import random
import MeCab

def wakati(text):
t = MeCab.Tagger("-Owakati")
m = t.parse(text)
result = m.rstrip(" \n").split(" ")
return result

if __name__ == "__main__":
import random, sys, os

src = ""

# 元にする文章の読み込み
filename = "test.txt"
s = open(filename, "r").read()

# わかち書きした単語をリストに格納する
wordlist = wakati(src)

# マルコフ連鎖テーブルの作成
markov = {}
pw = "" # pw - previous word, cw - current word
for cw in wordlist:
if pw:
if markov.has_key(pw):
lst = markov[pw]
else:
lst = []

lst.append(cw)
markov[pw] = lst
pw = cw

# マルコフ連鎖で文章作成
selectword = wordlist[0]
sentence = ""
count = 0
while len(wordlist) > count:
sentence += selectword
selectword = random.choice(markov.get(selectword))
count += 1
print sentence

このようなソースなんですが

selectword = random.choice(markov.get(selectword))
の部分で必ず

Traceback (most recent call last):
File "bot1.py", line 75, in <module>
selectword = random.choice(markov.get(selectword))
File "C:\Python27\lib\random.py", line 261, in choice
return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty
TypeError: object of type 'NoneType' has no len()

このエラーがでます。
どう対処したらよいのでしょうか

補足どのように値を表示すればよいのでしょうか?

閲覧数:
1,200
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

shi********さん

編集あり2012/6/2311:53:05

値の表示は print すればいいです。
pythonシェルで1行1行入力して実行しては、手入力で値を print するのもいいでしょう。
pythonデバッガの使い方を覚えてデバッグするのもいいでしょう。

補足前

markov.get(selectword) が None なのでは?
random.choiceを呼ぶ前に markov.get(selectword) がどんな値か表示してみてはいかがですか?

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる