Phân tích cú pháp dữ liệu là gì?

May-30-20215 phút đọc

Phân tích cú pháp dữ liệu là một thuật ngữ mà bạn thường gặp khi làm việc với số lượng lớn dữ liệu, đặc biệt là đối với những người cạo dữ liệu từ web cũng như các kỹ sư phần mềm. Tuy nhiên, phân tích cú pháp dữ liệu là một chủ đề cần được thảo luận sâu hơn. Ví dụ: phân tích cú pháp dữ liệu chính xác là gì và làm thế nào

Phân tích cú pháp dữ liệu là một thuật ngữ mà bạn thường gặp khi làm việc với số lượng lớn dữ liệu, đặc biệt là đối với những người cạo dữ liệu từ web cũng như các kỹ sư phần mềm. Tuy nhiên, phân tích cú pháp dữ liệu là một chủ đề cần được thảo luận sâu hơn. Ví dụ: phân tích cú pháp dữ liệu chính xác là gì và làm thế nào để bạn triển khai nó trong thế giới thực.

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.

Phân tích cú pháp có nghĩa là gì?

Khi bạn trích xuất số lượng lớn dữ liệu từ web scraping, chúng ở định dạng HTML. Thật không may, điều này không phải là một định dạng có thể đọc được cho bất kỳ người không phải là lập trình viên. Vì vậy, bạn phải làm thêm công việc trên dữ liệu để làm cho chúng ở định dạng con người có thể đọc được, thuận tiện cho việc phân tích của các nhà khoa học dữ liệu. Nó là trình phân tích cú pháp thực hiện hầu hết các công việc nặng nhọc này trong phân tích cú pháp.

Trình phân tích cú pháp dữ liệu làm gì?

Trình phân tích cú pháp sẽ chuyển đổi dữ liệu ở định dạng này sang dữ liệu ở dạng khác. Ví dụ: trình phân tích cú pháp sẽ chuyển đổi dữ liệu HTML mà bạn thu được thông qua việc cạo sang JSON, CSV và thậm chí là bảng để nó ở định dạng mà bạn có thể đọc và phân tích. Điều đáng nói là trình phân tích cú pháp 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 cú pháp mọi chuỗi HTML vì một trình phân tích cú pháp tốt sẽ phân biệt dữ liệu cần thiết trong các thẻ HTML với phần còn lại.

Các công nghệ khác nhau sử dụng trình phân tích cú pháp

Như đã đề cập trong 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ên bản chất nó đặc biệt linh hoạt. Do đó, một loạt các công nghệ sử dụng chúng:

Ngôn ngữ kịch bản - đâ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 các lệnh trong 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ữ Hợp ngữ. 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 - với 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 đề, đoạn văn, v.v. Trong khi đó, trình phân tích cú pháp XML là một thư viện tạo điều kiện thuận lợi cho 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 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.

Mô hình hóa ngôn ngữ - trình phân tích cú pháp trong các 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ấ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 xử lý tương tác một lượng lớn dữ liệu, bao gồm khoa học vũ trụ và vật lý mặt trời. 

Tại sao bạn cần phân tích cú pháp dữ liệu?

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 sau này là các chương trình máy tính. Đầu tiên, con người viết chúng theo định dạng mà họ có thể hiểu 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 đó, các máy tính dịch chúng thành một dạng mã cấp máy mà máy tính hiểu.

Phân tích cú pháp cũng cần thiết cho các 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à khử tuần tự một lớp.

Thuật ngữ phân tích cú pháp và cấu trúc của trình phân tích cú phá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 cú pháp 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 cú pháp dữ liệu và cách trình phân tích cú pháp hoạt động. 

Thuật ngữ

Biểu thức chính quy

Biểu thức chính quy là một chuỗi các 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ữ kịch bản và cấp cao để 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 cú pháp dữ liệu, chúng vẫn có thể được sử dụng để phân tích cú pháp đầu vào đơn giản. Quan niệm sai lầm này phát sinh bởi vì một số lập trình viên nhất định sử dụng các biểu thức chính quy cho mọi tác vụ phân tích cú pháp, ngay cả khi chúng không được sử dụng. Trong những trường hợp như vậy, kết quả là một loạt các biểu thức chính quy bị hack cùng nhau.

Bạn có thể sử dụng biểu thức chính quy để phân tích cú pháp 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ữ thông thường. 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ữ theo 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 NAME

Hai trong số các đầu ra có thể có cho đoạn mã trên có thể là "HI SARA" hoặc "Mã hóa HI". Theo như cấu trúc của ngôn ngữ có liên quan, cả hai đều chính xác. Tuy nhiên, trong kết quả thứ hai, vì "Mã hóa" không phải là tên của một người, nên nó không chính xác về mặt ngữ nghĩa.

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 hình thức thường được sử dụng, chẳng hạn như Mẫu Backus-Naur (BNF). Hình thức này có các biến thể của nó là Mẫu Backus-Naur mở rộng và nó chỉ ra sự lặp lại. Một biến thể khác của BNF là Augmented Backus-Naur Form. Nó được sử dụng khi mô tả các giao thức truyền thông hai chiều.

Khi bạn đang sử dụng một quy tắc điển hình trong Backus-Naur Form, nó 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 thiết bị đầu cuối là gì? Chà, chúng là những thứ không xuất hiện dưới dạng biểu tượng trong bất kỳ thành phần ngữ pháp nào. Một ví dụ điển hình của biểu tượng thiết bị đầu cuối là một chuỗi các ký tự như "Chương trình".

Vì quy tắc như trên về mặt kỹ thuật xác định sự chuyển đổi giữa nonterminal và nhóm nonterminal và terminal ở bên phải, 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, và chúng là ngữ pháp thông thường và ngữ pháp không có ngữ cảnh. Ngữ pháp thông thường được sử dụng để xác định một ngôn ngữ chung. Ngoài ra còn có một loại ngữ pháp gần đây hơn được gọi là Parsing Expression Grammar (PEG), đại diện cho các ngôn ngữ không có ngữ cảnh và chúng cũng mạnh mẽ như ngữ pháp không có ngữ cảnh. Dù sao, sự khác biệt giữa hai loại phụ thuộc vào ký hiệu và cách các quy tắc đang được thực hiện.

Một cách dễ dàng hơn mà bạn có thể phân biệt giữa hai ngữ pháp là _expression_, hoặc phía bên phải của quy tắc có thể ở dạng :

  • Một chuỗi trống
  • Một ký hiệu thiết bị đầu cuối duy nhất
  • Một biểu tượng thiết bị đầu cuối duy nhất được theo sau bởi một biểu tượng không phải thiết bị đầu cuối.

Trong thực tế, điều này nói 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ể biến đổi biểu thức thành một chuỗi các biểu thức chính xác thuộc về một trong các trường hợp trên.

Vì vậy, ngay cả một biểu thức thô tục mà bạn viết sẽ được chuyển thành hình thức thích hợp, mặc dù nó không tương thích với ngôn ngữ tự nhiên.

Các thành phần của trình phân tích cú pháp

Vì trình phân tích cú pháp chịu trách nhiệm phân tích một chuỗi các ký hiệu trong ngôn ngữ lập trình phù hợp với 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 quy trình 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 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 thực hiện 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 hoặc tiêu cực, hoàn chỉnh hoặc không đầy đủ. Mặc dù bạn có thể cho rằng quá trình này tăng cường 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 là kịch bản.  

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 thực tiễn 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ó, nó phải bổ sung cho các mục tiêu kinh doanh của bạn.

Sau đó 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ã thông báo và vai trò của chúng là chuyển đổi một chuỗi dữ liệu hoặc ký tự phi cấu trúc thô thành mã thông báo. Thường thì chuỗi ký tự nhập trình phân tích cú pháp này ở định dạng HTML. Sau đó, trình phân tích cú pháp tạo 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, số nhận dạng 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 tôi đã đề cập trong phần giới thiệu. Ví dụ: chúng bao gồm khoảng trắng và nhận xét bên trong 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 từ vựng, phần còn lại của quá trình phân tích cú pháp liên quan đến phân tích cú pháp.

Phân tích cú pháp

Giai đoạn phân tích cú pháp dữ liệu này bao gồm xây dựng một cây phân tích cú pháp. Điều này ngụ ý rằng sau khi trình phân tích cú pháp tạo các mã thông báo, nó 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 bắt vào cấu trúc làm tổ 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 về điều này, hãy minh họa nó bằng một phương trình toán học đơn giản: (a * 2) + 4

Lexer của trình phân tích cú pháp sau đó 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

+ = > Plus

4 = Giá trị >

Sau đó, cây phân tích cú pháp sẽ được xây dựng như dưới đây.:

    Khi trình phân tích cú pháp 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ự.

Trình phân tích cú pháp nội bộ hoặc trình phân tích cú pháp thuê ngoài?

Bây giờ bạn đã đạt được một sự hiểu biết về các khía cạnh cơ bản của một trình phân tích cú pháp. Bây giờ là lúc cho khía cạnh thú vị về việc nên xây dựng trình phân tích cú pháp của bạn hay thuê ngoài. Đầu tiên, chúng ta hãy xem xét ưu và nhược điểm của từng phương pháp. 

Ưu điểm của trình phân tích cú pháp nội bộ

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 bao gồm 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ể làm cho nó có thể 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à có quyền kiểm soát việc cập nhật và duy trì trình phân tích cú pháp tích hợp sẵn. 

Nhược điểm của trình phân tích cú pháp nội bộ

Trình phân tích cú pháp trong nhà không phải là không có những cạm bẫy của nó. Một trong những hạn chế đáng kể là nó sẽ tiêu tốn nhiều thời gian quý báu của bạn khi bạn có quyền kiểm soát đáng kể việc bảo trì, cập nhật và thử nghiệm. Hạn chế khác sẽ 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 cú pháp tất cả dữ liệu của bạn nhanh hơn 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 trình phân tích cú pháp và đào tạo về nó. 

Ưu điểm của trình phân tích cú pháp thuê ngoài

Khi bạn thuê ngoài một trình phân tích cú pháp, nó sẽ tiết kiệm tiền mà bạ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 cả máy chủ và trình phân tích cú pháp. Ngoài ra, bạn sẽ ít có khả năng phải đối mặt với các lỗi đáng kể vì công ty xây dựng nó có nhiều khả năng kiểm tra tất cả các kịch bản trước khi họ phát hành 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 bạn đã mua trình phân tích cú pháp. Bạn cũng sẽ tiết kiệm nhiều thời gian vì việc ra 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. 

Nhược điểm của trình phân tích cú pháp thuê ngoài

Mặc dù gia công phần mềm có rất nhiều lợi ích, nhưng cũng có những nhược điểm của nó. Hạn chế lớn đến ở dạng khả năng tùy biến 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ó sẽ phải chịu nhiều chi phí hơn. Ngoài ra, toàn quyền kiểm soát chức năng phân tích cú pháp của bạn sẽ bị hạn chế.

Kết thúc

Trong bài viết dài này, bạn đã tìm hiểu về cách trình phân tích cú pháp hoạt động và quá trình phân tích cú pháp dữ liệu nói chung và 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 lâu dài và phức tạp. Khi bạn có cơ hội trải nghiệm phân tích dữ liệu thực hành, giờ đây bạn đã được trang bị đầy đủ kiến thức để thực hiện nó một cách 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ả.