Hướng dẫn python count word in list - số từ trăn trong danh sách

Bạn có thể dùng

from collections import Counter

Nó hỗ trợ Python 2.7 , Đọc thêm thông tin tại đây

1.

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]

Sử dụng dict

>>>d={1:'one', 2:'one', 3:'two'}
>>>c = Counter(d.values())
[('one', 2), ('two', 1)]

Nhưng, bạn phải đọc tập tin trước và chuyển đổi thành Dict.

2. Đó là ví dụ về tài liệu Python, sử dụng RE và truy cập

# Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]

Nội dung

  • Mục tiêu bài học
    • Các tệp cần thiết cho bài học này
  • Tần số
  • Từ điển Python
  • Các cặp tần số từ
  • Loại bỏ các từ dừng
  • Để tất cả chúng cùng nhau
  • Bài đọc đề xuất
    • Đồng bộ hóa mã

Mục tiêu bài học

Các tệp cần thiết cho bài học này

Các tệp cần thiết cho bài học này

  • >>>c = Counter('abracadabra')
    >>>c.most_common(3)
    [('a', 5), ('r', 2), ('b', 2)]
    
    7

Tần số

Từ điển Python

# count-list-items-1.py

wordstring = 'it was the best of times it was the worst of times '
wordstring += 'it was the age of wisdom it was the age of foolishness'

wordlist = wordstring.split()

wordfreq = []
for w in wordlist:
    wordfreq.append(wordlist.count(w))

print("String\n" + wordstring +"\n")
print("List\n" + str(wordlist) + "\n")
print("Frequencies\n" + str(wordfreq) + "\n")
print("Pairs\n" + str(list(zip(wordlist, wordfreq))))

Danh sách của bạn bây giờ đủ sạch để bạn có thể bắt đầu phân tích nội dung của nó theo những cách có ý nghĩa. Đếm tần số của các từ cụ thể trong danh sách có thể cung cấp dữ liệu minh họa. Python có một cách dễ dàng để đếm tần số, nhưng nó đòi hỏi phải sử dụng một loại biến mới: từ điển. Trước khi bạn bắt đầu làm việc với một từ điển, hãy xem xét các quy trình được sử dụng để tính toán tần số trong danh sách.

Bạn nên nhận được một cái gì đó như thế này:

String
it was the best of times it was the worst of times it was the age of wisdom it was the age of foolishness

List
['it', 'was', 'the', 'best', 'of', 'times', 'it', 'was',
'the', 'worst', 'of', 'times', 'it', 'was', 'the', 'age',
'of', 'wisdom', 'it', 'was', 'the', 'age', 'of',
'foolishness']

Frequencies
[4, 4, 4, 1, 4, 2, 4, 4, 4, 1, 4, 2, 4, 4, 4, 2, 4, 1, 4,
4, 4, 2, 4, 1]

Pairs
[('it', 4), ('was', 4), ('the', 4), ('best', 1), ('of', 4),
('times', 2), ('it', 4), ('was', 4), ('the', 4),
('worst', 1), ('of', 4), ('times', 2), ('it', 4),
('was', 4), ('the', 4), ('age', 2), ('of', 4),
('wisdom', 1), ('it', 4), ('was', 4), ('the', 4),
('age', 2), ('of', 4), ('foolishness', 1)]

Nó sẽ trả tiền để nghiên cứu mã trên cho đến khi bạn hiểu nó trước khi tiếp tục.

Python cũng bao gồm một công cụ rất thuận tiện gọi là khả năng hiểu danh sách, có thể được sử dụng để làm điều tương tự như vòng lặp

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
8 kinh tế hơn.

# count-list-items-1.py

wordstring = 'it was the best of times it was the worst of times '
wordstring += 'it was the age of wisdom it was the age of foolishness'
wordlist = wordstring.split()

wordfreq = [wordlist.count(w) for w in wordlist] # a list comprehension

print("String\n" + wordstring +"\n")
print("List\n" + str(wordlist) + "\n")
print("Frequencies\n" + str(wordfreq) + "\n")
print("Pairs\n" + str(list(zip(wordlist, wordfreq))))

Nếu bạn nghiên cứu cẩn thận danh sách này một cách cẩn thận, bạn sẽ phát hiện ra rằng nó thực hiện chính xác điều tương tự như vòng lặp

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
8 trong ví dụ trước, nhưng theo cách cô đọng. Một trong hai phương pháp sẽ hoạt động tốt, vì vậy hãy sử dụng phiên bản mà bạn cảm thấy thoải mái nhất.

Nói chung là khôn ngoan khi sử dụng mã mà bạn hiểu thay vì mã chạy nhanh nhất.

Tại thời điểm này, chúng tôi có một danh sách các cặp, trong đó mỗi cặp chứa một từ và tần số của nó. Danh sách này là một chút dư thừa. Nếu ’các trò chơi xảy ra 500 lần, thì danh sách này chứa năm trăm bản sao của cặp (‘ The, 500). Danh sách cũng được đặt hàng bởi các từ trong văn bản gốc, thay vì liệt kê các từ theo thứ tự từ hầu hết đến ít nhất. Chúng ta có thể giải quyết cả hai vấn đề bằng cách chuyển đổi nó thành một từ điển, sau đó in ra từ điển theo thứ tự từ nhiều nhất sang mục thường xảy ra ít nhất.

Từ điển Python

Cả hai chuỗi và danh sách đều được đặt hàng tuần tự, điều đó có nghĩa là bạn có thể truy cập nội dung của chúng bằng cách sử dụng một chỉ mục, một số bắt đầu từ 0. Nếu bạn có một danh sách chứa chuỗi, bạn có thể sử dụng một cặp chỉ mục để truy cập đầu tiên một chuỗi cụ thể trong Danh sách, và sau đó là một ký tự cụ thể trong chuỗi đó. Nghiên cứu các ví dụ dưới đây.


s = 'hello world'
print(s[0])
-> h

print(s[1])
-> e

m = ['hello', 'world']
print(m[0])
-> hello

print(m[1])
-> world

print(m[0][1])
-> e

print(m[1][0])
-> w

Để theo dõi các tần số, chúng tôi sẽ sử dụng một loại đối tượng Python khác, một từ điển. Từ điển là một bộ sưu tập các đối tượng không có thứ tự. Điều đó có nghĩa là bạn có thể sử dụng một chỉ mục để truy xuất các yếu tố từ nó. Tuy nhiên, bạn có thể tìm kiếm chúng bằng cách sử dụng một khóa (do đó có tên từ điển từ điển). Nghiên cứu các ví dụ sau đây.


d = {'world': 1, 'hello': 0}
print(d['hello'])
-> 0

print(d['world'])
-> 1

print(d.keys())
-> ['world', 'hello']

Từ điển có thể hơi khó hiểu với một lập trình viên mới. Cố gắng nghĩ về nó như một từ điển ngôn ngữ. Nếu bạn không biết (hoặc nhớ) chính xác cách thức truyền thống khác với sự phản đối của bạn, bạn có thể tìm kiếm hai thuật ngữ trong từ điển tiếng Anh Oxford. Nguyên tắc tương tự được áp dụng khi bạn

>>>d={1:'one', 2:'one', 3:'two'}
>>>c = Counter(d.values())
[('one', 2), ('two', 1)]
4 ngoại trừ, thay vì in một định nghĩa văn học, nó in giá trị được liên kết với từ khóa ‘xin chào, như được định nghĩa bởi bạn khi bạn tạo từ điển có tên d. Trong trường hợp này, giá trị đó là 0 0.

Lưu ý rằng bạn sử dụng niềng răng xoăn để xác định từ điển, nhưng dấu ngoặc vuông để truy cập mọi thứ trong đó. Hoạt động

>>>d={1:'one', 2:'one', 3:'two'}
>>>c = Counter(d.values())
[('one', 2), ('two', 1)]
5 trả về một danh sách các khóa được xác định trong từ điển.

Các cặp tần số từ

Dựa trên những gì chúng ta có cho đến nay, chúng ta muốn một hàm có thể chuyển đổi danh sách các từ thành một từ điển của các cặp tần số từ. Lệnh mới duy nhất mà chúng ta sẽ cần là

>>>d={1:'one', 2:'one', 3:'two'}
>>>c = Counter(d.values())
[('one', 2), ('two', 1)]
6, tạo ra một từ điển từ một danh sách các cặp. Sao chép các phần sau và thêm nó vào mô -đun
>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
7.

# Given a list of words, return a dictionary of
# word-frequency pairs.

def wordListToFreqDict(wordlist):
    wordfreq = [wordlist.count(p) for p in wordlist]
    return dict(list(zip(wordlist,wordfreq)))

Chúng tôi cũng sẽ muốn một hàm có thể sắp xếp một từ điển của các cặp tần số từ bằng tần số giảm dần. Sao chép cái này và thêm nó vào mô -đun

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
7, quá.

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
0

Bây giờ chúng ta có thể viết một chương trình lấy URL và trả về các cặp tần số từ cho trang web, được sắp xếp theo thứ tự tần số giảm dần. Sao chép chương trình sau vào Chỉnh sửa Komodo, lưu nó dưới dạng

>>>d={1:'one', 2:'one', 3:'two'}
>>>c = Counter(d.values())
[('one', 2), ('two', 1)]
9 và thực hiện nó. Nghiên cứu chương trình và đầu ra của nó một cách cẩn thận trước khi tiếp tục.

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
1

Loại bỏ các từ dừng

Khi chúng ta nhìn vào đầu ra của chương trình

>>>d={1:'one', 2:'one', 3:'two'}
>>>c = Counter(d.values())
[('one', 2), ('two', 1)]
9 của chúng ta, chúng ta thấy rằng rất nhiều từ thường xuyên nhất trong văn bản là các từ có chức năng như là The The The, một trong số đó

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
2

Những từ này thường là phổ biến nhất trong bất kỳ văn bản tiếng Anh nào, vì vậy họ không nói với chúng tôi nhiều điều đặc biệt về thử nghiệm Bowsey. Nói chung, chúng tôi quan tâm nhiều hơn đến việc tìm kiếm các từ sẽ giúp chúng tôi phân biệt văn bản này với các văn bản về các chủ đề khác nhau. Vì vậy, chúng tôi sẽ lọc ra các từ chức năng phổ biến. Những từ bị bỏ qua như thế này được gọi là từ dừng. Chúng tôi sẽ sử dụng danh sách sau đây, được chuyển thể từ một nhà khoa học máy tính được đăng trực tuyến tại Glasgow. Sao chép nó và đặt nó ở đầu thư viện

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
7 mà bạn đang xây dựng.

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
3

Bây giờ việc loại bỏ các từ dừng trong một danh sách cũng dễ dàng như sử dụng một danh sách hiểu một danh sách khác. Thêm chức năng này vào mô -đun

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
7, quá.

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
4

Để tất cả chúng cùng nhau

Bây giờ chúng tôi có mọi thứ chúng tôi cần để xác định tần số từ cho các trang web. Sao chép phần sau vào Chỉnh sửa Komodo, lưu nó dưới dạng

# Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
3 và thực hiện nó.

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
5

Nếu mọi việc suôn sẻ, đầu ra của bạn sẽ trông như thế này:

>>>c = Counter('abracadabra')
>>>c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
6

Bài đọc đề xuất

Lutz, học Python

  • Ch. 9: Tuples, Files và mọi thứ khác
  • Ch. 11: Bài tập, biểu thức và in
  • Ch. 12: Nếu các bài kiểm tra
  • Ch. 13: Trong khi và cho các vòng lặp

Pilgrim, lặn vào Python

  • Ch. 7: Biểu thức thông thường

Đồng bộ hóa mã

Để làm theo cùng với các bài học trong tương lai, điều quan trọng là bạn có các tệp và chương trình phù hợp trong thư mục lập trình của bạn. Khi kết thúc mỗi bài học trong loạt bài này, bạn có thể tải xuống tệp ZIP lập trình-Historian Hitming-Historian để đảm bảo bạn có mã chính xác.

  • Lập trình-Historian-5 (SYNC ZIP)

Làm thế nào để bạn đếm các yếu tố nhất định trong danh sách Python?

Phương thức đếm () trả về số lần phần tử được chỉ định xuất hiện trong danh sách. returns the number of times the specified element appears in the list.

Làm thế nào để bạn đếm các từ trong một chuỗi?

Một cách đơn giản để đếm các từ trong một chuỗi trong Java là sử dụng lớp StringTokenizer: AsserTequals (3, New StringTokenizer ("Ba chuột mù"). CountTokens ());assertequals (4, StringTokenizer mới ("Xem \ Thow \ Tthey \ Trun").use the StringTokenizer class: assertEquals(3, new StringTokenizer("three blind mice"). countTokens()); assertEquals(4, new StringTokenizer("see\thow\tthey\trun").

Làm thế nào để bạn đếm các sự xuất hiện của mỗi từ trong một chuỗi trong Python?

Phương thức đếm () trả về số lần xuất hiện của một chuỗi con trong chuỗi đã cho. returns the number of occurrences of a substring in the given string.