Bài học này lấy các cặp tần số được tạo trong Counting Frequencies và xuất chúng thành một tệp HTML
Tại đây, bạn sẽ tìm hiểu cách xuất dữ liệu dưới dạng tệp HTML bằng Python. Bạn cũng sẽ tìm hiểu về định dạng chuỗi. Kết quả cuối cùng là một tệp HTML hiển thị các từ khóa được tìm thấy trong nguồn ban đầu theo thứ tự tần suất giảm dần, cùng với số lần mỗi từ khóa xuất hiện
Tệp cần thiết cho bài học này
Nếu bạn không có các tệp này từ bài học trước, bạn có thể tải xuống tệp lập trình-historian-6, một tệp zip từ bài học trước
Xây dựng trình bao bọc HTML
Trong bài học trước, bạn đã học cách nhúng thông báo “Xin chào thế giới. ” trong các thẻ HTML, ghi kết quả vào tệp và tự động mở tệp đó trong trình duyệt. Một chương trình đặt mã định dạng xung quanh một thứ gì đó để chương trình khác có thể sử dụng nó đôi khi được gọi là trình bao bọc. Những gì chúng ta sẽ làm bây giờ là phát triển một trình bao bọc HTML cho đầu ra của mã để tính toán tần số từ. Chúng tôi cũng sẽ thêm một số siêu dữ liệu động, hữu ích để bổ sung cho dữ liệu tần suất được thu thập trong Tần số đếm
Sự khác biệt giữa dữ liệu và siêu dữ liệu là rất quan trọng đối với khoa học thông tin. Siêu dữ liệu là dữ liệu về dữ liệu. Khái niệm này chắc hẳn đã rất quen thuộc với bạn, ngay cả khi bạn chưa từng nghe đến thuật ngữ này trước đây. Xem xét một cuốn sách truyền thống. Nếu chúng ta coi văn bản của cuốn sách là dữ liệu, thì có một số đặc điểm khác được liên kết với văn bản đó, nhưng có thể được in hoặc không rõ ràng trong cuốn sách. Tên tác phẩm, tác giả, nhà xuất bản, địa điểm và ngày xuất bản là siêu dữ liệu thường được in trong tác phẩm. Nơi và ngày viết, tên của người chỉnh sửa bản sao, dữ liệu biên mục của Thư viện Quốc hội và tên của phông chữ được sử dụng để sắp chữ cuốn sách đôi khi được in trong đó. Người đã mua một bản sao cụ thể có thể hoặc không thể viết tên của họ trong cuốn sách. Nếu sách thuộc bộ sưu tập của thư viện, thư viện đó sẽ giữ siêu dữ liệu bổ sung, chỉ một số siêu dữ liệu sẽ được đính kèm vật lý vào sách. Ví dụ, hồ sơ mượn sách thường được lưu giữ trong một số loại cơ sở dữ liệu và được liên kết với cuốn sách bằng một mã định danh duy nhất. Các thư viện, kho lưu trữ và bảo tàng đều có các hệ thống phức tạp để tạo và theo dõi siêu dữ liệu
Khi bạn đang làm việc với dữ liệu kỹ thuật số, bạn nên kết hợp siêu dữ liệu vào các tệp của riêng mình bất cứ khi nào có thể. Bây giờ chúng ta sẽ phát triển một vài chiến lược cơ bản để làm cho các tệp dữ liệu của chúng ta tự ghi lại. Trong trình bao bọc của chúng tôi, chúng tôi muốn bao gồm thông tin động về tệp, chẳng hạn như thời gian và ngày tệp được tạo, cũng như tiêu đề HTML có liên quan đến tệp. Trong trường hợp này, chúng ta có thể tự đặt tên cho nó, nhưng khi chúng ta bắt đầu làm việc với nhiều tệp, việc tự động tạo các tệp tự ghi sẽ tiết kiệm rất nhiều thời gian, vì vậy chúng ta sẽ thực hành ngay bây giờ. Và để làm được điều đó, chúng ta sẽ phải học cách tận dụng một vài tùy chọn định dạng chuỗi mạnh mẽ hơn
Định dạng chuỗi Python
Python bao gồm một toán tử định dạng đặc biệt cho phép bạn chèn một chuỗi vào một chuỗi khác. Nó được biểu thị bằng dấu phần trăm theo sau là chữ “s”. Mở trình bao Python và thử các ví dụ sau
frame = 'This fruit is a %s'
print[frame]
-> This fruit is a %s
print[frame % 'banana']
-> This fruit is a banana
print[frame % 'pear']
-> This fruit is a pear
Ngoài ra còn có một biểu mẫu cho phép bạn nội suy một danh sách các chuỗi thành một chuỗi khác
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
Trong những ví dụ này, một
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
7 trong một chuỗi cho biết rằng một chuỗi khác sẽ được nhúng vào thời điểm đó. Có nhiều mã định dạng chuỗi khác, hầu hết các mã này cho phép bạn nhúng các số vào chuỗi ở nhiều định dạng khác nhau, chẳng hạn như
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
8 cho số nguyên [ví dụ:. 1, 2, 3],
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
9 cho số thập phân có dấu phẩy động [ví dụ:. 3. 023, 4. 59, 1. 0], v.v. Sử dụng phương pháp này, chúng tôi có thể nhập thông tin duy nhất cho tệpTệp dữ liệu tự ghi
Hãy gộp một số mã mà chúng ta đã viết vào các hàm. Một trong số này sẽ lấy một URL và trả về một chuỗi văn bản chữ thường từ trang web. Sao chép mã này vào mô-đun
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
0# Given a URL, return string of lowercase text from page.
def webPageToText[url]:
import urllib.request, urllib.error, urllib.parse
response = urllib.request.urlopen[url]
html = response.read[].decode['UTF-8']
text = stripTags[html].lower[]
return text
Chúng tôi cũng sẽ muốn một chức năng nhận một chuỗi thuộc bất kỳ loại nào và biến nó thành phần thân của tệp HTML được mở tự động trong Firefox. Hàm này phải bao gồm một số siêu dữ liệu cơ bản, như ngày giờ tạo và tên của chương trình đã tạo hàm này. Nghiên cứu đoạn mã sau một cách cẩn thận, sau đó sao chép nó vào mô-đun
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
0Hướng dẫn Mac
Nếu bạn đang sử dụng máy Mac, hãy đảm bảo rằng bạn đã bao gồm đường dẫn tệp thích hợp trong biến tên tệp ở dòng cuối cùng thứ 2 để phản ánh nơi bạn đang lưu tệp của mình
# Given name of calling program, a url and a string to wrap,
# output string in html body with basic metadata and open in Firefox tab.
def wrapStringInHTMLMac[program, url, body]:
import datetime
from webbrowser import open_new_tab
now = datetime.datetime.today[].strftime["%Y%m%d-%H%M%S"]
filename = program + '.html'
f = open[filename,'w']
wrapper = """
%s output - %s
URL: %s
%s
"""
whole = wrapper % [program, now, url, url, body]
f.write[whole]
f.close[]
#Change the filepath variable below to match the location of your directory
filename = 'file:///Users/username/Desktop/programming-historian/' + filename
open_new_tab[filename]
hướng dẫn cửa sổ
# Given name of calling program, a url and a string to wrap,
# output string in html body with basic metadata
# and open in Firefox tab.
def wrapStringInHTMLWindows[program, url, body]:
import datetime
from webbrowser import open_new_tab
now = datetime.datetime.today[].strftime["%Y%m%d-%H%M%S"]
filename = program + '.html'
f = open[filename,'w']
wrapper = """
%s output - %s
URL: %s
%s
"""
whole = wrapper % [program, now, url, url, body]
f.write[whole]
f.close[]
open_new_tab[filename]
***
Lưu ý rằng hàm này sử dụng toán tử định dạng chuỗi mà chúng ta vừa học. Nếu bạn vẫn gặp sự cố với ý tưởng này, hãy xem tệp HTML đã mở trong tab Firefox mới của bạn và bạn sẽ thấy nó hoạt động như thế nào. Nếu bạn vẫn gặp khó khăn, hãy xem
URL: //www.oldbaileyonline.org/browse.jsp?id=t17800628-33&div=t17800628-33
trong tệp HTML và theo dõi lại cách chương trình biết đặt giá trị URL ở đó
Hàm này cũng gọi thư viện Python
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
2 để xác định ngày giờ hiện tại. Giống như toán tử định dạng chuỗi
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
7, thư viện này sử dụng
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
4 để thay thế cho các giá trị. Trong trường hợp này,
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
5 tương ứng là năm, tháng, ngày, giờ, phút và giây. Không giống như
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
7, chương trình sẽ xác định giá trị của các biến này cho bạn bằng cách sử dụng đồng hồ trên máy tính của bạn. Điều quan trọng là phải nhận ra sự khác biệt nàySiêu dữ liệu ngày này, cùng với tên của chương trình đã gọi hàm, được lưu trữ trong thẻ tiêu đề HTML. Tệp HTML được tạo có cùng tên với chương trình Python tạo ra nó, nhưng có phần mở rộng là
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
7 thay vì phần mở rộng là
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
8Để tất cả chúng cùng nhau
Bây giờ chúng ta có thể tạo một phiên bản khác của chương trình để tính tần số. Thay vì gửi đầu ra của nó tới tệp văn bản hoặc cửa sổ đầu ra, nó sẽ gửi đầu ra tới tệp HTML được mở trong tab Firefox mới. Từ đó, đầu ra của chương trình có thể được thêm dễ dàng dưới dạng mục nhập thư mục vào Zotero. Nhập hoặc sao chép đoạn mã sau vào trình soạn thảo văn bản của bạn, lưu nó dưới dạng
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
9 và thực thi nó để xác nhận rằng nó hoạt động như mong đợiSử dụng một trong hai obo. wrapStringInHTMLMac[] hoặc obo. wrapStringInHTMLWindows[] phù hợp với hệ thống của bạn
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
4Lưu ý rằng chúng tôi đã xen kẽ các cặp tần số từ của mình với thẻ ngắt HTML
# Given a URL, return string of lowercase text from page.
def webPageToText[url]:
import urllib.request, urllib.error, urllib.parse
response = urllib.request.urlopen[url]
html = response.read[].decode['UTF-8']
text = stripTags[html].lower[]
return text
0, hoạt động như một dòng mới. Nếu mọi việc suôn sẻ, bạn sẽ thấy cùng một tần số từ mà bạn đã tính toán trong phần trước, lần này là trong cửa sổ trình duyệt của bạnBài đọc được đề xuất
- Lutz, Học Python
- Đọc lại và xem xét Chs. 1-17
Đồng bộ hóa mã
Để theo dõi các bài học trong tương lai, điều quan trọng là bạn phải có các tệp và chương trình phù hợp trong thư mục “lập trình-lịch sử” của mình. Ở cuối mỗi chương, bạn có thể tải xuống tệp zip “lập trình-lịch sử” để đảm bảo bạn có mã chính xác. Nếu bạn đang theo dõi phiên bản Mac / Linux, bạn có thể phải mở tệp
frame2 = 'These are %s, those are %s'
print[frame2]
-> These are %s, those are %s
print[frame2 % ['bananas', 'pears']]
-> These are bananas, those are pears
0 và thay đổi “tệp. ///Users/username/Desktop/programming-historian/” đến đường dẫn đến thư mục trên máy tính của bạn