ユーザーが入力した特定のテキストの作成者がmelville、shakespeare、またはどちらでもないかどうかを判断する必要があります。私は、メリービルとシェイクスピアの3つのテキストの上位50語とその出現率を見つけ出し、それを2つの別々のリストに変換することから始めました。私は未知のテキストで同じことをしました。私は未知のテキストのリストをmelvilleとシェイクスピアの上位50語のリストと出現率と比較したい。未知のテキストの単語がメルヴィルとシェイクスピアの両方にある場合、メルヴィルとシェイクスピアの間の単語の出現率を比較したいと思います。これまで最も高い出現率を持つものは、テキストから推定されます。より正確な決定をするには、50語すべてを調べることが望ましいでしょう。これは、これまでの私のコードです:特定のテキストの作成者を決定する
def identifyAuthor(textFile):
counts = {}
A = []
B = []
C = []
B = melville()
C = shakespeare()
for words in [textFile]:
text = open(words, 'r').read()
test = text.lower()
for ch in '!"$%&()*+,-./:;<=>[email protected][\\]^_`{|}~':
text = text.replace(ch, ' ')
words = text.split()
for w in words:
counts[w] = counts.get(w, 0) + 1
items = list(counts.items())
items.sort()
items.sort(key=byFreq, reverse = True)
for i in range(50):
word, count = items[i]
count = count/float(len(counts))
A += [[word, count]]
for i in range(50):
part1 = filter(lambda x: i in x, A)
part2 = reduce(lambda x, y: x + y, part1)
return part2[1]
私が午前問題は、私はエラーを取得しています:
TypeError: reduce() of empty sequence with no initial value
私は、フィルタ変数を検索することができないためであると仮定して検索していています'the'のような実際の文字列?だから私は変数を使ってどのように動作させるのか、どうしたら代替ができないのか疑問に思っていましたか?どんな助けでも大歓迎です。
「part1」変数の表現を教えてもらえますか? 'Bool'の配列なので、' reduce'の 'lambda'関数に渡すことはできません。 –
'i'は0から49までの整数ですが、それぞれの' count'は0から1までの比率を見ることができます。 –
@CarlesMitjans part1は私がどこにいるかを返すと仮定していますが、それは変数であり、 'the'のような単語ではないのでできないと思います。私がiを 'the'に置き換えると、私は欲しいものを返す[['the'、0.6925910972039971]]。 –