Chúng ta đang sống trong thời đại lấy dữ liệu làm trung tâm. Dữ liệu đã được mô tả như dầu mới. Nhưng cũng giống như dầu, dữ liệu không phải lúc nào cũng hữu ích ở dạng thô. Một dạng dữ liệu đặc biệt khó sử dụng ở dạng thô là dữ liệu phi cấu trúc Show Rất nhiều dữ liệu là dữ liệu phi cấu trúc. Dữ liệu phi cấu trúc không vừa với định dạng để phân tích, chẳng hạn như bảng tính Excel hoặc khung dữ liệu. Dữ liệu văn bản là một loại dữ liệu phi cấu trúc phổ biến và điều này gây khó khăn khi làm việc với. Nhập cụm từ thông dụng hoặc viết tắt là regex. Lúc đầu, chúng có thể trông hơi đáng sợ, nhưng một khi bạn đã bắt đầu, việc sử dụng chúng sẽ là một chuyến dã ngoại
Giới thiệu nhẹ nhàng về Biểu thức chính quy với PythonBiểu thức chính quy là vũ khí đáng gờm nhất của nhà khoa học dữ liệu chống lại văn bản phi cấu trúchướng tới khoa học dữ liệu. com Thư viện[[1]] 8Chúng tôi sẽ sử dụng thư viện [[1]] 8. Thư viện [[1]] 8 được xây dựng từ thư viện C, vì vậy tất cả các chức năng của nó rất nhanhĐể cài đặt và tải thư viện [[1]] 8 trong R, hãy sử dụng các lệnh sauXem cách dễ dàng như vậy? . Chúng ta hãy xem xét một số chức năng chúng tôi có sẵn cho chúng tôi trong mô-đun này
Bạn có thể đã sử dụng các chức năng này. Họ có các ứng dụng khá đơn giản mà không cần thêm regex. Nghĩ lại khoảng thời gian trước khi xã hội xa cách và tưởng tượng một buổi dã ngoại thú vị trong công viên, giống như hình ảnh trên. Đây là một chuỗi ví dụ với những gì mọi người sẽ mang đến buổi dã ngoại. Chúng ta có thể sử dụng nó để chứng minh cách sử dụng cơ bản của các hàm regex [[1]] 4Nếu tôi muốn lấy mọi trường hợp tên của một người từ chuỗi này, tôi chỉ cần chuyển tên và [[1]] 32 đến [[1]] 33Kết quả sẽ là một danh sách với tất cả các lần xuất hiện của mẫu. Sử dụng ví dụ này, [[1]] 34 sẽ có danh sách sau với đầu ra là 1 vectơ[[1]] Bây giờ hãy tưởng tượng rằng Alex đã bỏ quên 4 chiếc bánh mì kẹp thịt của mình trong buổi dã ngoại và chúng đã bị Shawn đánh cắp. [[1]] 35 có thể thay thế bất kỳ trường hợp nào của Alex bằng ShawnChuỗi kết quả sẽ hiển thị rằng Shawn hiện có 4 bánh mì kẹp thịt. Thật là một chàng trai may mắn 🍔 "Drew has 3 watermelons, Shawn has 4 hamburgers, Karina has 12 tamales, and Anna has 6 soft pretzels" Các ví dụ cho đến nay là khá cơ bản. Có thời gian và địa điểm cho chúng, nhưng nếu chúng ta muốn biết tổng số thức ăn có trong buổi dã ngoại thì sao? Từ vựng RegexCó một số khái niệm thúc đẩy regex
Đây không phải là một danh sách đầy đủ, nhưng có rất nhiều thứ để giúp chúng ta thành công Bộ nhân vậtBộ ký tự đại diện cho các tùy chọn bên trong dấu ngoặc, với biểu thức chính quy chỉ khớp với một trong các tùy chọn. Có nhiều thứ chúng ta có thể làm với bộ ký tự
[[1]] 3
[[1]] 6
[[1]] 8Các bộ ký tự có thể chứa mọi thứ từ phần này đồng thời, vì vậy những thứ như [[1]] 61 vẫn hợp lệ. Nó sẽ khớp với mọi ký tự từ chữ “A” viết hoa đến chữ “C”, chữ thường “t” đến chữ thường “z” và từ 7 đến 9Cho đến nay, chúng tôi không thể trả lời bất kỳ câu hỏi nào được đặt ra trước đó chỉ với các nhóm dấu ngoặc. Hãy thêm một số vũ khí vào kho vũ khí regex của chúng ta Siêu nhân vậtKý tự meta đại diện cho một loại ký tự. Chúng thường sẽ bắt đầu bằng dấu gạch chéo ngược [[1]] 62. Vì dấu gạch chéo ngược [[1]] 62 là một ký tự đặc biệt trong R, nên nó cần được thoát mỗi khi nó được sử dụng với dấu gạch chéo ngược khác. Nói cách khác, R yêu cầu 2 dấu gạch chéo ngược khi sử dụng ký tự meta. Mỗi ký tự meta sẽ khớp với một ký tự duy nhất. Dưới đây là một số trong những điều quan trọng nhất trong hành động
[[1]] 6
[[1]] 0
[[1]] 8định lượngNhư chúng ta đã thấy trong phần trước, một ký tự meta đơn lẻ có thể có chức năng hơi hạn chế. Khi nói đến từ hoặc số, chúng ta thường muốn tìm nhiều hơn 1 ký tự cùng một lúc. Đây là nơi định lượng đi vào. Chúng cho phép bạn định lượng có bao nhiêu ký tự mà bạn đang mong đợi. Chúng luôn theo đuổi đặc điểm mà chúng đang định lượng và có một vài hương vị
Khi chúng tôi sử dụng bộ định lượng [[1]] 82 trên [[1]] 83, nó sẽ trả về 4 kết quả phù hợp. Đây là một điểm tốt để đề cập rằng regex tìm kiếm các kết quả không trùng lặp. Trong trường hợp này, nó xem xét từng chữ B và ký tự theo sau nó. Vì chúng tôi đã sử dụng bộ định lượng [[1]] 82, nên nó tiếp tục khớp cho đến khi kết thúc một nhóm B[[1]] 8
[[1]] 0Khi được viết như [[1]] 89, nó sẽ khớp với bất kỳ số lượng B nào từ 2 đến 4 lần xuất hiện. Lưu ý rằng việc đặt khoảng trắng trong biểu thức chính quy của bạn sẽ KHÔNG hoạt động. Nó sẽ trả về một danh sách trống[[1]] 1Chúng ta cũng có thể viết bộ định lượng này và bỏ qua giới hạn trên như [[1]] 60. Điều này sẽ phù hợp với 2 hoặc nhiều trường hợp. Đối với [[1]] 83, nó sẽ trả về kết quả chính xác giống như [[1]] 89
Bộ định lượng [[1]] 63 trả về một số kết quả khớp lạ khi được sử dụng bởi chính nó, vì vậy chúng ta có thể bỏ qua một ví dụ với [[1]] 83. Chúng ta sẽ xem trong một ví dụ sau cách nó có thể được áp dụng khi ai đó trong buổi dã ngoại của chúng ta mang theo một món ăn có tên nhiều từ. Nếu không có nó, chúng tôi sẽ không nắm bắt được chính xác rằng Anna đang mang bánh quy mềmHãy kết hợp những gì chúng ta biết cho đến nay về bộ ký tự, ký tự meta và bộ định lượng để trả lời một số câu hỏi về chuỗi dã ngoại của chúng ta. Chúng tôi muốn biết tất cả các từ có trong chuỗi và cả các số trong chuỗi Đối với các từ, chúng ta có thể sử dụng một bộ ký tự có tất cả chữ hoa và chữ thường, thêm một bộ định lượng [[1]] 82 vào nó. Điều này sẽ tìm thấy bất kỳ độ dài ký tự alpha nào được nhóm lại với nhau. Nói cách khác, nó tìm thấy tất cả các từ. Regex đang bắt đầu có vẻ hữu ích hơn nhiều[[1]] 2Để tìm số lượng của từng mặt hàng thực phẩm, chúng ta có thể sử dụng ký tự meta [[1]] 81 và bộ định lượng [[1]] 68. Điều này sẽ tìm thấy các nhóm chữ số dài 1 hoặc 2 ký tự. Đây là một đầu ra hữu ích hơn nhiều vì chúng ta có cùng số lượng như chúng ta có các mặt hàng thực phẩm và con người[[1]] 3Để tìm số lượng và tên của từng mặt hàng thực phẩm, chúng ta có thể kết hợp các bộ định lượng với các ký tự meta. Chúng tôi biết rằng mỗi số có một mặt hàng thực phẩm ngay sau nó, vì vậy chúng tôi chỉ cần thêm vào ví dụ trước. Chúng tôi biết rằng có một khoảng trống và một từ ( [[1]] 69) có thể được theo sau bởi một từ khác như cách xuất hiện của “bánh quy xoắn mềm”. Để xác định từ thứ hai có thể không có ở đó, chúng ta có thể sử dụng bộ định lượng [[1]] 63 với từ thứ hai. Cứ như vậy, chúng tôi có một danh sách chứa số lượng và tên của mọi hàng hóa trong chuyến dã ngoại của chúng tôi[[1]] 4chụp nhómCác nhóm chụp cho phép bạn tìm kiếm toàn bộ cụm từ và chỉ trả về một phần của chúng. Với ví dụ của chúng ta, tôi muốn biết tên của từng người, họ mang theo những gì và họ mang theo bao nhiêu. Cho đến thời điểm này, chúng tôi đã sử dụng [[1]] 01. Nó có đầu ra rõ ràng, dễ đọc đối với các ví dụ của chúng tôi, nhưng nó không thực sự hoạt động với các nhóm chụp. Thật hữu ích, [[1]] 8 cung cấp [[1]] 03 hoạt động với các nhóm chụp. Tuy nhiên, nó xuất kết quả trong danh sách chứa ma trận trái ngược với danh sách chứa vectơ[[1]] 5Biểu thức chính quy mà chúng tôi đã sử dụng trong [[1]] 04 đang tìm kiếm một tên bắt đầu bằng chữ in hoa và có bất kỳ số lượng chữ thường nào sau nó ([[1]] 05). Sau đó, sau một khoảng trắng, nó khớp với không gian mẫu, từ, khoảng trắng [[1]] 06. Tiếp theo, chúng tôi đang tìm kiếm một số có 1 đến 2 chữ số, theo sau là khoảng trắng và một từ ([[1]] 07). Bạn có thể thấy ở đầu ra mỗi hàng của ma trận là một chuỗi ký tự với thông tin chi tiết của từng ngườiBây giờ, đây là một bước tiến lớn so với nơi chúng tôi bắt đầu, nhưng chúng tôi không thực sự quan tâm đến từ "có" và chúng tôi muốn có thể tạo khung dữ liệu từ số lượng. Hãy thêm vào các nhóm chụp. Bằng cách sử dụng các nhóm chụp, chúng tôi có thể trả về một ma trận trong đó mỗi cột chứa một phần thông tin cụ thể. Chúng tôi sẽ tạo các nhóm chụp có chứa từng tên, số lượng và mặt hàng. Các nhóm chụp chỉ đơn giản là các phần của biểu thức chính quy mà bạn đặt trong dấu ngoặc đơn [[1]] 6Cột đầu tiên trong ma trận có toàn bộ biểu thức chính quy, bỏ qua các nhóm chụp. Mỗi cột còn lại của ma trận tương ứng với các nhóm chụp mà chúng tôi đã xác định cho tên, số lượng và mặt hàng Kết hợp Văn bản của chúng tôi vào Khung dữ liệuKhi thực hiện phân tích dữ liệu, một trong những cấu trúc dữ liệu R hữu ích nhất là khung dữ liệu. Chắc chắn bạn đã biết điều này nếu bạn nhấp vào bài viết này. Khung dữ liệu cho phép những thứ như tính toán thống kê cột và vẽ dữ liệu. Vì chúng tôi có một ma trận với tất cả thông tin chúng tôi muốn, nên việc biến nó thành một khung dữ liệu không quá khó. Chúng tôi sẽ sử dụng hàm [[1]] 08 trên mọi thứ ngoại trừ cột đầu tiên của ma trận. [[1]] 08 cung cấp các tên cột mặc định, vì vậy chúng tôi sẽ thay đổi các tên đó để khớp với nội dung trong mỗi cộtGhi chú nhanh về ký hiệu. bộ dấu ngoặc đầu tiên sau khi [[1]] 80 ([[1]] 81) truy cập phần tử đầu tiên của danh sách, ma trận của chúng tôi. Bộ dấu ngoặc thứ hai ( [[1]] 82) chọn tất cả các hàng và mọi cột ngoại trừ cột đầu tiên[[1]] 7Kết luận và học thêm Chúng tôi chỉ đề cập đến một tập hợp con nhỏ về cách regex có thể giúp xử lý dữ liệu văn bản phi cấu trúc. Đây là nền tảng tốt để bắt đầu, nhưng trước đó bạn sẽ cần biết các khái niệm như cách tìm mọi thứ NHƯNG một ký tự (phủ định) hoặc tìm thứ gì đó ngay trước hoặc sau thứ khác (nhìn quanh). Bạn có thể tìm hiểu tất cả về những điều đó trong bài đăng tiếp theo của tôi tại đây |