Hướng dẫn how do you count the frequency of a word in a dictionary python? - làm thế nào để bạn đếm tần số của một từ trong một con trăn từ điển?

Mặc dù sử dụng

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
2 từ thư viện
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
3 theo đề xuất của @michael là một cách tiếp cận tốt hơn, tôi đang thêm câu trả lời này chỉ để cải thiện mã của bạn. (Tôi tin rằng đây sẽ là một câu trả lời tốt cho một người học Python mới.)

Từ nhận xét trong mã của bạn, có vẻ như bạn muốn cải thiện mã của mình. Và tôi nghĩ rằng bạn có thể đọc nội dung tệp bằng các từ (trong khi thường tôi tránh sử dụng hàm

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
4 và sử dụng loại mã
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
5).

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
6 là một chuỗi, trong vòng lặp,
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
7,
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
8 biến vòng lặp không phải là một từ mà là một char. Bạn đang lặp lại các ký tự trong chuỗi thay vì lặp lại các từ trong chuỗi
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
6. Để hiểu điều này, hãy chú ý đoạn mã sau:

>>> for i in "Hi, h r u?":
...  print i
... 
H
i
,
 
h
 
r
 
u
?
>>> 

Bởi vì lặp lại qua chuỗi đã cho bởi chars thay vì từ bằng từ không phải là những gì bạn muốn đạt được, để lặp lại các từ bằng các từ bạn nên sử dụng phương thức/hàm

>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
0 từ lớp chuỗi trong python. Phương thức
>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
1 Trả về một danh sách tất cả các từ trong chuỗi, sử dụng str làm dấu phân cách (chia trên tất cả khoảng trắng nếu không xác định), tùy chọn giới hạn số lượng phân tách thành num.
>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
1 method returns a list of all the words in the string, using str as the separator (splits on all whitespace if left unspecified), optionally limiting the number of splits to num.

Lưu ý các ví dụ mã bên dưới:

Split:

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']

Vòng lặp với Split:

>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?

Và nó trông giống như một cái gì đó bạn cần. Ngoại trừ Word

>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
2 vì
>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
3, theo mặc định, phân tách theo khoảng trắng để
>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
2 được giữ dưới dạng một chuỗi duy nhất (và rõ ràng) bạn không muốn điều đó.

Để đếm tần số của các từ trong tệp, một giải pháp tốt là sử dụng regex. Nhưng trước tiên, để giữ câu trả lời đơn giản, tôi sẽ sử dụng phương pháp

>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
5. Phương thức
>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
6 trả về một bản sao của chuỗi trong đó các lần xuất hiện cũ đã được thay thế bằng mới, tùy chọn hạn chế số lượng thay thế thành tối đa.

Bây giờ hãy kiểm tra mã ví dụ dưới đây để xem những gì tôi đã đề xuất:

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split

loop:

>>> for word in "Hi, how are you?".replace(',', ' ').split():
...  print word
... 
Hi
how
are
you?

Bây giờ, làm thế nào để đếm tần số:how to count frequency:

Một cách là sử dụng

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
2 như @Michael đã đề xuất, nhưng để sử dụng phương pháp của bạn, trong đó bạn muốn bắt đầu từ trống. Làm một cái gì đó như mẫu mã này dưới đây:

words = f.read()
wordfreq = {}
for word in .replace(', ',' ').split():
    wordfreq[word] = wordfreq.setdefault(word, 0) + 1
    #                ^^ add 1 to 0 or old value from dict 

Tôi đang làm gì vậy? Bởi vì ban đầu

>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
8 trống, bạn không thể gán nó cho
>>> for i in "Hi, how are you?".split():
...  print i
... 
Hi,
how
are
you?
9 lần đầu tiên (nó sẽ tăng lỗi ngoại lệ chính). Vì vậy, tôi đã sử dụng phương pháp Dict
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
0.

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
1 tương tự như
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
2, nhưng sẽ đặt
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
3 nếu khóa chưa có trong Dict. Vì vậy, lần đầu tiên khi một từ mới đến, tôi đã đặt nó với
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
4 trong Dict bằng cách sử dụng
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
0 sau đó thêm
>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
6 và gán cho cùng một dict.

Tôi đã viết một mã tương đương bằng cách sử dụng với Open thay vì đơn lẻ.

with open('~/Desktop/file') as f:
    words = f.read()
    wordfreq = {}
    for word in words.replace(',', ' ').split():
        wordfreq[word] = wordfreq.setdefault(word, 0) + 1
print wordfreq

Điều đó chạy như thế này:

$ cat file  # file is 
this is the textfile, and it is used to take words and count
$ python work.py  # indented manually 
{'and': 2, 'count': 1, 'used': 1, 'this': 1, 'is': 2, 
 'it': 1, 'to': 1, 'take': 1, 'words': 1, 
 'the': 1, 'textfile': 1}

Sử dụng

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
8

Chỉ cần thay đổi vòng lặp cho vòng lặp:

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?'] # it has , with Hi
>>> "Hi, how are you?".replace(',', ' ').split()
['Hi', 'how', 'are', 'you?'] # , replaced by space then split
9, sẽ tạo ra đầu ra chính xác.

Chỉnh sửa: Tốt hơn là tìm tất cả các ký tự chữ và số vì bạn có thể có nhiều hơn một ký hiệu dấu chấm câu.

>>> re.findall(r'[\w]+', words) # manually indent output  
['this', 'is', 'the', 'textfile', 'and', 
  'it', 'is', 'used', 'to', 'take', 'words', 'and', 'count']

Sử dụng cho vòng lặp như:

>>> for word in "Hi, how are you?".replace(',', ' ').split():
...  print word
... 
Hi
how
are
you?
0

Làm thế nào tôi sẽ viết mã mà không cần sử dụng

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
4:

Tệp là:

$ cat file
This is the text file, and it is used to take words and count. And multiple
Lines can be present in this file.
It is also possible that Same words repeated in with capital letters.

Mã là:

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
0

Đã sử dụng

>>> for word in "Hi, how are you?".replace(',', ' ').split():
...  print word
... 
Hi
how
are
you?
2 để chuyển đổi chữ cái trên sang chữ cái dưới.

output:

>>> "Hi, how are you?".split()
['Hi,', 'how', 'are', 'you?']
1