2016-04-23 22 views
0

コード:これが何をやろうとしていることは、出力はレビューのリストの中の単語の頻度(pはレビューのリストであること私NLTKコードはほとんど私がそれを必要とするが、何しないのはかなり

def add_lexical_features(fdist, feature_vector): 
for word, freq in fdist.items(): 
    fname = "unigram:{0}".format(word) 

    if selected_features == None or fname in selected_features: 
     feature_vector[fname] = 1 

    if selected_features == None or fname in selected_features: 
     feature_vector[fname] = float(freq)/fdist.N() 
     print(feature_vector) 

if __name__ == '__main__': 
file_name = "restaurant-training.data" 
p = process_reviews(file_name) 
for i in range(0, len(p)): 
    print(p[i]+ "\n") 
    uni_dist = nltk.FreqDist(p[0]) 
    feature_vector = {} 
    x = add_lexical_features(uni_dist, feature_vector) 

です、p [0]は文字列)。そして、これは動作します....それは手紙ではなく、私の言葉で行います。

私はまだNLTKに新しいので、これは明らかかもしれませんが、実際にはそれを得ることはできません。

{「ユニグラム:N」:0.0783132530120482}たとえば

が、これは現在のようなものの大規模なリストを出力

をこれは結構です、と私はそれが右の数(時間数だと思いますnは全文に表示されます)しかし、私はそれを手紙ではなく言葉で表したいと思います。

今は、バイグラムでもやりたいと思っています。一度言葉で作業すれば、ダブルワードは簡単かもしれませんが、私はそれを見ていません。

ありがとうございました。

答えて

1

nltk.FreqDistへの入力は、文字列だけでなく、という文字列の一覧であるにする必要があります。違いを参照してください:

>>> import nltk 
>>> uni_dist = nltk.FreqDist(['the', 'dog', 'went', 'to', 'the', 'park']) 
>>> uni_dist 
FreqDist({'the': 2, 'went': 1, 'park': 1, 'dog': 1, 'to': 1}) 
>>> uni_dist2 = nltk.FreqDist('the dog went to the park') 
>>> uni_dist2 
FreqDist({' ': 5, 't': 4, 'e': 3, 'h': 2, 'o': 2, 'a': 1, 'd': 1, 'g': 1, 'k': 1, 'n': 1, ...}) 

あなたはsplitを使用して、個々の単語のリストにあなたの文字列を変換することができます。

nltk.FreqDistをでp[0]ではなく電話したいと思うかもしれません。

+0

ビンゴ、ありがとう。分割してそれぞれ2つの単語のリストに分割できますか?私はnltkでそれを行う方法を知っているので、そうでなければ、問題はありません。 –

関連する問題