Xác định các chuỗi ký tự random (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

erosvirus

Thành viên mới
Tham gia
10/9/18
Bài viết
1
Được thích
0
Chào các anh chị,

Hiện em đang cần lọc ra trong list các chuỗi random letter (chuỗi vô nghĩa - do khách hàng điền bậy bạ vào), không biết excel có hỗ trợ tính năng này không ạ? Nếu có hy vọng các bác hướng dẫn giúp em.

VD em có một list như sau:

2009_honganh@gmail.com
minhduc_1221@gmail.com
sadaskcasdkjbv@gmail.com ---> chuỗi cần loại bỏ
hay_trao_cho_anh@gmail.com
nguyen_tuan1412@gmail.com
nguyenquoccuong@gmail.com
qwertyyyyy@gmail.com ---> chuỗi cần loại bỏ
zxcczxcxz@gmail.com ---> chuỗi cần loại bỏ
AXAXAXA@gmail.com ---> chuỗi cần loại bỏ
JNJNJNJNJ@gmail.com ---> chuỗi cần loại bỏ
pipipipipjoihi@gmail.com ---> chuỗi cần loại bỏ
aaaaaaaaa@gmail.com ---> chuỗi cần loại bỏ
a999921351@gmail.com ---> chuỗi cần loại bỏ


Cảm ơn các bác đã hõ trợ
 
Thua bạn, kg làm được đâu
 
Tôi có một giải thuật này gợi ý cho bạn thôi, còn thực hiện thì tôi không giúp bạn, thay vì phải bỏ khá nhiều giải thuật và thuật toán, bạn nên mượn google dịch để phát hiện từ nguyên vẹn hoặc rời rạc.

Google Dịch có khả năng tách từ nguyên vẹn và phát hiện tiếng Việt khi không có dấu.

Bước thực hiện với VBA như sau:
1. Tách chuỗi lấy đằng trước chữ @
2. Gửi đến Google dịch thông qua Webrowser (IE hoặc Chrome) với trình điều khiển của nó.
3. Kiểm tra, phát hiện và nhận biết:
++ Nếu từ được tách có dấu phân cách
++ Nếu phát hiện Tiếng Việt
++ Nếu có cấu trúc
++ Nếu có từ gợi ý
4. Nếu Gmail đa số là tên tiếng Việt thì cần liệt kê toàn bộ từ ngữ không dấu tiếng Việt, và kiểm tra tương đối của từ (không ít thuật toán),

Tỉ lệ chính xác chỉ có thể ở mức tương đối.

Với điều bạn mong muốn nó là cả một ứng dụng sử dụng nguồn vốn là trí tuệ, cộng thêm kỹ năng lập trình, nên buộc bạn phải trả tiền mới có được.
Vậy nên rất khó để bạn có được sự giúp đỡ.
 
Tiếng Việt không nhiều từ lắm, mà không dấu thì lại ít hơn nữa.
Chỉ cần một bảng tra thì có thể tra được bằng phương pháp dò từng từ.
Ví dụ: totite có thể dò được theo tò tí te, to tít ẹ, tốt i tế,...
Nếu chỉ từ thôi thì rất dễ. Câu cú mới khó.
 
Bài của chủ thớt nếu dữ liệu đúng là email thì cần kiểm tra email đó "sống hay chết", chứ ai lại đi loại "random".

Một địa chỉ email gồm toàn phụ âm, toàn nguyên âm hay một chuỗi bất kỳ không có nghĩa gì cả là hoàn toàn hợp lệ cơ mà. Vậy tại sao lại bỏ nó đi. Hết sức vô lý.
 
Chào các anh chị,

Hiện em đang cần lọc ra trong list các chuỗi random letter (chuỗi vô nghĩa - do khách hàng điền bậy bạ vào), không biết excel có hỗ trợ tính năng này không ạ? Nếu có hy vọng các bác hướng dẫn giúp em.

VD em có một list như sau:

2009_honganh@gmail.com
minhduc_1221@gmail.com
sadaskcasdkjbv@gmail.com ---> chuỗi cần loại bỏ
hay_trao_cho_anh@gmail.com
nguyen_tuan1412@gmail.com
nguyenquoccuong@gmail.com
qwertyyyyy@gmail.com ---> chuỗi cần loại bỏ
zxcczxcxz@gmail.com ---> chuỗi cần loại bỏ
AXAXAXA@gmail.com ---> chuỗi cần loại bỏ
JNJNJNJNJ@gmail.com ---> chuỗi cần loại bỏ
pipipipipjoihi@gmail.com ---> chuỗi cần loại bỏ
aaaaaaaaa@gmail.com ---> chuỗi cần loại bỏ
a999921351@gmail.com ---> chuỗi cần loại bỏ


Cảm ơn các bác đã hõ trợ
Bài này chắc có lẽ không thể loại 100% được.
Code dưới đây viết thử cho mẫu của bài 1, dữ liệu bắt đầu từ A1 trở xuống.
Bạn có thể gửi dữ liệu thực tế lên để test code
Mã:
Option Explicit

Sub LocEmail()
Dim Nguon
Dim Chuoi As String
Dim Kq() As String
Dim i, j, k
Nguon = Sheet1.Range("A1").CurrentRegion
k = UBound(Nguon)
ReDim Kq(1 To k, 1 To 1)
With CreateObject("VbScript.RegExp")
    .Global = True
    For i = 1 To k
        Chuoi = Left(Nguon(i, 1), InStr(Nguon(i, 1), "@") - 1)
        .Pattern = "[aeiouAEIOU]"
        j = .Execute(Chuoi).Count
        If j > 1 And j < Len(Chuoi) Then
            .Pattern = "([a-zA-Z]+)([a-zA-Z]+)(.*\2\1){2,}"
            If .test(Chuoi) = 0 Then
                Kq(i, 1) = Chuoi
            End If
        End If
    Next i
End With
With Sheet1
    .Range("C1:C" & k).ClearContents
    .Range("C1:C" & k) = Kq
End With
End Sub
 
1. Tất cả các email hợp lệ không ký gì lại loại bỏ chỉ vì chủ chủ đề cảm thấy không vừa mắt.

Về code của CHAOQUAY.

2. Các email đưa ra chỉ là ví dụ. Viết code chỉ cho vài email cụ thể thì phí thời gian. Nếu thêm email hợp lệ và có thực vd. huy123@gmail.com thì code không tìm ra. Nếu sửa thành
Mã:
.Pattern = "[aeiouyAEIOY]"
thì tìm ra huy123@gmail.com. Nhưng lúc đó thì code cũng chấp nhận cả qwertyyyyy@gmail.com trong khi chủ chủ đề muốn loại.

3. Nếu sửa của chủ chủ đề

sadaskcasdkjbv@gmail.com

thành

sadaakcasdkjbv@gmail.com

Tức sửa ký tự thứ 5 - "s" thành "a" thì tôi nghĩ anh ta cũng muốn loại nó vì cũng không vừa mắt. Nhưng code lại cho là email tốt.

Những chỗ có vấn đề ở 2 điểm 2 và 3 có thể chiếm tỷ lệ lớn trong dữ liệu.
 
Bài của chủ thớt nếu dữ liệu đúng là email thì cần kiểm tra email đó "sống hay chết", chứ ai lại đi loại "random".

Một địa chỉ email gồm toàn phụ âm, toàn nguyên âm hay một chuỗi bất kỳ không có nghĩa gì cả là hoàn toàn hợp lệ cơ mà. Vậy tại sao lại bỏ nó đi. Hết sức vô lý.
Có thể thớt muốn bắt buộc email phải là từ tiếng Việt, không dấu, không viết tắt, và mỗi từ bắt buộc phải là 2 ký tự trở lên.
Dẫu không thực tế thì tôi thấy nó cũng là một thách thức cho động não.
Điển hình, điều kiện không viết tắt và tối thiểu 2 ký tự sẽ khiến cho dùng bảng tra trở thành khả thi.
Dùng regex như bài #6 cũng là một ý tưởng hay nhưng nếu không nắm vững luật tiếng Việt thì không thể thành công. Bản thân tôi cho rằng đem áp dụng hết luật tiếng Việt vào thì e rằng còn rắc rối hơn dùng bảng tra.

Theo tôi thì chỉ dùng regex để loại nhanh ở vòng sơ khởi - loại những dạng chắc chắn 100% không phải tiếng Việt.
Ví dụ những ký tự bắt buộc phải có một nguyên âm đi sau nó b, d, l, q, r, s, v, x (những ký tự này luôn luôn đứng đầu từ)
 
1. Tất cả các email hợp lệ không ký gì lại loại bỏ chỉ vì chủ chủ đề cảm thấy không vừa mắt.

Về code của CHAOQUAY.

2. Các email đưa ra chỉ là ví dụ. Viết code chỉ cho vài email cụ thể thì phí thời gian. Nếu thêm email hợp lệ và có thực vd. huy123@gmail.com thì code không tìm ra. Nếu sửa thành
Mã:
.Pattern = "[aeiouyAEIOY]"
thì tìm ra huy123@gmail.com. Nhưng lúc đó thì code cũng chấp nhận cả qwertyyyyy@gmail.com trong khi chủ chủ đề muốn loại.

3. Nếu sửa của chủ chủ đề

sadaskcasdkjbv@gmail.com

thành

sadaakcasdkjbv@gmail.com

Tức sửa ký tự thứ 5 - "s" thành "a" thì tôi nghĩ anh ta cũng muốn loại nó vì cũng không vừa mắt. Nhưng code lại cho là email tốt.

Những chỗ có vấn đề ở 2 điểm 2 và 3 có thể chiếm tỷ lệ lớn trong dữ liệu.
Code em viết là theo nhận xét này : Xét chuỗi nằm trước ký tự @ của bài 1
Với pattern "[aeiouAEIOU]" là dựa trên 2 nhận xét
Các mail hợp lệ đều có họ và tên. Vì vậy theo tiếng Việt thì ít nhất sẽ có 2 nguyên âm trong chuỗi.
Họ và tên trong tiếng Việt luôn bao gồm cả phụ âm & nguyên âm.
Như vậy, chuỗi nào chỉ chứa 1 nguyên âm hoặc toàn bộ là nguyên âm sẽ bị loại
Như cái mail huy123@gmail.com tuy là hợp lệ nhưng lại không tương tự các mẫu bài 1 ( tức là phải có cả họ ) nên cũng bó tay

Với pattern = "([a-zA-Z]+)([a-zA-Z]+)(.*\2\1){2,}"
Cái pattern này dựa vào nhận xét là : Người tạo mail rác sẽ có thói quen gõ lặp lại 1 vài ký tự nào đó trên bàn phím
Việc gõ lặp lại này có thể dẫn đến sẽ tạo ra chuỗi theo kiểu của pattern thứ 2.
Cái {2,} thực ra cũng chỉ là nhận xét riêng cho mẫu bài 1 nhưng cũng là phòng hờ cho 1 số tên có các ký tự đảo ngược 1 lần ví dụ như là thanhna@gmail.com

Bài này tạo pattern chung chắc là không thể nhưng cũng viết thử lên để có gì học hỏi thêm bác ạ.
 
Có thể thớt muốn bắt buộc email phải là từ tiếng Việt, không dấu, không viết tắt, và mỗi từ bắt buộc phải là 2 ký tự trở lên.
Em căn cứ vào câu này của bài #1:
"chuỗi vô nghĩa - do khách hàng điền bậy bạ vào"

Tức là chủ thớt có một cái 'form' để khách hàng điền thông tin vào (nhằm điều tra, đăng ký cái gì đó), trong đó có trường email. Khách hàng sẽ có những người không muốn điền email của mình để tránh rắc rối (spam gì đó chẳng hạn) nên họ sẽ điền bừa cái gì đó vào cho đủ.

Kết quả, chủ thớt có một danh sách email không như mong đợi. :)
Nhẽ ra ở ngay 'form' đăng ký của chủ thớt có chức năng kiểm tra sự tồn tại của email khi người ta nhập vào.
 
Code em viết là theo nhận xét này : Xét chuỗi nằm trước ký tự @ của bài 1
Với pattern "[aeiouAEIOU]" là dựa trên 2 nhận xét
Các mail hợp lệ đều có họ và tên. Vì vậy theo tiếng Việt thì ít nhất sẽ có 2 nguyên âm trong chuỗi.
Họ và tên trong tiếng Việt luôn bao gồm cả phụ âm & nguyên âm.
Như vậy, chuỗi nào chỉ chứa 1 nguyên âm hoặc toàn bộ là nguyên âm sẽ bị loại
Như cái mail huy123@gmail.com tuy là hợp lệ nhưng lại không tương tự các mẫu bài 1 ( tức là phải có cả họ ) nên cũng bó tay
Mail lập trên gmail.com. huy123@gmail.com là hợp lệ. Tôi còn có mail thỉnh thoảng dùng là siwtom***@gmail.com. Chả có họ và cũng chả có tên của tôi.

Nếu bạn cố tình chỉ dùng pattern "[aeiouAEIOU] thì đây: email qwertaaaaa@gmail.com chắc chắn không vừa ý chủ chủ đề. Nhưng code của bạn cho là tốt.
Với pattern = "([a-zA-Z]+)([a-zA-Z]+)(.*\2\1){2,}"
Cái pattern này dựa vào nhận xét là : Người tạo mail rác sẽ có thói quen gõ lặp lại 1 vài ký tự nào đó trên bàn phím
Việc gõ lặp lại này có thể dẫn đến sẽ tạo ra chuỗi theo kiểu của pattern thứ 2.
Cái {2,} thực ra cũng chỉ là nhận xét riêng cho mẫu bài 1 nhưng cũng là phòng hờ cho 1 số tên có các ký tự đảo ngược 1 lần ví dụ như là thanhna@gmail.com
Bạn không phải giải thích. Nếu tôi không hiểu được code của bạn thì làm sao tôi nghĩ ra được ví dụ phản bác? Chả nhẽ tôi cứ nghĩ bừa ví dụ rồi chạy code? Nếu không được thì lại bịa ra ví dụ khác và chạy code cho tới khi có ví dụ để phản bác? :D
Bài này tạo pattern chung chắc là không thể nhưng cũng viết thử lên để có gì học hỏi thêm bác ạ.
Nhưng tôi đã nói là những trường hợp mà code chạy "sai", tức không đúng ý chủ chủ đề, ở hai điểm 2 và 3, có thể có rất nhiều nên không thể nói: "Code không hoàn hảo nhưng có thể chạy đúng 80%, 85%, 90%, 95% ..."

Đây chỉ là ý kiến thôi, bạn đừng bận tâm.
Bài đã được tự động gộp:

Khách hàng tạo tài khoản trên Gmail nên tkhông thể bắt khách hàng tạo tài khoản theo mẫu của mình được. Nhất là phải tiếng Việt không dấu, rồi qui tắc này kia.

Thậm chí có thể chấp nhận qui tắc tiếng Việt không dấu + vài qui định nữa. Lúc này có thể bịa ra một email đúng với qui tắc nhưng không tồn tại bởi chưa có ai tạo. Lúc đó chủ chủ đề có thể gửi thư cho khách hàng tới tài khoản bịa ra nhưng chưa đăng ký? Mà mục đích của anh ta có lẽ là sẽ gửi thư. Nếu không anh ta duyệt email chỉ để tốn sức lực, điện, nước?

Nếu chỉ làm cho "đỡ buồn", luyện code thì phải cho định nghĩa, thế nào là email hợp lệ. Cứ cho vài ví dụ thay định nghĩa thì thánh cũng không làm được. Mà làm xong thì kiểm chứng thế nào? Không có cái định nghĩa, cái mẫu để so sánh thì làm sao biết code chạy đúng hay sai? Còn nếu cho định nghĩa thì cứ theo định nghĩa mà xét thôi Email có thể không hợp lệ, không chấp nhận bởi Gmail nhưng đúng với định nghĩa thì vẫn lấy. Vì theo định nghĩa để luyện code thôi mà.
 
Lần chỉnh sửa cuối:
...
Nhẽ ra ở ngay 'form' đăng ký của chủ thớt có chức năng kiểm tra sự tồn tại của email khi người ta nhập vào.
Điều này không phải là chỗ nói ở đây.
Đề bài này giả sử rằng cái tên đặt không được phép "random"; tức nó phải có khả năng tách ra được thành từng từ tiếng Việt.
Đề bài trở thành: làm cách nào để chứng nhận một cụm ký tự, nếu bỏ đi ký tự số ở đầu và cuối, và bỏ đi ký tự gạch dưới, thì có thể tách thành từng từ tiếng Việt?
Ví dụ: 123anhiuem456, bỏ đi 123 ở đầu, và 456 ở cuối, còn lại tách ra được "anh iu em" (tùy theo từ điển của bạn cho phép từ iu hay không)

Chú: nếu là bình thường thì tôi cho rằng loại đề bài này là rác rưởi. Nhưng ở đây nó kích thích cái khả năng suy nghĩ tiếng Việt cho nên tôi thấy thú. Khoa học Văn Hóa mới là đam mê chính của tôi mà.
 
Web KT

Bài viết mới nhất

Back
Top Bottom