आप एक अच्छा अपवित्रता फ़िल्टर कैसे लागू करते हैं?


207

हम में से कई को उपयोगकर्ता इनपुट, खोज क्वेरी और उन स्थितियों से निपटने की आवश्यकता है जहां इनपुट पाठ में संभवतः अपवित्रता या अवांछनीय भाषा हो सकती है। अक्सर इसे छानने की जरूरत होती है।

विभिन्न भाषाओं और बोलियों में शपथ शब्दों की एक अच्छी सूची कहां मिल सकती है?

क्या एपीआई ऐसे स्रोतों के लिए उपलब्ध हैं जिनमें अच्छी सूचियाँ हैं? या हो सकता है कि एक एपीआई जो केवल "हाँ यह साफ है" या "नहीं यह गंदा है" कुछ मापदंडों के साथ?

$ $, Azz, या a55 जैसे सिस्टम को चकमा देने की कोशिश कर रहे लोगों को पकड़ने के लिए कुछ अच्छे तरीके क्या हैं?

यदि आप PHP के लिए समाधान प्रदान करते हैं तो बोनस अंक। :)

संपादित करें: जवाब देने के लिए जो कहते हैं कि बस प्रोग्रामेटिक मुद्दे से बचें:

मुझे लगता है कि इस तरह के फिल्टर के लिए एक जगह है जब, उदाहरण के लिए, उपयोगकर्ता उन चित्रों को खोजने के लिए सार्वजनिक छवि खोज का उपयोग कर सकता है जो एक संवेदनशील सामुदायिक पूल में जुड़ जाते हैं। यदि वे "लिंग" की खोज कर सकते हैं, तो उन्हें संभवतः, हां की कई तस्वीरें मिलेंगी। यदि हम उस की तस्वीरें नहीं चाहते हैं, तो शब्द को खोज शब्द के रूप में रोकना एक अच्छा द्वारपाल है, हालांकि वास्तव में एक मूर्खतापूर्ण विधि नहीं है। पहले शब्दों की सूची प्राप्त करना ही वास्तविक प्रश्न है।

इसलिए मैं वास्तव में एक एकल टोकन से पता लगाने के तरीके का उल्लेख कर रहा हूं कि वह गंदा है या नहीं और फिर इसे हटा दें। मैं पूरी तरह से प्रफुल्लित करने वाला "लंबे गर्दन वाले जिराफ़" संदर्भ जैसी भावना को रोकने की जहमत नहीं उठाता। वहां आप कुछ नहीं कर सकते। :)


12
यह शर्म की बात है कि सभी शीर्ष उत्तर प्रोग्रामिंग चुनौती से अस्तित्वगत और पराजित विविधताएं हैं। "साइबरब" कम्प्यूटेशनल सेवाओं जैसे मैकेनिकल तुर्क से भाप प्राप्त करना, और लगभग सभी सॉफ्टवेयर सोशल हो जाना, यह पहले से कहीं अधिक महत्वपूर्ण है कि रेड-फ्लैग कंटेंट के लिए एक हेयुरिस्टिक होना और इसे एक मॉडरेटर के ध्यान में लाना!
जेसनस्मिथ

10
कृपया भाषा संदर्भ के बारे में सावधान रहें, खासकर यदि आप i18n कर रहे हैं। मैंने एक बार एक Google समूह स्थापित करने की कोशिश की थी जिस कोर्स के लिए मुझे "सानल ऑर्टमडा गॉर्सेलस्सटिरमे" कहा गया था जो "वर्चुअल मीडिया में विज़ुअलाइज़ेशन" के लिए तुर्की है। Google इसे अस्वीकार करने के लिए पर्याप्त बेवकूफ था क्योंकि शीर्षक में "गुदा" शब्द था । Sanal [tr] = Virtual [en] और Google ने बेशर्मी से मुझ पर अपवित्रता का आरोप लगाया! : डी कृपया इस तरह अजीब बातें मत करो।
एडगरनर

यदि आप स्पेनिश में इस शब्द के लिए खोज करते हैं तो क्या होगा ? आप वास्तव में उस तरह से Google छवियां फ़िल्टर कर सकते हैं (यदि आप किसी अन्य भाषा में स्थानीयकृत हैं)।
new123456

एक अन्य सुझाव इन शब्दों को प्रतिबंधित करने के लिए नहीं होगा, लेकिन उन उपयोगकर्ताओं को पंजीकृत करने के लिए जो उनका उपयोग करते हैं। यदि कोई उपयोगकर्ता / आईपी 2, 3 या जो कुछ भी आप चाहते हैं, से अधिक हो जाता है, तो उस व्यक्ति को ब्लॉक करें। मूर्खतापूर्ण नहीं और न ही, लेकिन मुझे लगता है कि इसे अवरुद्ध करने के लिए बहुत अधिक असुविधाजनक है और उपयोगकर्ता / आईपी / दोनों को बदलना होगा 'चूत' के बजाय 'शराबी सफेद बनी' लिखना। एक हिस्सा, उपयोगकर्ता उन शब्दों या अभिव्यक्तियों को नहीं जानते हैं जिनका वे उपयोग नहीं कर सकते हैं, इसलिए वे अलग-अलग बुरे शब्दों का अनुमान नहीं लगा सकते हैं क्योंकि वे आसानी से प्रतिबंधित हो जाते हैं।
फ्रांसिस्को प्रेसेनिया

1
अपवित्र फिल्टर एक बुरा विचार है। यह प्रणाली चाल की कोशिश कर किसी के बीच अंतर करने के लिए बहुत मुश्किल है और किसी वैध तरीके से कुछ पूरी तरह से उचित बारे में बात कर ( "आप फज!") ( "मैं चॉकलेट फ़ज की तरह।")
clickbait

जवाबों:


176

अश्लीलता फ़िल्टर: खराब आइडिया, या अविश्वसनीय रूप से खराब आइडिया?

इसके अलावा, कोई भी द अनटोल्ड हिस्ट्री ऑफ टोंटाउन के स्पीडवेट को नहीं भूल सकता है , जहां "सेफ-वर्ड वाइटेलिस्ट " का उपयोग करने के परिणामस्वरूप 14 साल का बच्चा जल्दी से इसे दरकिनार कर देता है: "मैं अपने लंबे गर्दन वाले जिराफ को आपके शराबी सफेद बन्नी से चिपकाना चाहता हूं। । "

नीचे पंक्ति: अंत में, किसी भी प्रणाली के लिए जिसे आप लागू करते हैं, मानव समीक्षा के लिए बिल्कुल कोई विकल्प नहीं है (चाहे सहकर्मी या अन्यथा)। ड्राइव-बाय से छुटकारा पाने के लिए एक अल्पविकसित उपकरण को लागू करने के लिए स्वतंत्र महसूस करें, लेकिन निर्धारित ट्रोल के लिए, आपके पास बिल्कुल गैर-एल्गोरिदम-आधारित दृष्टिकोण होना चाहिए।

एक प्रणाली जो गुमनामी को हटाती है और जवाबदेही का परिचय देती है (स्टैक ओवरफ्लो अच्छी तरह से करती है) जॉन गेब्रियल के गिफ्ट से निपटने में मदद करने के लिए विशेष रूप से उपयोगी है।

आपने यह भी पूछा कि आप कहां से शुरू करने के लिए अपवित्रता सूची प्राप्त कर सकते हैं - एक ओपन-सोर्स प्रोजेक्ट है डांसगार्डियन - उनके डिफ़ॉल्ट अपवित्र सूचियों के लिए स्रोत कोड देखें। एक अतिरिक्त थर्ड पार्टी वाक्यांश सूची भी है जिसे आप उस प्रॉक्सी के लिए डाउनलोड कर सकते हैं जो आपके लिए मददगार हो सकता है।

सवाल के जवाब में संपादित करें: आप क्या करने की कोशिश कर रहे हैं, इस स्पष्टीकरण के लिए धन्यवाद। उस स्थिति में, यदि आप केवल एक सरल शब्द फ़िल्टर करने का प्रयास कर रहे हैं, तो दो तरीके हैं जो आप कर सकते हैं। सभी प्रतिबंधित वाक्यांशों के साथ एक एकल लंबा रेगेक्सप बनाना है जिसे आप सेंसर करना चाहते हैं, और केवल एक रेगेक्स खोज / उसके साथ बदलें। एक रेगेक्स जैसे:

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

और एक हिट के लिए थोक परीक्षण के लिए preg_match () का उपयोग करके इसे अपने इनपुट स्ट्रिंग पर चलाएं ,

या उन्हें खाली करने के लिए preg_replace ()

आप उन कार्यों को एक लंबी रेगेक्स के बजाय सरणियों के साथ भी लोड कर सकते हैं, और लंबी शब्द सूचियों के लिए, यह अधिक प्रबंधनीय हो सकता है। कुछ अच्छे उदाहरणों के लिए preg_replace () देखें कि कैसे सरणियों को लचीले ढंग से उपयोग किया जा सकता है।

अतिरिक्त PHP प्रोग्रामिंग उदाहरणों के लिए, इस पृष्ठ को फ़िल्टरिंग के लिए कुछ उन्नत जेनेरिक वर्ग के लिए देखें जो सेंसर के शब्दों से केंद्र के अक्षरों को बाहर निकालता है, और यह पिछला स्टैक ओवरफ्लो प्रश्न है जिसमें एक PHP उदाहरण (इसमें मुख्य मूल्यवान हिस्सा है) एसक्यूएल-आधारित फ़िल्टर किए गए शब्द दृष्टिकोण - यदि आप इसे अनावश्यक पाते हैं, तो लेट-स्पी कम्पेसाटर को तिरस्कृत किया जा सकता है)।

आपने यह भी जोड़ा: " पहली जगह में शब्दों की सूची प्राप्त करना वास्तविक प्रश्न है। " - पिछले डांसगॉरडियन लिंक के कुछ के अलावा, आपको यह आसान लग सकता है। मदद करने के लिए 458 शब्दों का .zip


@JPLemme: हाँ, यह चाहिए - मुझे इसके बाद [एसआईसी] को जोड़ना चाहिए था, क्योंकि एटवुड ने इसे कैसे वर्तनी दी थी। :)
हनकिन्टो

"क्लब पेंग्विन" हर दिन अपने अपवित्रता फ़िल्टर के लिए सैकड़ों प्रविष्टियाँ जोड़ता है : raphkoster.com/2008/05/09/…
फ्रैंक किसान

6
आपके रेगेक्स विकल्पों के चारों ओर एक शब्द सीमा आवरण, भद्दी गलती को रोक देगा
cjk

@ck: केवल अगर आप गलत वर्तनी वाले शब्दों को फ़िल्टर करने में सक्षम होने के बारे में चिंतित नहीं हैं "F * ckkkk yo 'asssss" :) मुझे यकीन नहीं है कि मुझे अपने ट्रोल पर बहुत सटीक वर्तनी पर भरोसा है।
हैनक्लिंटो

1
यदि आप लौकिक घोड़े के मुंह से "शराबी सफेद बनी" कहानी सुनना चाहते हैं, तो यह अब एक पॉडकास्ट एपिसोड है: socialmediaclarity.tumblr.com/post/70499341079/…
एफ

44

जबकि मुझे पता है कि यह सवाल काफी पुराना है, लेकिन यह एक सामान्य रूप से होने वाला प्रश्न है ...

अपवित्रता फिल्टर के लिए एक कारण और एक विशिष्ट आवश्यकता दोनों है (यहां विकिपीडिया प्रविष्टि देखें ), लेकिन वे अक्सर बहुत अलग कारणों से 100% सटीक होने से कम हो जाते हैं; प्रसंग और सटीकता

यह निर्भर करता है (पूर्ण) कि आप क्या हासिल करने की कोशिश कर रहे हैं - यह सबसे बुनियादी है, आप शायद " सात गंदे शब्दों " को कवर करने की कोशिश कर रहे हैं और फिर कुछ ... कुछ व्यवसायों को अपवित्रता के सबसे मूल को फ़िल्टर करने की आवश्यकता है: मूल शपथ शब्द, URL या यहां तक ​​कि व्यक्तिगत जानकारी और इतने पर, लेकिन दूसरों को अवैध खाते के नामकरण को रोकने की आवश्यकता है (Xbox live एक उदाहरण है) या कहीं अधिक ...

उपयोगकर्ता द्वारा तैयार की गई सामग्री में केवल संभावित शपथ शब्द नहीं होते हैं, इसमें आपत्तिजनक संदर्भ भी हो सकते हैं:

  • यौन क्रिया
  • यौन अभिविन्यास
  • धर्म
  • जातीयता
  • आदि...

और संभवतः, कई भाषाओं में। शटरस्टॉक ने आज तक 10 भाषाओं में बुनियादी गंदे-शब्दों की सूची विकसित की है , लेकिन यह अभी भी बुनियादी है और उनकी 'टैगिंग' जरूरतों के प्रति बहुत उन्मुख है। वेब पर कई अन्य सूचियाँ उपलब्ध हैं।

मैं स्वीकार किए गए उत्तर से सहमत हूं कि यह एक परिभाषित विज्ञान नहीं है और भाषा के रूप में एक सतत विकसित चुनौती है, लेकिन एक जहां 90% पकड़ दर 0% से बेहतर है। यह पूरी तरह से आपके लक्ष्यों पर निर्भर करता है - आप क्या हासिल करने की कोशिश कर रहे हैं, आपके पास किस स्तर का समर्थन है और विभिन्न प्रकारों की अपवित्रताओं को दूर करना कितना महत्वपूर्ण है।

एक फिल्टर के निर्माण में, आपको निम्नलिखित तत्वों पर विचार करने की आवश्यकता है और वे आपकी परियोजना से कैसे संबंधित हैं:

  • शब्द / वाक्यांश
  • परिवर्णी शब्द FOAD / LMFAO आदि)
  • झूठी सकारात्मक (शब्द, स्थान और 'मिशित', 'स्कंथोरैप' और 'ब्रेस्टवर्थ') जैसे नाम
  • URL (पोर्न साइट एक स्पष्ट लक्ष्य हैं)
  • व्यक्तिगत जानकारी (ईमेल, पता, फोन आदि - यदि लागू हो)
  • भाषा विकल्प (आमतौर पर डिफ़ॉल्ट रूप से अंग्रेजी)
  • मॉडरेशन (आप कैसे करें, यदि आप उपयोगकर्ता द्वारा तैयार की गई सामग्री के साथ सहभागिता कर सकते हैं और आप इसके साथ क्या कर सकते हैं)

आप आसानी से एक अपवित्र फ़िल्टर का निर्माण कर सकते हैं जो 90% + अपवित्रताओं को कैप्चर करता है, लेकिन आप कभी भी 100% हिट नहीं करेंगे। यह संभव नहीं है। करीब से आप 100% प्राप्त करना चाहते हैं, यह कठिन हो जाता है ... अतीत में एक जटिल अपवित्रता इंजन बनाया है जो प्रति दिन 500K से अधिक रीयलटाइम संदेशों से निपटता है, मैं निम्नलिखित सलाह प्रदान करता हूं:

एक बुनियादी फिल्टर शामिल होगा:

  • लागू अपवित्रता की सूची बनाना
  • अपवित्रता की व्युत्पत्तियों से निपटने का एक तरीका विकसित करना

एक मामूली जटिल फाइलर शामिल होगा, (एक मूल फिल्टर के अलावा):

  • विस्तारित व्युत्पत्तियों से निपटने के लिए जटिल पैटर्न का उपयोग करना (उन्नत रेगेक्स का उपयोग करके)
  • लेट्सपेक (l33t) से निपटना
  • झूठी सकारात्मकता से निपटना

एक जटिल फिल्टर में निम्नलिखित में से एक नंबर शामिल होगा (एक मध्यम फिल्टर के अलावा):

  • श्वेतसूची और अश्वेत
  • वाक्यांशों / पदों के निवे बेसियन इंजेक्शन छानना
  • ध्वनि कार्य (जहां एक शब्द दूसरे की तरह लगता है)
  • लेवेंसाइटिन दूरी
  • स्टेमिंग
  • मानव मध्यस्थ उदाहरण के द्वारा सीखने के लिए फ़िल्टरिंग इंजन की मदद करने के लिए या जहाँ मैच मार्गदर्शन के बिना पर्याप्त रूप से सटीक नहीं हैं (स्व / लगातार सुधार प्रणाली)
  • शायद एआई इंजन का कोई रूप

28

मुझे इसके लिए किसी अच्छी लाइब्रेरी की जानकारी नहीं है, लेकिन आप जो भी करते हैं, सुनिश्चित करें कि आप सामान देने की दिशा में गलत करते हैं। मैंने उन प्रणालियों से निपटा है जो मुझे उपयोगकर्ता नाम के रूप में "mpassell" का उपयोग करने की अनुमति नहीं देगा, क्योंकि इसमें एक विकल्प के रूप में "गधा" शामिल है। यह उपयोगकर्ताओं को अलग करने का एक शानदार तरीका है!


17
या "कॉकपिट" मना एक उड़ान अंतरिक्ष यान खेल में
Shinhan

24

मेरा एक नौकरी के साक्षात्कार के दौरान, कंपनी सीटीओ जो मेरा साक्षात्कार कर रही थी, मैंने जावा में लिखे एक शब्द / वेब गेम की कोशिश की। संपूर्ण ऑक्सफोर्ड इंग्लिश डिक्शनरी की एक शब्द सूची में से, पहला शब्द क्या था जिसका अनुमान लगाया गया था?

बेशक, अंग्रेजी भाषा में सबसे बेईमानी शब्द है।

किसी तरह, मुझे अभी भी नौकरी की पेशकश मिली, लेकिन मैंने फिर एक अपवित्रता शब्द सूची ( इस एक के विपरीत नहीं ) को ट्रैक किया और सभी बुरे शब्दों के बिना एक नया शब्दकोश उत्पन्न करने के लिए एक त्वरित स्क्रिप्ट लिखी (सूची को देखने के बिना भी) ।

आपके विशेष मामले के लिए, मुझे लगता है कि खोज की तुलना वास्तविक शब्दों से होती है जैसे शब्द सूची के साथ जाने का तरीका। वैकल्पिक शैलियों / विराम चिह्न के लिए थोड़ा और काम करने की आवश्यकता होती है, लेकिन मुझे संदेह है कि उपयोगकर्ता एक मुद्दा होने के लिए अक्सर उपयोग करेंगे।


8
ऑफ टॉपिक, लेकिन सबसे बेईमानी शब्द क्या है? मैं हमेशा इसे c शब्द या n शब्द मानता था, लेकिन मुझे लगता है कि लोगों को लगता है कि f शब्द है
जेफ

2
"मुझे संदेह है कि उपयोगकर्ता एक मुद्दा बनने के लिए अक्सर उपयोग करेंगे" आशा को जीवित रखें। एक बार जब उपयोगकर्ता फ़िल्टर पर ठोकर खाते हैं, तो वे परिधि के तरीके खोजने पर काम करेंगे। यह रिक्त स्थान के विषम स्थान के लिए संख्याओं के साथ अक्षरों की जगह के रूप में सरल हो सकता है, आदि)।
ब्रायनहॉ

21

अपवित्र फ़िल्टरिंग प्रणाली कभी भी सही नहीं होगी, भले ही प्रोग्रामर लंडक्योर हो और सभी नग्न घटनाओं के बराबर हो

उस ने कहा, 'शरारती शब्दों' की किसी भी सूची के साथ-साथ किसी भी अन्य सूची के प्रदर्शन की संभावना है, क्योंकि अंतर्निहित समस्या भाषा की समझ है जो वर्तमान तकनीक के साथ बहुत अधिक अंतरंग है।

इसलिए, एकमात्र व्यावहारिक समाधान दो गुना है:

  1. अपने शब्दकोश को अक्सर अपडेट करने के लिए तैयार रहें
  2. झूठे सकारात्मक (जैसे "क्लासिक" के बजाय "क्लैबटिक") को सही करने के लिए एक मानव संपादक को नियुक्त करें और झूठी नकारात्मक (उफ़! एक चूक!)

1
बस या तो रिक्त स्थान के साथ शब्द का पता लगाएं, पूर्ण विराम के बाद, नहीं?
डेविड डी

1
H3ll नहीं आदमी, जो केवल मामलों के सबसे तुच्छ काम करता है; हम यहां मनुष्यों के साथ काम कर रहे हैं, और वे काफी चालाक हैं :)
स्टीवन ए। लोव

14

आक्रामक उपयोगकर्ता इनपुट को रोकने का एकमात्र तरीका सभी उपयोगकर्ता इनपुट को रोकना है।

यदि आप उपयोगकर्ता इनपुट और मॉडरेशन की आवश्यकता पर जोर देते हैं, तो मानव मॉडरेटर्स को शामिल करें।


13

13
कूल .. लेकिन यह नहीं उठा (।) (।)
जेसन जोंग

2
सावधान। CDYNE अब इस उत्पाद को बनाए नहीं रख रहा है। आप इसे अपने जोखिम पर उपयोग कर सकते हैं।
साड़ी राहल

7

अपनी "ट्रिक सिस्टम" सबक्विज़न के बारे में, आप अपनी खोज करने से पहले "खराब शब्द" सूची और उपयोगकर्ता-दर्ज किए गए पाठ दोनों को सामान्य करके संभाल सकते हैं। उदाहरण के लिए, [z5 $] को "s", [4 @] से "a", आदि में बदलने के लिए regexes (या tr यदि PHP है) की एक श्रृंखला का उपयोग करें , फिर सामान्यीकृत "बुरे शब्द" सूची की तुलना सामान्यीकृत के विरुद्ध करें। पाठ। ध्यान दें कि सामान्यीकरण संभावित रूप से अतिरिक्त झूठे सकारात्मक को जन्म दे सकता है, हालांकि मैं इस समय किसी भी वास्तविक मामलों के बारे में नहीं सोच सकता।

बड़ी चुनौती ऐसी चीज के साथ आने की है जो लोगों को "पेनी एस" को अवरुद्ध करते हुए "तलवार की तुलना में कलम शक्तिशाली है " बोली देगी ।


14
विशेषज्ञों को मत भूलना-exchange.com और pen-island.com; उन साइट urls में एक बार हाइफ़न शामिल नहीं थे।
ब्रायनह

7

स्थानीयकरण के मुद्दों से सावधान रहें: एक भाषा में एक तलवार जो दूसरे में एक पूरी तरह से सामान्य शब्द हो सकती है।

इसका एक वर्तमान उदाहरण: ebay फीडबैक से "बुरे शब्दों" को फ़िल्टर करने के लिए एक शब्दकोश दृष्टिकोण का उपयोग करता है। यदि आप "यह एक पूर्ण लेन-देन था" ("दास युद्ध एनी परफ़ेक्ट ट्रांसकैक्शन") के जर्मन अनुवाद में प्रवेश करने की कोशिश करते हैं, तो ईबे बुरे शब्दों के कारण प्रतिक्रिया को अस्वीकार कर देगा।

क्यों? क्योंकि "के लिए जर्मन शब्द" "युद्ध" है, और "युद्ध" "बुरे शब्दों" के eBay शब्दकोश में है।

इसलिए स्थानीयकरण के मुद्दों से सावधान रहें।


6

यदि आप Digg / Stackoverflow की तरह कुछ कर सकते हैं जहाँ उपयोगकर्ता अश्लील सामग्री को डाउनवोट / मार्क कर सकते हैं ... ऐसा करें।

फिर आपको केवल "शरारती" उपयोगकर्ताओं की समीक्षा करने की आवश्यकता है, और यदि वे नियम तोड़ते हैं तो उन्हें ब्लॉक करें।


4

मुझे पार्टी में थोड़ी देर हो गई है, लेकिन मेरे पास एक समाधान है जो इसे पढ़ने वाले कुछ लोगों के लिए काम कर सकता है। यह php के बजाय जावास्क्रिप्ट में है, लेकिन इसका एक वैध कारण है।

पूरा खुलासा, मैंने इस प्लगइन को लिखा ...

वैसे भी।

मैं जिस दृष्टिकोण के साथ गया हूं, वह उपयोगकर्ता को उनके अपवित्र फ़िल्टरिंग के लिए "ऑप्ट-इन" की अनुमति देता है। मूल रूप से अपवित्रता को डिफ़ॉल्ट रूप से अनुमति दी जाएगी, लेकिन अगर मेरे उपयोगकर्ता इसे पढ़ना नहीं चाहते हैं, तो उन्हें नहीं करना होगा। यह "l33t sp3 @ k" समस्या के साथ भी मदद करता है।

अवधारणा एक सरल है प्लगइन जो सर्वर द्वारा इंजेक्ट किया जाता है यदि क्लाइंट का खाता अपवित्रता को फ़िल्टर करने में सक्षम करता है। वहां से, यह सिर्फ एक युगल सरल रेखाएं हैं जो कसमों को बाहर निकालती हैं।

यहां डेमो पेज
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>

परिणाम

*** विफल हो जाएगा, लेकिन पासवर्ड नहीं होगा


यहाँ इस जवाब के साथ एक jsField वर्किंग डेमो दिया गया है।
चेस फ्लोरल

बहुत भोला। फ़िल्टर नहीं कियाa$$
विंगर सेंटन

3
@EmipleAiman ​​यह कभी भी l33t बोल को फ़िल्टर करने का इरादा नहीं था । मैं इसे छानने की कोशिश नहीं कर रहा हूँ, क्योंकि यह एक हारी हुई लड़ाई है। मेरे द्वारा पोस्ट किया गया अपवित्रता फ़िल्टर "उपयोगकर्ताओं को" अपवित्र फ़िल्टरिंग के लिए "ऑप्ट-इन" करने की अनुमति देने के लिए बनाया गया है। इसका अर्थ है कि यह एक ऐसी साइट पर सबसे अच्छा उपयोग किया जाता है जो डिफ़ॉल्ट रूप से अपवित्रता की अनुमति देता है। यदि आप फ़िल्टर करना चाहते हैं a$$, तो आप इसे फ़िल्टर सूची में जोड़ें।
चेस फ्लोरल

4

मैंने 12 भाषाओं में 2200 बुरे शब्द एकत्र किए: en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, no, pl, pt, ru, sv , वें, tlh, tr, zh

MySQL डंप, JSON, XML या CSV विकल्प उपलब्ध हैं।

https://github.com/turalus/openDB

मैं आपको सुझाव देता हूं कि इस एसक्यूएल को अपने डीबी में निष्पादित करें और हर बार जांच करें जब उपयोगकर्ता कुछ इनपुट करता है।


2

मत करो। यह सिर्फ समस्याओं की ओर जाता है। एक क्लैबेटिक व्यक्तिगत अनुभव जो मेरे पास अपवित्रता के फिल्टर के साथ है, वह समय है जब मुझे एक आईआरसी चैनल से यह उल्लेख करने के लिए किक / प्रतिबंधित किया गया था कि मैं "कुछ घंटों के लिए हैनकॉक के पुल पर जा रहा था" या उस प्रभाव के लिए कुछ।


2

मैं इस चर्चा में HanClinto के उच्च पद से सहमत हूं। मैं आमतौर पर स्ट्रिंग-मैच इनपुट टेक्स्ट के लिए नियमित अभिव्यक्ति का उपयोग करता हूं। और यह एक व्यर्थ प्रयास है, जैसा कि, जैसा कि आपने मूल रूप से उल्लेख किया है कि आपको अपनी "अवरुद्ध" सूची में नेट पर लोकप्रिय लेखन के हर चाल के रूप में स्पष्ट रूप से ध्यान देना होगा।

एक तरफ ध्यान दें, जबकि अन्य सेंसरशिप की नैतिकता पर बहस कर रहे हैं, मुझे इस बात से सहमत होना चाहिए कि वेब पर कुछ फॉर्म आवश्यक है। कुछ लोग बस अश्लीलता को पोस्ट करने का आनंद लेते हैं क्योंकि यह लोगों के एक बड़े शरीर के लिए तुरंत आक्रामक हो सकता है, और लेखक के हिस्से पर बिल्कुल विचार की आवश्यकता नहीं है।

विचारों के लिए धन्यवाद।

HanClinto नियम!


2

एक बार जब आपके पास कुछ बुरे शब्दों की एक अच्छी MYSQL तालिका होती है जिसे आप फ़िल्टर करना चाहते हैं (मैंने इस धागे में एक लिंक के साथ शुरू किया था), आप कुछ इस तरह कर सकते हैं:

$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 />";

मुझे यकीन है कि उन सभी प्रतिस्थापनों को करने के लिए एक अधिक कुशल तरीका है, लेकिन मैं यह पता लगाने के लिए पर्याप्त स्मार्ट नहीं हूं (और यह ठीक काम करता है, यद्यपि अक्षम रूप से काम करता है)।

मेरा मानना ​​है कि आपको उपयोगकर्ताओं को पंजीकरण करने की अनुमति देने और मनुष्यों को फ़िल्टर करने और आवश्यकतानुसार अपनी प्रवीणता तालिका में जोड़ने की अनुमति देने के पक्ष में गलत करना चाहिए। हालांकि यह सब एक झूठे सकारात्मक (खराब शब्द के रूप में चिह्नित) की कीमत पर निर्भर करता है। अंत में आपको यह नियंत्रित करना चाहिए कि आप अपनी फ़िल्टरिंग रणनीति में कितने आक्रामक या रूढ़िवादी हैं।

यदि आप वाइल्डकार्ड्स का उपयोग करना चाहते हैं तो मैं भी बहुत सावधान रहूंगा, क्योंकि वे कभी-कभी आपके इरादे से भी अधिक व्यवहार कर सकते हैं।


1

सच कहूं, तो मैं उन्हें "ट्रिक सिस्टम" शब्दों को बाहर निकालने और उनके बजाय उन पर प्रतिबंध लगाने की अनुमति दूंगा, जो कि सिर्फ मैं हूं। लेकिन यह प्रोग्रामिंग को सरल भी बनाता है।

: मुझे क्या होता एक regex फिल्टर की तरह तो लागू है /[\s]dooby (doo?)[\s]/i, या यह शब्द दूसरों पर पहले से जुड़ा हुआ है /[\s]doob(er|ed|est)[\s]/। ये ऐसे शब्दों को फ़िल्टर करने से रोकेंगे, जो पूरी तरह से मान्य हैं, लेकिन दूसरे वेरिएंट के ज्ञान की आवश्यकता होती है और यदि आप एक नया सीखते हैं तो वास्तविक फ़िल्टर को अपडेट करना होगा। जाहिर है ये सभी उदाहरण हैं, लेकिन आपको यह तय करना होगा कि यह कैसे करना है।

मैं उन सभी शब्दों को टाइप करने वाला नहीं हूँ जिन्हें मैं जानता हूँ, तब नहीं जब मैं वास्तव में उन्हें जानना नहीं चाहता।


1

मैं विषय की निरर्थकता से सहमत हूं, लेकिन अगर आपके पास एक फ़िल्टर होना चाहिए, तो निंग के बॉक्सवुड की जांच करें :

बॉक्सवुड एक पाठ के एक टुकड़े में कई शब्दों के तेजी से प्रतिस्थापन के लिए एक PHP विस्तार है। यह केस-संवेदी और केस-असंवेदनशील मिलान का समर्थन करता है। इसके लिए आवश्यक है कि वह जिस पाठ पर काम करता है उसे UTF-8 के रूप में एनकोड किया जाए।

अधिक जानकारी के लिए इस ब्लॉग पोस्ट को भी देखें:

बॉक्सवुड के साथ, आप अपनी खोज शब्दों की सूची तब तक रख सकते हैं, जब तक आपको पसंद है - खोज और एल्गोरिथ्म को बदलने के लिए शब्दों की सूची पर अधिक शब्दों के साथ देखने के लिए धीमा नहीं मिलता है। यह सभी खोज शब्दों की एक ट्राइ बनाकर काम करता है और फिर एक बार अपने विषय टेक्स्ट को स्कैन करता है, ट्राइ के तत्वों को नीचे ले जाता है और आपके टेक्स्ट के पात्रों से उनकी तुलना करता है। यह US-ASCII और UTF-8, केस-संवेदी या असंवेदनशील मिलान का समर्थन करता है, और इसमें कुछ अंग्रेजी-केंद्रित शब्द सीमा जाँच तर्क है।


1

मैंने निष्कर्ष निकाला, एक अच्छा अपवित्रता फिल्टर बनाने के लिए हमें 3 मुख्य घटकों की आवश्यकता होती है, या कम से कम यह वही है जो मैं करने जा रहा हूं। ये वे हैं:

  1. फ़िल्टर: एक पृष्ठभूमि सेवा जो एक ब्लैकलिस्ट, शब्दकोश या उस तरह की चीज़ के खिलाफ सत्यापित करती है।
  2. अनाम खाते की अनुमति न दें
  3. दुरुपयोग होने की सूचना दें

एक बोनस, यह उन लोगों को पुरस्कृत करना होगा जो सटीक दुरुपयोग के पत्रकारों के साथ योगदान करते हैं और अपराधी को दंडित करते हैं, जैसे उनके खातों को निलंबित करना।


1

खेल में भी देर हो चुकी है, लेकिन कुछ शोध कर रहे हैं और यहां से लड़खड़ा गए हैं। जैसा कि दूसरों ने उल्लेख किया है, अगर यह स्वचालित था, तो यह लगभग असंभव है, लेकिन अगर आपका डिजाइन / आवश्यकता कुछ मामलों में शामिल हो सकती है (लेकिन हर समय नहीं) तो मानवीय बातचीत की समीक्षा करने के लिए कि क्या यह अपवित्र है या नहीं, आप एमएल पर विचार कर सकते हैं। https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity कई कारणों से मेरा वर्तमान विकल्प है:

  • कई स्थानीयकरण का समर्थन करता है
  • वे डेटाबेस को अपडेट करते रहते हैं, इसलिए मुझे नवीनतम स्लैंग या भाषाओं (रखरखाव के मुद्दे) के साथ नहीं रहना पड़ता है
  • जब उच्च संभावना (90% या अधिक) होती है तो आप इसे व्यावहारिक रूप से अस्वीकार कर सकते हैं
  • आप उस श्रेणी का निरीक्षण कर सकते हैं जो एक ध्वज का कारण बनता है जो अपवित्रता हो सकता है या नहीं हो सकता है, और किसी को यह सिखाने के लिए समीक्षा कर सकता है कि यह अपवित्र है या नहीं।

मेरी जरूरत के लिए, यह सार्वजनिक-अनुकूल वाणिज्यिक सेवा (ओके, वीडियोगेम) पर आधारित है, जो अन्य उपयोगकर्ता उपयोगकर्ता नाम देख सकते हैं / कर सकते हैं, लेकिन डिजाइन के लिए यह आवश्यक है कि आक्रामक उपयोगकर्ता नाम को अस्वीकार करने के लिए इसे अपवित्रता फिल्टर से गुजरना पड़े। इस बारे में दुखद बात यह है कि क्लासिक "क्लैबटिक" मुद्दा सबसे अधिक होने की संभावना है क्योंकि उपयोगकर्ता नाम आमतौर पर एकल शब्द (एन अक्षर तक) होते हैं, कभी-कभी कई शब्द संक्षिप्त हो जाते हैं ... फिर से, Microsoft की संज्ञानात्मक सेवा पाठ के माध्यम से "सहायता" को चिह्नित नहीं करेगी। HasProfanity = सत्य लेकिन उच्च होने की प्रायिकता श्रेणियों में से एक को चिह्नित कर सकता है।

जैसा कि ओपी पूछता है, "एक $ $" के बारे में क्या है, यहां एक परिणाम है जब मैंने इसे फ़िल्टर के माध्यम से पारित किया है: यहां छवि विवरण दर्ज करेंजैसा कि आप देख सकते हैं, यह निर्धारित किया है कि यह अपवित्र नहीं है, लेकिन इसकी उच्च संभावना है कि यह है, इसलिए झंडे सिफारिशों के रूप में समीक्षा (मानव अंतःक्रियाएं)।

जब संभावना अधिक होती है, तो मैं या तो वापस आ सकता हूं "मुझे क्षमा करें, वह नाम पहले से ही लिया गया है" (भले ही ऐसा न हो) ताकि यह विरोधी सेंसरशिप व्यक्तियों या किसी चीज के लिए कम आक्रामक हो, अगर हम नहीं चाहते हैं मानव समीक्षा को एकीकृत करने के लिए, या "आपका उपयोगकर्ता नाम लाइव ऑपरेशन विभाग को सूचित कर दिया गया है, आप अपने उपयोगकर्ता नाम की समीक्षा करने और स्वीकृत होने या किसी अन्य उपयोगकर्ता नाम को चुनने के लिए इंतजार कर सकते हैं"। जो कुछ भी...

वैसे, इस सेवा के लिए लागत / मूल्य मेरे उद्देश्य के लिए काफी कम है (उपयोगकर्ता नाम कितनी बार बदलता है?), लेकिन फिर, ओपी के लिए शायद डिजाइन अधिक गहन प्रश्नों की मांग करता है और भुगतान करने / सदस्यता लेने के लिए आदर्श नहीं हो सकता है एमएल-सेवाओं, या मानव-समीक्षा / बातचीत नहीं हो सकती। यह सब डिजाइन पर निर्भर करता है ... लेकिन अगर डिजाइन बिल फिट बैठता है, तो शायद यह ओपी का समाधान हो सकता है।

यदि दिलचस्पी है, तो मैं भविष्य में टिप्पणी में विपक्ष को सूचीबद्ध कर सकता हूं।


-2

अपवित्र फिल्टर एक बुरा विचार है। कारण यह है कि आप प्रत्येक शपथ शब्द को नहीं पकड़ सकते। यदि आप कोशिश करते हैं, तो आपको झूठी सकारात्मकता मिलती है।

पकड़ने वाले शब्द

मान लीजिए कि आप F-Word को पकड़ना चाहते हैं। आसान है, है ना? अच्छा चलो देखते हैं।

आप "बकवास" खोजने के लिए एक स्ट्रिंग के माध्यम से लूप कर सकते हैं। दुर्भाग्य से, आजकल लोग छल करते हैं। अपवित्रता फिल्टर "फुक" नहीं उठा।

व्यक्ति शब्द के कई वर्तनी और भिन्नताओं की जांच करने का प्रयास कर सकता है, लेकिन यह आपके कोड के प्रदर्शन को धीमा कर देगा। F-Word को पकड़ने के लिए, आपको "fuc", "Fuc", "fuk", "Fuk", "F ***", आदि की तलाश करनी होगी और सूची आगे और पीछे होती जाएगी।

मासूमियत से बचना

ठीक है, तो यह कैसे मामले-असंवेदनशील बना देता है और रिक्त स्थान को अनदेखा करता है इसलिए यह "F u C k" को पकड़ता है? यह एक अच्छे विचार की तरह लग सकता है, लेकिन कोई व्यक्ति केवल "FUCK" के साथ अपवित्रता को फ़िल्टर कर सकता है

आप विराम चिह्न की उपेक्षा करते हैं।

अब यह एक वास्तविक समस्या है, जैसे " नर्क ओ, वहाँ!" "नरक," और " किस गधे के रूप में?" "गधा" के रूप में उठाता है।

और शब्दों का एक गुच्छा है जिसे आपको फ़िल्टर से बाहर करना होगा, जैसे कि "विपक्ष टाइट यूटॉन," क्योंकि इसमें "टिट" है।

लोग स्थानापन्न शब्दों का भी उपयोग कर सकते हैं, जैसे "फ्रैक।" आप उसे भी रोकते हैं? "लिंग" के लिए "कलम" के बारे में क्या है? आपके प्रोग्राम में यह जानने के लिए कृत्रिम बुद्धिमत्ता नहीं है कि स्ट्रिंग अच्छी है या बुरी।

अपवित्र फिल्टर का उपयोग न करें। वे विकसित करना मुश्किल है, और वे क्रॉल के रूप में धीमी गति से कर रहे हैं।


2
-1 ओपी सवाल का जवाब नहीं देता है और ज्यादातर एक राय टिप्पणी है। इस उपयोगिता के लिए कई वैध उपयोग के मामले हैं। उदाहरण के लिए ऑडिट से पहले सोर्स कोड को साफ करना ताकि कंपनी को शर्मिंदा न होना पड़े।
डेविजज्मक्लेलैंड

-3

मत करो।

इसलिये:

  • Clbuttic
  • प्रवीणता OMG EVIL नहीं है
  • गंभीरता को प्रभावी ढंग से परिभाषित नहीं किया जा सकता है
  • अधिकांश लोग संभवतः अपवित्रता से "संरक्षित" होने की सराहना नहीं करते हैं

संपादित करें: जबकि मैं टिप्पणीकार से सहमत हूं जिन्होंने कहा कि "सेंसरशिप गलत है", यह इस उत्तर की प्रकृति नहीं है।


90
इस गैर जवाब के लिए 10 upvotes? जैसे कि जो कोई भी अपवित्रता को फ़िल्टर करना चाहता है, उसे एक नैतिक बुद्धि होना चाहिए? सुखद दुख। यह एक वैध प्रश्न है और स्नार्की ड्राइव-बाय प्रतिक्रियाओं को पुरस्कृत नहीं किया जाना चाहिए। -1।
क्लूज

12
@ कीलज: आप केवल एक व्यक्ति हैं जिन्होंने "नैतिक रूप से आधी बुद्धि" कहा है, वास्तव में मैंने बिल्कुल अपवित्र फ़िल्टर को लागू करने की नैतिक प्रकृति के बारे में कुछ नहीं कहा। मिच ने मेरे द्वारा "ना" कहे जाने के कारण को उतारा, और यह एक भद्दी ड्राइव नहीं है। कभी-कभी "मैं" "मैं कैसे करूँ ..." का सही उत्तर नहीं है। [cont'd]
eyelidlessness

2
@eyelidlessness: शायद आप सही कह रहे हैं कि मैंने आपके एकल-शब्द के उत्तर में बहुत अधिक पढ़ा है। लेकिन जब से आप विस्तृत नहीं हुए, मैं नहीं बता सकता कि आपकी आपत्तियाँ नैतिक आधारों या तकनीकी लोगों पर थीं। मैं मानता हूँ कि मैं किसी भी रूप में "सेंसरशिप खराब है" टिप्पणी से थक गया हूँ।
क्लूज

5
-1। "क्या मैं नैतिक या तकनीकी मुद्दों की परवाह किए बिना एक वैध जवाब नहीं है। ऐसे बहुत सारे समय हैं जहां सामग्री की प्रकृति के आधार पर सामग्री को फ़िल्टर करना पूरी तरह से उपयुक्त है। कल्पना कीजिए कि एक ई-कॉमर्स साइट महिलाओं के अंडरगारमेंट्स बेच रही है और एक 'रिव्यू' फीचर दे रही है। क्या आप वास्तव में प्रीस्प्यूसेंट लड़कों को अपनी साइट पर कूड़े से कूड़ा डालना चाहते हैं? बिलकूल नही। और शायद यह मानव अनुमोदन प्रक्रिया के लिए बहुत बोझिल है। कचरे के साथ समीक्षाओं को अस्वीकार करने का एक सरल फिल्टर एक अच्छी बात है।
pspahn

3
@pspahn, "नहीं" गलत समस्या के समाधान के लिए किसी भी प्रश्न का सही उत्तर है। निश्चित रूप से वैध मामले हैं जहां सामग्री को मॉडरेट किया जाना चाहिए, लेकिन एक "अपवित्रता फ़िल्टर" यह नहीं है।
पलकहीनता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.