Phân tích dữ liệu là một thuật ngữ mà bạn thường gặp khi làm việc với khối lượng dữ liệu lớn, đặc biệt là đối với những người thu thập dữ liệu từ web cũng như các kỹ sư phần mềm. Tuy nhiên, phân tích dữ liệu là một chủ đề cần được thảo luận sâu hơn. Ví dụ, phân tích dữ liệu chính xác là gì và như thế nào
Phân tích dữ liệu là một thuật ngữ mà bạn thường gặp khi làm việc với khối lượng dữ liệu lớn, đặc biệt là đối với những người thu thập dữ liệu từ web cũng như các kỹ sư phần mềm. Tuy nhiên, phân tích dữ liệu là một chủ đề cần được thảo luận sâu hơn. Ví dụ, phân tích dữ liệu chính xác là gì và bạn triển khai nó trong thế giới thực như thế nào.
Bài viết này sẽ trả lời tất cả các câu hỏi trên và cung cấp tổng quan về các thuật ngữ quan trọng liên quan đến phân tích dữ liệu.
Khi bạn trích xuất một lượng lớn dữ liệu từ web scraping, chúng sẽ ở định dạng HTML. Thật không may, đây không phải là định dạng có thể đọc được đối với bất kỳ người không phải là lập trình viên nào. Vì vậy, bạn phải làm thêm công việc trên dữ liệu để chuyển chúng sang định dạng có thể đọc được của con người, giúp các nhà khoa học dữ liệu phân tích thuận tiện hơn. Chính trình phân tích cú pháp thực hiện hầu hết công việc nặng nhọc này trong quá trình phân tích cú pháp.
Một Parser sẽ chuyển đổi dữ liệu ở một định dạng sang dữ liệu ở một dạng khác. Ví dụ, parser sẽ chuyển đổi dữ liệu HTML mà bạn thu được thông qua quá trình thu thập dữ liệu sang JSON, CSV và thậm chí là bảng để dữ liệu ở định dạng mà bạn có thể đọc và phân tích. Cũng cần đề cập rằng parser không bị ràng buộc với bất kỳ định dạng dữ liệu cụ thể nào.
Trình phân tích cú pháp không phân tích mọi chuỗi HTML vì trình phân tích cú pháp tốt sẽ phân biệt dữ liệu cần thiết trong thẻ HTML với phần còn lại.
Như đã đề cập ở phần trước, vì trình phân tích cú pháp không bị ràng buộc với một công nghệ cụ thể nào nên về bản chất, nó cực kỳ linh hoạt. Do đó, nhiều công nghệ khác nhau sử dụng chúng:
Ngôn ngữ lập trình - đây là những ngôn ngữ không cần trình biên dịch để thực thi vì chúng chạy dựa trên một loạt lệnh trong một tệp. Ví dụ điển hình là PHP, Python và JavaScript.
Java và các ngôn ngữ lập trình khác - Các ngôn ngữ lập trình cấp cao như Java sử dụng trình biên dịch để chuyển đổi mã nguồn sang ngôn ngữ Assembly. Trình phân tích cú pháp là một thành phần quan trọng của các trình biên dịch này, tạo ra một biểu diễn nội bộ của mã nguồn.
HTML và XML - trong trường hợp của HTML, trình phân tích cú pháp trích xuất văn bản trong các thẻ HTML như tiêu đề, tiêu đề phụ, đoạn văn, v.v. Trong khi đó, trình phân tích cú pháp XML là một thư viện hỗ trợ việc đọc và thao tác các tài liệu XML.
Ngôn ngữ SQL và cơ sở dữ liệu - Ví dụ, trình phân tích cú pháp SQL sẽ phân tích cú pháp truy vấn SQL và tạo các trường được xác định trong truy vấn SQL.
Ngôn ngữ mô hình hóa - trình phân tích cú pháp trong ngôn ngữ mô hình hóa cho phép các nhà phát triển, nhà phân tích và các bên liên quan hiểu được cấu trúc của hệ thống đang được mô hình hóa.
Ngôn ngữ dữ liệu tương tác - được sử dụng trong quá trình xử lý tương tác khối lượng lớn dữ liệu, bao gồm khoa học vũ trụ và vật lý mặt trời.
Lý do chính cho nhu cầu phân tích cú pháp là các thực thể khác nhau cần dữ liệu ở các định dạng khác nhau. Do đó, phân tích cú pháp cho phép chuyển đổi dữ liệu để con người hoặc, trong một số trường hợp, phần mềm có thể hiểu được. Một ví dụ nổi bật về điều sau là các chương trình máy tính. Đầu tiên, con người viết chúng ở định dạng mà họ có thể hiểu được bằng ngôn ngữ cấp cao tương tự như ngôn ngữ tự nhiên như tiếng Anh mà chúng ta sử dụng hàng ngày. Sau đó, máy tính dịch chúng thành dạng mã cấp máy mà máy tính có thể hiểu được.
Phân tích cú pháp cũng cần thiết trong những tình huống cần giao tiếp giữa hai phần mềm khác nhau—ví dụ, tuần tự hóa và hủy tuần tự hóa một lớp.
Cho đến thời điểm này, bạn đã biết các khái niệm cơ bản về phân tích dữ liệu. Bây giờ là lúc khám phá các khái niệm quan trọng liên quan đến phân tích dữ liệu và cách thức hoạt động của trình phân tích.
Biểu thức chính quy
Biểu thức chính quy là một chuỗi ký tự xác định một mẫu cụ thể. Chúng thường được sử dụng bởi các ngôn ngữ lập trình cấp cao và ngôn ngữ kịch bản để xác thực địa chỉ email hoặc ngày sinh. Mặc dù chúng được coi là không phù hợp để phân tích dữ liệu, nhưng chúng vẫn có thể được sử dụng để phân tích dữ liệu đầu vào đơn giản. Quan niệm sai lầm này phát sinh vì một số lập trình viên sử dụng biểu thức chính quy cho mọi tác vụ phân tích, ngay cả khi chúng không được cho là cần sử dụng. Trong những trường hợp như vậy, kết quả là một chuỗi biểu thức chính quy được hack lại với nhau.
Bạn có thể sử dụng biểu thức chính quy để phân tích một số ngôn ngữ lập trình đơn giản, còn được gọi là ngôn ngữ chính quy. Tuy nhiên, điều này không bao gồm HTML, mà bạn có thể coi là một ngôn ngữ đơn giản. Điều này là do thực tế là bên trong các thẻ HTML, bạn sẽ gặp phải bất kỳ số lượng thẻ tùy ý nào. Ngoài ra, theo ngữ pháp của nó, nó có các phần tử đệ quy và lồng nhau mà bạn không thể phân loại là ngôn ngữ chính quy. Do đó, bạn không thể phân tích chúng cho dù bạn có thông minh đến đâu.
Ngữ pháp
Ngữ pháp là một tập hợp các quy tắc mô tả một ngôn ngữ về mặt cú pháp. Do đó, nó chỉ áp dụng cho cú pháp chứ không phải ngữ nghĩa của một ngôn ngữ. Nói cách khác, ngữ pháp áp dụng cho cấu trúc của một ngôn ngữ chứ không phải ý nghĩa của nó. Hãy xem xét ví dụ dưới đây:
XIN CHÀO: “XIN CHÀO”
TÊN: [a-zA-z] +
Lời chào: HI TÊN
Hai trong số các đầu ra có thể có cho đoạn mã trên có thể là “HI SARA” hoặc “HI Coding”. Về mặt cấu trúc của ngôn ngữ, cả hai đều đúng. Tuy nhiên, trong đầu ra thứ hai, vì “Coding” không phải là tên của một người, nên về mặt ngữ nghĩa, nó không đúng.
Giải phẫu ngữ pháp
Chúng ta có thể xem xét giải phẫu ngữ pháp với các dạng thường dùng, chẳng hạn như Dạng Backus-Naur (BNF). Dạng này có các biến thể là Dạng Backus-Naur Mở rộng và biểu thị sự lặp lại. Một biến thể khác của BNF là Dạng Backus-Naur Mở rộng. Dạng này được sử dụng khi mô tả các giao thức truyền thông hai chiều.
Khi bạn sử dụng quy tắc điển hình trong Backus-Naur Form, nó sẽ trông như thế này:
<symbol> : : _expression_
The <symbol> is nonterminal, which means you can replace it with elements on the right, _expression_. The _expression_ could contain terminal symbols as well as nonterminal symbols.
Bây giờ bạn có thể hỏi ký hiệu đầu cuối là gì? Vâng, chúng là những ký hiệu không xuất hiện dưới dạng ký hiệu trong bất kỳ thành phần nào của ngữ pháp. Một ví dụ điển hình về ký hiệu đầu cuối là một chuỗi ký tự như "Chương trình".
Vì quy tắc như trên về mặt kỹ thuật xác định phép biến đổi giữa nhóm phi kết thúc và nhóm phi kết thúc và nhóm kết thúc ở bên phải nên nó có thể được gọi là quy tắc sản xuất.
Loại ngữ pháp
Có hai loại ngữ pháp, đó là ngữ pháp thông thường và ngữ pháp phi ngữ cảnh. Ngữ pháp thông thường được dùng để định nghĩa một ngôn ngữ chung. Ngoài ra còn có một loại ngữ pháp mới hơn được gọi là Ngữ pháp biểu thức phân tích (PEG), biểu diễn các ngôn ngữ phi ngữ cảnh và chúng cũng mạnh mẽ như ngữ pháp phi ngữ cảnh. Dù sao thì sự khác biệt giữa hai loại này phụ thuộc vào ký hiệu và cách các quy tắc được triển khai.
Một cách dễ dàng hơn để bạn có thể phân biệt giữa hai ngữ pháp là _biểu thức_, hoặc vế phải của quy tắc có thể ở dạng:
Trên thực tế, điều này nói thì dễ hơn làm vì một công cụ cụ thể có thể cho phép nhiều ký hiệu đầu cuối hơn trong một định nghĩa. Sau đó, nó có thể chuyển đổi biểu thức thành một chuỗi biểu thức đúng thuộc về một trong hai trường hợp trên.
Vì vậy, ngay cả một cách diễn đạt thô tục mà bạn viết cũng sẽ được chuyển thành dạng thích hợp, mặc dù nó không tương thích với ngôn ngữ tự nhiên.
Vì trình phân tích cú pháp chịu trách nhiệm phân tích một chuỗi ký hiệu trong ngôn ngữ lập trình tuân thủ các quy tắc ngữ pháp mà chúng ta vừa thảo luận, chúng ta có thể chia nhỏ chức năng của trình phân tích cú pháp thành một quy trình gồm hai bước. Thông thường, trình phân tích cú pháp được hướng dẫn đọc, phân tích và chuyển đổi dữ liệu phi cấu trúc theo chương trình sang định dạng có cấu trúc.
Hai thành phần chính tạo nên một trình phân tích cú pháp là phân tích từ vựng và phân tích cú pháp. Ngoài ra, một số trình phân tích cú pháp cũng triển khai một thành phần phân tích ngữ nghĩa lấy dữ liệu có cấu trúc và lọc chúng thành: tích cực hay tiêu cực, hoàn chỉnh hay không hoàn chỉnh. Mặc dù bạn có thể cho rằng quá trình này nâng cao hơn nữa quá trình phân tích dữ liệu, nhưng không phải lúc nào cũng như vậy.
Phân tích ngữ nghĩa không được tích hợp vào hầu hết các trình phân tích cú pháp do các phương pháp phân tích ngữ nghĩa của con người được ưa chuộng hơn. Do đó, phân tích ngữ nghĩa nên là một bước bổ sung và nếu bạn có kế hoạch thực hiện, nó phải bổ sung cho các mục tiêu kinh doanh của bạn.
Sau đây chúng ta hãy thảo luận về hai quy trình chính của trình phân tích cú pháp.
Phân tích từ vựng
Nó được thực hiện bởi Lexar, còn được gọi là máy quét hoặc máy phân tích cú pháp, và vai trò của chúng là chuyển đổi một chuỗi dữ liệu thô hoặc ký tự phi cấu trúc thành các mã thông báo. Chuỗi ký tự này thường được nhập vào trình phân tích cú pháp ở định dạng HTML. Sau đó, trình phân tích cú pháp tạo ra các mã thông báo bằng cách sử dụng các đơn vị từ vựng, bao gồm từ khóa, mã định danh và dấu phân cách. Đồng thời, trình phân tích cú pháp bỏ qua dữ liệu không liên quan về mặt từ vựng mà chúng ta đã đề cập trong phần giới thiệu. Ví dụ, chúng bao gồm các khoảng trắng và chú thích bên trong một tài liệu HTML.
Sau khi trình phân tích cú pháp loại bỏ các mã thông báo không liên quan trong quá trình phân tích từ vựng, phần còn lại của quá trình phân tích cú pháp sẽ xử lý.
Phân tích cú pháp
Giai đoạn phân tích dữ liệu này bao gồm việc xây dựng một cây phân tích. Điều này ngụ ý rằng sau khi trình phân tích tạo ra các mã thông báo, nó sẽ sắp xếp chúng thành một cây. Trong quá trình này, các mã thông báo không liên quan cũng được đưa vào cấu trúc lồng nhau của chính cây. Các mã thông báo không liên quan bao gồm dấu ngoặc đơn, dấu chấm phẩy và dấu ngoặc nhọn.
Để bạn hiểu rõ hơn, chúng ta hãy minh họa bằng một phương trình toán học đơn giản: (a*2)+4
Sau đó, Lexer của trình phân tích cú pháp sẽ chia chúng thành các mã thông báo như sau:
( => Dấu ngoặc đơn
a => Giá trị
* => Nhân
2 => Giá trị
)=> Dấu ngoặc đơn
+ => Thêm
4 => Giá trị
Sau đó, cây phân tích cú pháp sẽ được xây dựng như sau:
Khi trình phân tích trích xuất dữ liệu từ các phần tử HTML, nó sẽ tuân theo nguyên tắc tương tự.
Bây giờ bạn đã hiểu được các khía cạnh cơ bản của trình phân tích cú pháp. Bây giờ là lúc để xem xét khía cạnh thú vị là có nên tự xây dựng trình phân tích cú pháp hay thuê ngoài. Trước tiên, hãy xem xét ưu và nhược điểm của từng phương pháp.
Có rất nhiều lợi ích cho bạn khi bạn xây dựng một trình phân tích cú pháp nội bộ. Một trong những lợi ích chính là bạn có nhiều quyền kiểm soát hơn đối với các thông số kỹ thuật. Ngoài ra, vì trình phân tích cú pháp không bị giới hạn ở bất kỳ định dạng dữ liệu nào, bạn có thể thoải mái tùy chỉnh để đáp ứng các định dạng dữ liệu khác nhau.
Một số lợi ích quan trọng khác bao gồm tiết kiệm chi phí và kiểm soát việc cập nhật và bảo trì trình phân tích cú pháp tích hợp.
Bộ phân tích cú pháp nội bộ không phải là không có những nhược điểm. Một trong những nhược điểm đáng kể là nó sẽ tiêu tốn rất nhiều thời gian quý báu của bạn khi bạn có quyền kiểm soát đáng kể đối với việc bảo trì, cập nhật và thử nghiệm của nó. Nhược điểm khác là liệu bạn có thể mua và xây dựng một máy chủ mạnh mẽ để phân tích tất cả dữ liệu của mình nhanh hơn mức bạn yêu cầu hay không. Cuối cùng, bạn sẽ cần đào tạo tất cả nhân viên nội bộ của mình để xây dựng bộ phân tích cú pháp và cung cấp đào tạo về nó.
Khi bạn thuê ngoài một trình phân tích cú pháp, bạn sẽ tiết kiệm được tiền chi cho nguồn nhân lực vì công ty mua hàng sẽ cung cấp cho bạn tất cả các tác vụ, bao gồm máy chủ và trình phân tích cú pháp. Ngoài ra, bạn sẽ ít có khả năng gặp phải các lỗi đáng kể nhất vì công ty xây dựng trình phân tích cú pháp có nhiều khả năng kiểm tra tất cả các tình huống trước khi tung ra thị trường.
Nếu có bất kỳ lỗi nào phát sinh, sẽ có hỗ trợ kỹ thuật từ công ty mà bạn mua trình phân tích cú pháp. Bạn cũng sẽ tiết kiệm được nhiều thời gian vì quyết định xây dựng trình phân tích cú pháp tốt nhất sẽ đến từ việc thuê ngoài.
Mặc dù việc thuê ngoài có nhiều lợi ích, nhưng cũng có những nhược điểm. Những nhược điểm chính nằm ở khả năng tùy chỉnh và chi phí. Vì công ty phân tích cú pháp đã tạo ra chức năng hoàn chỉnh nên sẽ phải chịu nhiều chi phí hơn. Ngoài ra, quyền kiểm soát hoàn toàn của bạn đối với chức năng phân tích cú pháp sẽ bị hạn chế.
Trong bài viết dài này, bạn đã tìm hiểu về cách thức hoạt động của trình phân tích cú pháp và quá trình phân tích cú pháp dữ liệu nói chung, cũng như các nguyên tắc cơ bản của nó. Phân tích cú pháp dữ liệu là một quá trình dài và phức tạp. Khi bạn có cơ hội trải nghiệm phân tích cú pháp dữ liệu thực hành, giờ đây bạn đã được trang bị đầy đủ kiến thức để thực hiện hiệu quả.
Chúng tôi hy vọng bạn sẽ sử dụng kiến thức này một cách hiệu quả.