これは初心者のOOPythonの質問です。反対票を獲得せずにこれを尋ねることができれば、初心者のためのスタックオーバーフローがあったらいいのにと思います。だから、ここに行きます。
このコードを実行すると:
from nltk import NaiveBayesClassifier,classify
import USSSALoader
import random
class genderPredictor():
def getFeatures(self):
if self._loadNames() != None:
maleNames,femaleNames=self._loadNames()
else:
print "There is no training file."
return
featureset = list()
for nameTuple in maleNames:
features = self._nameFeatures(nameTuple[0])
featureset.append((features,'M'))
for nameTuple in femaleNames:
features = self._nameFeatures(nameTuple[0])
featureset.append((features,'F'))
return featureset
def trainAndTest(self,trainingPercent=0.80):
featureset = self.getFeatures()
random.shuffle(featureset)
name_count = len(featureset)
cut_point=int(name_count*trainingPercent)
train_set = featureset[:cut_point]
test_set = featureset[cut_point:]
self.train(train_set)
return self.test(test_set)
def classify(self,name):
feats=self._nameFeatures(name)
return self.classifier.classify(feats)
def train(self,train_set):
self.classifier = NaiveBayesClassifier.train(train_set)
return self.classifier
def test(self,test_set):
return classify.accuracy(self.classifier,test_set)
def getMostInformativeFeatures(self,n=5):
return self.classifier.most_informative_features(n)
def _loadNames(self):
return USSSALoader.getNameList()
def _nameFeatures(self,name):
name=name.upper()
return {
'last_letter': name[-1],
'last_two' : name[-2:],
'last_is_vowel' : (name[-1] in 'AEIOUY')
}
if __name__ == "__main__":
gp = genderPredictor()
accuracy=gp.trainAndTest()
そして、をself._loadNames()
返しますNone
、私はこのエラーを受け取りました(ランダムにインポートされたモジュールから):
shuffle C:\Python27\lib\random.py 285
TypeError: object of type 'NoneType' has no len()
return
これは、ステートメントをに入れたにもかかわらず、フローがランダムモジュール()を呼び出すgetFeatures(self)
次のクラスメソッド()にジャンプするために発生しました。trainAndTest(self,trainingPercent=0.80)
random.shuffle(featureset)
だから、私は知りたいのです:getFeatures(self)
メソッドだけでなく、それを含むクラス全体でプロシージャフローを停止する方法は?
ちなみに、コードを共有してくれたStephenHolidayに感謝します。