2016-04-23 38 views
0

代碼:我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是評論列表,p [0]是字符串)。這是有效的......除了它是通過信,而不是我的話。

我還是NLTK的新手,所以這可能很明顯,但我真的無法得到它。

例如,這個目前輸出的東西像一個大名單:

{「一元模型:N」:0.0783132530120482}

這是好的,我認爲這是正確的數量(時間數n出現在整個字母上),但我希望它是通過字,而不是通過字母。

現在,我也希望它通過bigrams來完成,一旦我可以通過單個單詞來實現它,使雙重單詞可能很容易,但是我不太明白它,所以一些指導他們會很好。

感謝。

回答

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個別單詞的列表。

附註:我想你可能想打p[i]nltk.FreqDist而不是p[0]

+0

賓果,謝謝。我可以將它分成兩個單詞,每個單詞都有分割的列表。我知道如何用nltk做到這一點,如果沒有,沒問題。 –

相關問題