2014-10-16 48 views
14

Tôi đang làm theo hướng dẫn cho bài tập về nhà và tôi phải tra cứu 200 từ thường dùng nhất trong tệp văn bản.Lỗi python NLTK: đối tượng "TypeError: 'dict_keys' không thể ghi"

Dưới đây là phần cuối cùng của mã:

fdist1 = FreqDist(NSmyText) 
vocab=fdist1.keys() 
vocab[:200] 

Nhưng khi tôi nhấn enter sau khi dòng vocab 200, nó sẽ trả về:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: 'dict_keys' object is not subscriptable 

Bất kỳ đề xuất về cách sửa lỗi này để nó có thể trả lại chính xác câu trả lời? Bất kỳ trợ giúp nào được đánh giá cao :) Cảm ơn

+0

Dấu vết ngăn xếp không khớp với mã bạn đã hiển thị. Bạn có thể sao chép dán mã * chính xác * và thông báo lỗi không? – karthikr

+0

Có cách nào để sao chép và dán văn bản từ/vào thiết bị đầu cuối không? Cho đến nay tôi đã không thể tìm ra nó. – user3760644

Trả lời

22

Có vẻ như bạn đang sử dụng Python 3. Trong Python 3 dict.keys() trả về một đối tượng có thể lặp lại nhưng không thể lập chỉ mục. Giải pháp đơn giản nhất (nhưng không quá hiệu quả) sẽ là:

vocab = list(fdist1.keys()) 
+0

Bạn cũng có thể đã viết 'vocab = list (fdist1)' –

1

Để in thường xuyên nhất được sử dụng 200 từ sử dụng: fdist1.most_common (200) Dòng trên mã sẽ trả lại 200 thường xuyên nhất được sử dụng các từ như cặp khóa-tần số.

0

Nếu bạn sử dụng python 3 thử:

fdist1.most_common(200) 

thay vào đó, để có được 200 từ thường gặp nhất.

3

Tôi đang sử dụng python 3.5 và tôi gặp cùng sự cố với số TypeError.

Sử dụng vocab = list(fdist1.keys()) không cho tôi 50 từ được sử dụng thường xuyên nhất.
Nhưng fdist1.most_common(50) thì có.

Hơn nữa, nếu bạn chỉ muốn hiển thị những 50 từ đầu không phải với tần số của họ, bạn có thể thử:

[word for (word, freq) in fdist1.most_common(50)]

+0

imho đây là một phản hồi hữu ích hơn nhiều vì nó cung cấp một ví dụ về hàm most_common() mà OP yêu cầu. – GDB

0

fdist1 = FreqDist(NSmyText)

vocab=fdist1.keys()

Mã này được sử dụng trong python2 .7. Vì vậy, bạn nên thực hiện một số thay đổi. dic.keys() trả về một lần lặp. Vì vậy, sử dụng:

list(fdist1.keys())

Các vấn đề liên quan