Làm thế nào để bạn thực hiện một bộ lọc thô tục tốt?


207

Nhiều người trong chúng ta cần phải đối phó với đầu vào của người dùng, truy vấn tìm kiếm và các tình huống trong đó văn bản đầu vào có khả năng chứa ngôn ngữ thô tục hoặc không mong muốn. Thường thì điều này cần phải được lọc ra.

Nơi nào người ta có thể tìm thấy một danh sách tốt các từ chửi thề trong các ngôn ngữ và phương ngữ khác nhau?

Có API nào có sẵn cho các nguồn chứa danh sách tốt không? Hoặc có thể một API chỉ đơn giản nói "có, cái này sạch" hoặc "không cái này bẩn" với một số tham số?

Một số phương pháp tốt để bắt những người đang cố lừa hệ thống, như $$, azz hoặc a55 là gì?

Điểm thưởng nếu bạn cung cấp giải pháp cho PHP. :)

Chỉnh sửa: Trả lời các câu trả lời đơn giản là tránh vấn đề lập trình:

Tôi nghĩ rằng có một nơi dành cho loại bộ lọc này khi, ví dụ, người dùng có thể sử dụng tìm kiếm hình ảnh công cộng để tìm hình ảnh được thêm vào nhóm cộng đồng nhạy cảm. Nếu họ có thể tìm kiếm "dương vật", thì họ có thể sẽ nhận được nhiều hình ảnh, vâng. Nếu chúng ta không muốn có hình ảnh về điều đó, thì việc ngăn chặn từ đó như một thuật ngữ tìm kiếm là một người gác cổng tốt, mặc dù phải thừa nhận rằng đó không phải là một phương pháp hoàn hảo. Lấy danh sách các từ ở vị trí đầu tiên là câu hỏi thực sự.

Vì vậy, tôi thực sự đang đề cập đến một cách để tìm ra một mã thông báo duy nhất có bẩn hay không và sau đó chỉ đơn giản là không cho phép nó. Tôi không bận tâm đến việc ngăn chặn một tình cảm như tài liệu tham khảo "hươu cao cổ dài" hoàn toàn vui nhộn. Không có gì bạn có thể làm ở đó. :)


12
Thật là xấu hổ khi tất cả các câu trả lời hàng đầu là sự chuyển hướng tồn tại và thất bại từ thách thức lập trình. Với các dịch vụ tính toán "cyborg" như Mechanical Turk đạt được hơi nước và hầu hết tất cả các phần mềm đều trở nên xã hội, điều quan trọng hơn bao giờ hết là phải có một nội dung cờ đỏ và gây chú ý cho người điều hành!
JasonSmith

10
Hãy cẩn thận về ngữ cảnh ngôn ngữ, đặc biệt nếu bạn đang thực hiện i18n. Tôi đã từng cố gắng thành lập một Nhóm Google cho khóa học mà tôi đã đưa ra có tên là "Sanal ortamda görselleştirme", tiếng Thổ Nhĩ Kỳ cho "Trực quan hóa trong phương tiện ảo". Google đã đủ ngu ngốc để từ chối nó vì tiêu đề chứa từ "hậu môn" . Sanal [tr] = Virtual [en] và Google đã xấu hổ buộc tội tôi thô tục! : D Xin đừng để những điều kỳ lạ như thế này xảy ra.
edgerunner

Điều gì về nếu bạn tìm kiếm từ trong tiếng Tây Ban Nha ? Bạn thực sự có thể đi xung quanh bộ lọc Google Images theo cách đó (nếu bạn được bản địa hóa sang một số ngôn ngữ khác).
new123456

Một đề nghị khác là KHÔNG cấm những từ này, nhưng để đăng ký người dùng sử dụng chúng. Nếu người dùng / IP nhận được nhiều hơn 2, 3 hoặc bất cứ điều gì bạn muốn, thì hãy chặn người đó. Không phải là hoàn hảo, nhưng tôi nghĩ rằng nó sẽ bất tiện hơn nhiều khi bị chặn và phải thay đổi người dùng / IP / cả hai hơn là viết 'chú thỏ trắng mịn' thay vì 'âm hộ'. Một phần, người dùng không biết NHỮNG từ hoặc cụm từ nào họ không thể sử dụng, vì vậy họ không thể đoán những từ xấu khác nhau dễ dàng như vậy khi họ bị cấm.
Francisco Presencia

1
Bộ lọc thô tục là một ý tưởng tồi. Thật khó để phân biệt giữa ai đó đang cố lừa hệ thống ("Fudge you!") Và ai đó nói một cách hợp pháp về điều gì đó hoàn toàn phù hợp ("Tôi thích kẹo mềm sô cô la.")
clickbait

Câu trả lời:


176

Bộ lọc tục tĩu: Ý tưởng tồi, hay Ý tưởng tồi tệ xen kẽ?

Ngoài ra, người ta không thể quên Lịch sử chưa được biết về SpeedChat của Toontown , trong đó ngay cả khi sử dụng "danh sách trắng từ an toàn" đã dẫn đến một đứa trẻ 14 tuổi nhanh chóng phá vỡ nó bằng: "Tôi muốn dán con hươu cao cổ dài của tôi lên chú thỏ trắng mịn màng của bạn . "

Điểm mấu chốt: Cuối cùng, đối với bất kỳ hệ thống nào bạn triển khai, hoàn toàn không có sự thay thế nào cho đánh giá của con người (cho dù là ngang hàng hay không). Vui lòng triển khai một công cụ thô sơ để thoát khỏi ổ đĩa, nhưng đối với người bị troll xác định, bạn nhất định phải có cách tiếp cận không dựa trên thuật toán.

Một hệ thống loại bỏ ẩn danh và giới thiệu trách nhiệm giải trình (điều mà Stack Overflow làm tốt) cũng hữu ích, đặc biệt là để giúp chống lại QUÀ TẶNG của John Gabriel

Bạn cũng đã hỏi nơi bạn có thể lấy danh sách thô tục để bắt đầu - một dự án nguồn mở để kiểm tra là Dansguardian - kiểm tra mã nguồn cho danh sách thô tục mặc định của họ. Ngoài ra còn có một Danh sách cụm từ bên thứ ba bổ sung mà bạn có thể tải xuống cho proxy có thể là một điểm lượm lặt hữu ích cho bạn.

Chỉnh sửa để trả lời chỉnh sửa câu hỏi: Cảm ơn bạn đã làm rõ về những gì bạn đang cố gắng làm. Trong trường hợp đó, nếu bạn chỉ đang cố gắng thực hiện một bộ lọc từ đơn giản, có hai cách bạn có thể làm. Một là tạo ra một biểu thức chính quy dài với tất cả các cụm từ bị cấm mà bạn muốn kiểm duyệt, và chỉ đơn giản là thực hiện một tìm kiếm / thay thế regex với nó. Một regex như:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

và chạy nó trên chuỗi đầu vào của bạn bằng cách sử dụng preg_match () để kiểm tra bán buôn cho lần truy cập,

hoặc preg numplace () để xóa chúng.

Bạn cũng có thể tải các hàm đó lên bằng các mảng thay vì một biểu thức chính dài và đối với các danh sách từ dài, nó có thể dễ quản lý hơn. Xem preg numplace () để biết một số ví dụ hay về cách các mảng có thể được sử dụng linh hoạt.

Để biết thêm các ví dụ lập trình PHP, hãy xem trang này để biết một lớp chung chung nâng cao để lọc từ mà * lấy ra các chữ cái trung tâm từ các từ bị kiểm duyệt, và câu hỏi Stack Overflow trước đó cũng có một ví dụ về PHP (phần có giá trị chính trong đó là cách tiếp cận từ được lọc dựa trên SQL - bộ bù leet-speak có thể được phân phối nếu bạn thấy không cần thiết).

Bạn cũng đã thêm: " Lấy danh sách các từ ở vị trí đầu tiên là câu hỏi thực sự. " - ngoài một số liên kết Dansgaurdian trước đây, bạn có thể thấy .zip có 45 từ này hữu ích.


@JPLemme: Có nên - Tôi nên thêm [sic] sau đó, vì đó là cách Atwood đánh vần nó. :)
HanClinto

"Câu lạc bộ chim cánh cụt" thêm hàng trăm mục vào bộ lọc thô tục của họ mỗi ngày : raphkoster.com/2008/05/09/ mẹo
Frank Farmer

6
Một trình bao bọc ranh giới từ xung quanh các tùy chọn regex của bạn sẽ ngăn ngừa lỗi clbuttic
cjk

@ck: Chỉ khi bạn không lo lắng về việc có thể lọc ra những từ sai chính tả "F * ckkkk yo 'asssss" :) Tôi không chắc chắn tôi tin rằng những kẻ troll của tôi có chính tả rất chính xác.
HanClinto

1
Nếu bạn muốn nghe câu chuyện "Fluffy White Bunny" từ miệng chú ngựa hoạt ngôn, thì đây là một tập podcast ngay bây giờ: socialmediaclarity.tumblr.com/post/70499341079/ trộm
F. Randall Farmer

44

Mặc dù tôi biết rằng câu hỏi này khá cũ, nhưng đó là một câu hỏi thường xảy ra ...

Có cả lý do và nhu cầu riêng biệt đối với các bộ lọc thô tục (xem mục Wikipedia ở đây ), nhưng chúng thường không chính xác 100% vì những lý do rất khác biệt; Bối cảnhđộ chính xác .

Nó phụ thuộc (hoàn toàn) vào những gì bạn đang cố gắng đạt được - ở mức cơ bản nhất, có lẽ bạn đang cố gắng che đậy " bảy từ bẩn thỉu " và sau đó một số ... Một số doanh nghiệp cần lọc cơ bản thô tục nhất: cơ bản chửi thề, URL hoặc thậm chí thông tin cá nhân, v.v., nhưng những người khác cần ngăn chặn việc đặt tên tài khoản bất hợp pháp (Xbox live là một ví dụ) hoặc hơn thế nữa ...

Nội dung do người dùng tạo không chỉ chứa các từ chửi thề tiềm năng, nó cũng có thể chứa các tham chiếu gây khó chịu cho:

  • Hành vi tình dục
  • Xu hướng tính dục
  • Tôn giáo
  • Dân tộc
  • Vân vân...

Và có khả năng, trong nhiều ngôn ngữ. Shutterstock đã phát triển danh sách các từ bẩn cơ bản trong 10 ngôn ngữ cho đến nay, nhưng nó vẫn cơ bản và rất hướng đến nhu cầu 'gắn thẻ' của họ. Có một số danh sách khác có sẵn trên web.

Tôi đồng ý với câu trả lời được chấp nhận rằng đó không phải là một ngành khoa học xác định và ngôn ngữ là một thách thức liên tục phát triển nhưng là một trong đó tỷ lệ bắt 90% tốt hơn 0%. Nó hoàn toàn phụ thuộc vào mục tiêu của bạn - những gì bạn đang cố gắng đạt được, mức độ hỗ trợ bạn có và tầm quan trọng của việc loại bỏ những lời tục tĩu của các loại khác nhau.

Khi xây dựng bộ lọc, bạn cần xem xét các yếu tố sau và cách chúng liên quan đến dự án của bạn:

  • Từ / cụm từ
  • Từ viết tắt (FOAD / LMFAO, v.v.)
  • Dương tính giả (từ, địa điểm và tên như 'mishit', 'scunthorpe' và 'titsworth')
  • URL (trang web khiêu dâm là một mục tiêu rõ ràng)
  • Thông tin cá nhân (email, địa chỉ, điện thoại, v.v. - nếu có)
  • Lựa chọn ngôn ngữ (thường là tiếng Anh theo mặc định)
  • Kiểm duyệt (làm thế nào, nếu có, bạn có thể tương tác với nội dung do người dùng tạo và những gì bạn có thể làm với nội dung đó)

Bạn có thể dễ dàng xây dựng bộ lọc thô tục chiếm 90% + từ thô tục, nhưng bạn sẽ không bao giờ đạt 100%. Nó chỉ là không thể. Bạn càng muốn đến gần 100%, càng khó hơn ... Đã xây dựng một công cụ thô tục phức tạp trong quá khứ xử lý hơn 500 nghìn tin nhắn thời gian thực mỗi ngày, tôi sẽ đưa ra lời khuyên sau:

Một bộ lọc cơ bản sẽ bao gồm:

  • Xây dựng một danh sách các từ thô tục áp dụng
  • Phát triển một phương pháp xử lý các dẫn xuất thô tục

Một trình quay phim phức tạp vừa phải sẽ bao gồm, (Ngoài bộ lọc cơ bản):

  • Sử dụng khớp mẫu phức tạp để xử lý các dẫn xuất mở rộng (sử dụng biểu thức chính quy nâng cao)
  • Đối phó với Leetspeak (l33t)
  • Xử lý dương tính giả

Một bộ lọc phức tạp sẽ liên quan đến một số điều sau đây (Ngoài bộ lọc vừa phải):

  • Danh sách trắng và danh sách đen
  • Naive bayesian suy luận lọc các cụm từ / thuật ngữ
  • Chức năng Soundex (trong đó một từ nghe giống như một từ khác)
  • Khoảng cách Levenshtein
  • Xuất phát
  • Người điều hành con người để giúp hướng dẫn công cụ lọc tìm hiểu bằng ví dụ hoặc khi kết quả khớp không đủ chính xác mà không có hướng dẫn (hệ thống tự cải tiến / liên tục)
  • Có lẽ một số dạng của động cơ AI

28

Tôi không biết về bất kỳ thư viện tốt nào cho việc này, nhưng bất cứ điều gì bạn làm, hãy chắc chắn rằng bạn sai theo hướng cho phép mọi thứ đi qua. Tôi đã xử lý các hệ thống không cho phép tôi sử dụng "mpassell" làm tên người dùng, vì nó chứa "ass" làm chuỗi con. Đó là một cách tuyệt vời để khiến người dùng xa lánh!


17
hoặc cấm "buồng lái" trong trò chơi tàu vũ trụ bay
Shinhan

24

Trong một cuộc phỏng vấn việc làm của tôi, công ty CTO, người đang phỏng vấn tôi đã thử một trò chơi từ / web mà tôi đã viết bằng Java. Trong danh sách từ của toàn bộ từ điển tiếng Anh Oxford, từ đầu tiên được đưa ra để đoán là gì?

Tất nhiên, từ hôi nhất trong ngôn ngữ tiếng Anh.

Bằng cách nào đó, tôi vẫn nhận được lời mời làm việc, nhưng sau đó tôi đã theo dõi một danh sách từ thô tục (không giống như từ này ) và viết một kịch bản nhanh để tạo một từ điển mới mà không cần tất cả các từ xấu (thậm chí không cần phải xem danh sách) .

Đối với trường hợp cụ thể của bạn, tôi nghĩ rằng việc so sánh tìm kiếm với các từ thực có vẻ giống như cách đi với một danh sách từ như thế. Các kiểu / dấu chấm câu thay thế đòi hỏi nhiều công sức hơn một chút, nhưng tôi nghi ngờ người dùng sẽ sử dụng nó thường đủ để trở thành một vấn đề.


8
Lạc đề, nhưng từ hôi nhất là gì? Tôi luôn coi đó là từ c hoặc từ n, nhưng tôi cho rằng mọi người nghĩ từ f là
Jeff

2
"Tôi nghi ngờ người dùng sẽ sử dụng thường xuyên đủ để trở thành một vấn đề" Giữ hy vọng sống. Khi người dùng vấp vào bộ lọc, họ sẽ tìm cách lách luật. Nó có thể đơn giản như thay thế các chữ cái bằng số thành vị trí lẻ của không gian, v.v.).
BryanH

21

một hệ thống lọc thô tục sẽ không bao giờ hoàn hảo, ngay cả khi lập trình viên đang tự phụ và theo kịp mọi diễn biến khỏa thân

điều đó nói rằng, bất kỳ danh sách 'từ ngữ nghịch ngợm' nào cũng có khả năng thực hiện tốt như bất kỳ danh sách nào khác, vì vấn đề cơ bản là sự hiểu biết ngôn ngữ khá khó hiểu với công nghệ hiện tại

vì vậy, giải pháp thực tế duy nhất là gấp đôi:

  1. sẵn sàng cập nhật từ điển của bạn thường xuyên
  2. thuê một biên tập viên của con người để sửa lỗi tích cực sai (ví dụ "clbuttic" thay vì "cổ điển") và phủ định sai (rất tiếc! đã bỏ lỡ một!)

1
Chỉ cần phát hiện từ có khoảng trắng ở hai bên, dừng hoàn toàn sau, Không?
David D

1
H3ll không có người đàn ông, chỉ hoạt động cho các trường hợp tầm thường nhất; chúng ta đang đối phó với con người ở đây và họ khá thông minh :)
Steven A. Lowe

14

Cách duy nhất để ngăn chặn đầu vào của người dùng gây khó chịu là ngăn chặn tất cả đầu vào của người dùng.

Nếu bạn khăng khăng cho phép người dùng nhập liệu và cần kiểm duyệt, thì hãy kết hợp với người điều hành.



7

Về truy vấn "lừa hệ thống" của bạn, bạn có thể xử lý điều đó bằng cách bình thường hóa cả danh sách "từ xấu" và văn bản do người dùng nhập trước khi thực hiện tìm kiếm của bạn. ví dụ: Sử dụng một loạt các biểu thức chính quy (hoặc tr nếu PHP có) để chuyển đổi [z $ 5] thành "s", [4 @] thành "a", v.v., sau đó so sánh danh sách "từ xấu" được chuẩn hóa bản văn. Lưu ý rằng việc chuẩn hóa có thể có khả năng dẫn đến các kết quả dương tính giả, mặc dù tôi không thể nghĩ ra bất kỳ trường hợp thực tế nào vào lúc này.

Thách thức lớn hơn là tìm ra thứ gì đó sẽ cho phép mọi người trích dẫn "Cây bút này mạnh hơn thanh kiếm" trong khi chặn "peni s".


14
Đừng quên chuyên gia-exchange.com và pen-island.com; những url trang web đó một lần không chứa dấu gạch nối.
BryanH

7

Cảnh giác với các vấn đề bản địa hóa: từ ngữ trong một ngôn ngữ có thể là một từ hoàn toàn bình thường trong ngôn ngữ khác.

Một ví dụ hiện tại về điều này: ebay sử dụng cách tiếp cận từ điển để lọc "từ xấu" khỏi phản hồi. Nếu bạn cố gắng nhập bản dịch tiếng Đức của "đây là một giao dịch hoàn hảo" ("das war eine perfekte Transaktion"), ebay sẽ từ chối phản hồi do những từ xấu.

Tại sao? Bởi vì từ tiếng Đức có nghĩa là "đã" là "chiến tranh" và "chiến tranh" nằm trong từ điển ebay của "từ xấu".

Vì vậy, hãy cẩn thận với các vấn đề nội địa hóa.


6

Nếu bạn có thể làm một cái gì đó như Digg / Stackoverflow nơi người dùng có thể tải xuống / đánh dấu nội dung tục tĩu ... hãy làm như vậy.

Sau đó, tất cả những gì bạn cần làm là xem xét người dùng "nghịch ngợm" và chặn họ nếu họ vi phạm các quy tắc.


4

Tôi đến bữa tiệc muộn một chút, nhưng tôi có một giải pháp có thể hiệu quả với một số người đọc nó. Nó trong javascript thay vì php, nhưng có một lý do hợp lệ cho nó.

Tiết lộ đầy đủ, tôi đã viết plugin này ...

Dù sao đi nữa.

Cách tiếp cận tôi đã thực hiện là cho phép người dùng "Chọn tham gia" vào bộ lọc thô tục của họ. Về cơ bản thô tục sẽ được cho phép theo mặc định, nhưng nếu người dùng của tôi không muốn đọc nó, họ sẽ không phải. Điều này cũng giúp với vấn đề "l33t sp3 @ k".

Khái niệm này là một đơn giản plugin được máy chủ chèn vào nếu tài khoản của khách hàng đang cho phép lọc thô tục. Từ đó, chỉ là một vài dòng đơn giản xóa tan những lời thề.

Đây là trang demo
https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/

<div id="foo">
    ass will fail but password will not
</div>

<script>
    // code:
    $('#foo').profanityFilter({
        customSwears: ['ass']
    });
</script>

kết quả

*** sẽ thất bại nhưng mật khẩu sẽ không


Đây là một bản demo làm việc của jsFiddle để đi kèm với câu trả lời này.
Chase Florell

Rất ngây thơ. Không lọca$$
Cầu thủ chạy cánh Sendon

3
@EmaohAiman ​​nó không bao giờ có ý định lọc ra tiếng nói . Tôi không khuyên bạn nên cố gắng lọc nó, vì đó là một trận thua. Bộ lọc thô tục mà tôi đã đăng là "được xây dựng để cho phép người dùng" Chọn tham gia "để lọc thô tục". có nghĩa là nó được sử dụng tốt nhất trên một trang web cho phép thô tục theo mặc định. Nếu bạn muốn lọc a$$, sau đó bạn thêm nó vào danh sách bộ lọc.
Chase Florell

4

Tôi đã thu thập 2200 từ xấu trong 12 ngôn ngữ: en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, no, pl, pt, ru, sv , th, tlh, tr, zh.

Các tùy chọn kết xuất MySQL, JSON, XML hoặc CSV có sẵn.

https://github.com/turalus/openDB

Tôi khuyên bạn nên thực thi SQL này vào DB của mình và kiểm tra mọi lúc khi người dùng nhập nội dung nào đó.


2

Đừng. Nó chỉ dẫn đến vấn đề. Một kinh nghiệm cá nhân mà tôi có với các bộ lọc thô tục là thời gian tôi bị đá / cấm từ kênh IRC khi đề cập rằng tôi đã "đi qua cây cầu đến Hancock trong vài giờ" hoặc một cái gì đó cho hiệu ứng đó.


2

Tôi đồng ý với bài viết của HanClinto cao hơn trong cuộc thảo luận này. Tôi thường sử dụng các biểu thức thông thường để văn bản đầu vào khớp chuỗi. Và đây là một nỗ lực vô ích, vì, như bạn đã đề cập ban đầu, bạn phải tính toán rõ ràng cho mọi hình thức lừa đảo phổ biến trên mạng trong danh sách "bị chặn" của bạn.

Bên cạnh đó, trong khi những người khác đang tranh luận về đạo đức kiểm duyệt, tôi phải đồng ý rằng một số hình thức là cần thiết trên web. Một số người chỉ đơn giản là thích đăng bài thô tục vì nó có thể gây khó chịu ngay lập tức cho một lượng lớn người, và hoàn toàn không cần suy nghĩ về phần của tác giả.

Cảm ơn bạn cho những ý tưởng.

Quy tắc HanClinto!


2

Khi bạn có một bảng MYSQL tốt về một số từ xấu bạn muốn lọc (tôi đã bắt đầu với một trong các liên kết trong chuỗi này), bạn có thể làm một cái gì đó như thế này:

$errors = array();  //Initialize error array (I use this with all my PHP form validations)

$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.

$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD').  All your values in the profanity table will need to be UPPERCASE for this to work.

$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation).  Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).

$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution.  Make sure you replace Z's with S's in your profanity database for this to work properly.  Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'.  The profanity table should have the "rendered" version of the bad words.

$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input.  You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.

if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.


//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";

Tôi chắc chắn có một cách hiệu quả hơn để thực hiện tất cả những sự thay thế đó, nhưng tôi không đủ thông minh để tìm ra nó (và điều này dường như hoạt động tốt, mặc dù không hiệu quả).

Tôi tin rằng bạn nên sai lầm khi cho phép người dùng đăng ký và sử dụng con người để lọc và thêm vào bảng thô tục của bạn theo yêu cầu. Mặc dù tất cả phụ thuộc vào chi phí của một dương tính giả (từ ổn được gắn cờ là xấu) so với âm tính giả (từ xấu được thông qua). Điều đó cuối cùng sẽ chi phối mức độ tích cực hoặc bảo thủ của bạn trong chiến lược lọc của bạn.

Tôi cũng sẽ rất cẩn thận nếu bạn muốn sử dụng các ký tự đại diện, vì đôi khi chúng có thể cư xử thô lỗ hơn bạn dự định.


1

Thành thật mà nói, tôi đã để họ lấy từ "lừa hệ thống" ra và cấm thay vào đó, đó chỉ là tôi. Nhưng nó cũng làm cho việc lập trình đơn giản hơn.

Những gì tôi sẽ làm là triển khai một bộ lọc regex như vậy: /[\s]dooby (doo?)[\s]/ihoặc từ đó được thêm tiền tố vào những người khác , /[\s]doob(er|ed|est)[\s]/. Những điều này sẽ ngăn việc lọc các từ như bị tấn công, hoàn toàn hợp lệ, nhưng cũng đòi hỏi kiến ​​thức về các biến thể khác và cập nhật bộ lọc thực tế nếu bạn học một từ mới. Rõ ràng đây là tất cả các ví dụ, nhưng bạn phải quyết định cách tự làm.

Tôi sẽ không loại ra tất cả những từ tôi biết, không phải khi tôi thực sự không muốn biết chúng.


1

Tôi đồng ý với sự vô ích của chủ đề, nhưng nếu bạn phải có bộ lọc, hãy xem Boxwood của Ning :

Boxwood là một phần mở rộng PHP để thay thế nhanh chóng nhiều từ trong một đoạn văn bản. Nó hỗ trợ phân biệt chữ hoa chữ thường và chữ hoa chữ thường. Nó yêu cầu văn bản mà nó hoạt động được mã hóa thành UTF-8.

Cũng xem bài đăng blog này để biết thêm chi tiết:

Với Boxwood, bạn có thể có danh sách các thuật ngữ tìm kiếm miễn là bạn muốn - thuật toán tìm kiếm và thay thế không bị chậm hơn với nhiều từ hơn trong danh sách các từ cần tìm. Nó hoạt động bằng cách xây dựng một bộ ba tất cả các cụm từ tìm kiếm và sau đó quét văn bản chủ đề của bạn chỉ một lần, đi xuống các yếu tố của bộ ba và so sánh chúng với các ký tự trong văn bản của bạn. Nó hỗ trợ US-ASCII và UTF-8, khớp trường hợp nhạy cảm hoặc không nhạy cảm và có một số logic kiểm tra ranh giới từ tiếng Anh làm trung tâm.


1

Tôi kết luận, để tạo ra một bộ lọc thô tục tốt, chúng ta cần 3 thành phần chính, hoặc ít nhất đó là những gì tôi sẽ làm. Đây là:

  1. Bộ lọc: dịch vụ nền xác minh đối với danh sách đen, từ điển hoặc đại loại như thế.
  2. Không cho phép tài khoản ẩn danh
  3. Báo cáo lạm dụng

Một phần thưởng, nó sẽ là phần thưởng cho những người đóng góp với các phóng viên lạm dụng chính xác và trừng phạt người vi phạm, ví dụ như đình chỉ tài khoản của họ.


1

Cũng vào cuối trò chơi, nhưng thực hiện một số nghiên cứu và tình cờ gặp ở đây. Như những người khác đã đề cập, nó gần như không thể nếu nó được tự động hóa, nhưng nếu thiết kế / yêu cầu của bạn có thể liên quan đến một số trường hợp (nhưng không phải tất cả thời gian) để xem xét liệu nó có tục tĩu hay không, bạn có thể xem xét ML. https://docs.microsoft.com/en-us/azure/cognitive-service/content-moderator/text-modutions-api#profanity là lựa chọn hiện tại của tôi ngay bây giờ vì nhiều lý do:

  • Hỗ trợ nhiều nội địa hóa
  • Họ liên tục cập nhật cơ sở dữ liệu, vì vậy tôi không phải theo kịp tiếng lóng hoặc ngôn ngữ mới nhất (vấn đề bảo trì)
  • Khi có xác suất cao (nghĩa là 90% trở lên), bạn có thể từ chối nó một cách thực tế
  • Bạn có thể quan sát danh mục gây ra một lá cờ có thể có hoặc không thô tục và có thể nhờ ai đó xem lại để dạy rằng nó có hoặc không tục tĩu.

Đối với nhu cầu của tôi, nó dựa trên dịch vụ thương mại thân thiện với công chúng (OK, trò chơi điện tử) mà những người dùng khác có thể / sẽ thấy tên người dùng, nhưng thiết kế yêu cầu nó phải thông qua bộ lọc thô tục để từ chối tên người dùng gây khó chịu. Điều đáng buồn ở đây là vấn đề "clbuttic" cổ điển rất có thể sẽ xảy ra do tên người dùng thường là một từ (tối đa N ký tự) đôi khi nhiều từ được ghép nối ... Một lần nữa, dịch vụ nhận thức của Microsoft sẽ không gắn cờ "Hỗ trợ" là Văn bản. HasProfanity = true nhưng có thể đánh dấu một trong những loại xác suất cao.

Khi OP hỏi, còn "a $$" thì sao, đây là kết quả khi tôi chuyển qua bộ lọc: nhập mô tả hình ảnh ở đâynhư bạn thấy, nó đã xác định nó không tục tĩu, nhưng có xác suất cao, vì vậy, đánh dấu là khuyến nghị xem xét (tương tác của con người).

Khi xác suất cao, tôi có thể quay lại "Tôi xin lỗi, tên đó đã được sử dụng" (ngay cả khi không phải vậy) để nó bớt gây khó chịu cho những người chống kiểm duyệt hoặc một cái gì đó, nếu chúng tôi không muốn để tích hợp đánh giá của con người hoặc trả lại "Tên người dùng của bạn đã được thông báo cho bộ phận vận hành trực tiếp, bạn có thể đợi tên người dùng của mình được xem xét và phê duyệt hoặc chọn tên người dùng khác". Hay bất cứ cái gì...

Nhân tiện, chi phí / giá cho dịch vụ này khá thấp so với mục đích của tôi (tần suất tên người dùng bị thay đổi?), Nhưng một lần nữa, đối với OP có thể thiết kế yêu cầu các truy vấn chuyên sâu hơn và có thể không lý tưởng để trả tiền / đăng ký Dịch vụ ML, hoặc không thể có đánh giá / tương tác của con người. Tất cả phụ thuộc vào thiết kế ... Nhưng nếu thiết kế phù hợp với dự luật, có lẽ đây có thể là giải pháp của OP.

Nếu quan tâm, tôi có thể liệt kê những khuyết điểm trong bình luận trong tương lai.


-2

Bộ lọc thô tục là một ý tưởng tồi. Lý do là bạn không thể bắt được mọi từ chửi thề. Nếu bạn cố gắng, bạn nhận được dương tính giả.

Bắt chữ

Hãy nói rằng bạn muốn bắt F-Word. Dễ thôi phải không? Được rồi để xem.

Bạn có thể lặp qua một chuỗi để tìm "chết tiệt". Thật không may, mọi người lừa bộ lọc ngày nay. Bộ lọc thô tục đã không chọn "fuk."

Người ta có thể cố gắng kiểm tra nhiều cách viết và biến thể của từ, nhưng điều đó sẽ làm chậm hiệu suất mã của bạn. Để bắt được F-Word, bạn cần tìm "fuc", "Fuc", "fuk", "Fuk", "F ***", v.v. Và danh sách cứ lặp đi lặp lại.

Tránh vô tội

Được rồi, vậy làm thế nào để làm cho nó không phân biệt chữ hoa chữ thường và bỏ qua khoảng trắng để nó bắt được "F u C k"? Điều đó có vẻ như là một ý tưởng tốt, nhưng ai đó có thể bỏ qua bộ lọc thô tục với "Fucks"

Bạn bỏ qua dấu câu.

Bây giờ đó là một vấn đề thực sự, vì một câu như " Hell o, there!" sẽ chọn là "địa ngục" và "Ai lừa ?" nhặt lên là "ass."

Và đang có một loạt các từ mà bạn phải loại trừ khỏi bộ lọc, chẳng hạn như "Nhược điểm tit ution," bởi vì có "tit" trong đó.

Mọi người cũng có thể sử dụng các từ thay thế, chẳng hạn như "Frack." Bạn chặn nó quá? Thế còn "bút là" cho "dương vật" thì sao? Chương trình của bạn không có trí thông minh nhân tạo để biết chuỗi đó là tốt hay xấu.

Đừng sử dụng các bộ lọc thô tục. Chúng khó phát triển và chúng chậm như bò.


2
-1 không trả lời câu hỏi OP và chủ yếu là nhận xét ý kiến. Có nhiều trường hợp sử dụng hợp lệ cho tiện ích này. Ví dụ: làm sạch mã nguồn trước khi kiểm toán để công ty không bị bối rối.
davidjmcclelland

-3

Đừng.

Bởi vì:

  • Clbuttic
  • Sự thô tục không phải là OMG EVIL
  • Sự thô tục không thể được định nghĩa một cách hiệu quả
  • Hầu hết mọi người có lẽ không đánh giá cao việc được "bảo vệ" khỏi thô tục

Chỉnh sửa: Mặc dù tôi đồng ý với người bình luận nói rằng "kiểm duyệt là sai", đó không phải là bản chất của câu trả lời này.


90
10 upvote cho câu trả lời không này? Như thể bất cứ ai muốn lọc thô tục phải là một nửa dí dỏm đạo đức? Tốt đau buồn. Đây là một câu hỏi hợp lệ và câu trả lời lái xe lén lút không nên được khen thưởng. -1.
Kluge

12
@ Kludge: Bạn là người duy nhất nói "đạo đức nửa vời", thực tế tôi không nói gì về bản chất đạo đức của việc thực hiện một bộ lọc thô tục cả. Mitch đưa ra một phần lý do tôi nói "không", và đó không phải là một lần lái xe lén lút. Đôi khi "không" là câu trả lời đúng cho "làm thế nào để tôi ...?" [cont'd]
mí mắt

2
@eyelidlessness: Có lẽ bạn đúng khi tôi đọc quá nhiều vào câu trả lời của bạn. Nhưng vì bạn không nói rõ, tôi không thể biết liệu sự phản đối của bạn là trên cơ sở đạo đức hay kỹ thuật. Tôi sẽ thừa nhận rằng tôi mệt mỏi với những bình luận "kiểm duyệt dưới mọi hình thức là xấu".
Kluge

5
-1. "Đừng" không phải là một câu trả lời hợp lệ bất kể vấn đề đạo đức hay kỹ thuật. Có rất nhiều thời điểm hoàn toàn thích hợp để lọc nội dung dựa trên tính chất của nội dung. Hãy tưởng tượng một trang web thương mại điện tử bán đồ lót của phụ nữ và cung cấp tính năng 'Nhận xét'. Bạn có thực sự muốn các chàng trai chuẩn bị xả rác trang web của bạn với rác? Dĩ nhiên là không. Và có lẽ nó quá cồng kềnh khi có quá trình phê duyệt của con người. Một bộ lọc đơn giản để từ chối đánh giá với rác là một điều tốt.
pspahn

3
@pspahn, "không" là câu trả lời chính xác cho bất kỳ câu hỏi nào yêu cầu giải pháp cho vấn đề sai. Chắc chắn có những trường hợp hợp lệ trong đó nội dung nên được kiểm duyệt, nhưng "bộ lọc thô tục" thì không.
mí mắt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.