2010-07-09 14 views
7

मैं की तरह कुछ के बारे में सोच रहा हूँ:सी # में "खराब" शब्दों के लिए स्ट्रिंग को पार्स करने का सबसे अच्छा तरीका क्या है?

foreach (var word in paragraph.split(' ')) { 
    if (badWordArray.Contains(word) { 
    // do something about it 
    } 
} 

लेकिन मैं वहाँ एक बेहतर तरीका है यकीन है।

अग्रिम धन्यवाद!

अद्यतन मैं अपने वेब अनुप्रयोग के लिए स्वचालित रूप से ... अश्लीलता परोसने दूर करने के लिए नहीं देख रहा हूँ, मैं अगर एक शब्द मैं समझना "बुरा" प्रयोग किया जाता है सूचना प्राप्त करना चाहते। फिर मैं यह सुनिश्चित करने के लिए स्वयं की समीक्षा करूंगा कि यह वैध है। प्रकार की एक ऑटो फ्लैगिंग प्रणाली।

+0

मैं आगे बढ़ गया और आपके अपडेट के जवाब में अपना समाधान संपादित किया। मुझे बताएं कि क्या यह आपके प्रश्न का उत्तर देता है। – rakuo15

+0

संभावित डुप्लिकेट [आप एक अच्छा profanity फ़िल्टर कैसे कार्यान्वित करते हैं?] (Http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter) –

उत्तर

15

जबकि आपका तरीका काम करता है, यह थोड़ा सा समय ले सकता है। पिछले SO प्रश्न के लिए wonderful response here है। हालांकि सवाल सी # के बजाय PHP के बारे में बात करता है, मुझे लगता है कि इसे आसानी से पोर्ट किया जा सकता है।

public string FilterWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.Replace(inputWords, "<3"); 
} 

यही कारण है, कम या ज्यादा आप के लिए काम करना चाहिए: नमूना कोड जोड़ने के लिए

संपादित करें।

मैं दूर करने के लिए स्वचालित रूप से ... अपने वेब अनुप्रयोग के लिए, मैं अगर एक शब्द मैं समझना "बुरा" सूचना प्राप्त करना चाहते अश्लीलता परोसने नहीं देख रहा हूँ प्रयोग किया जाता है: ओपी स्पष्टीकरण का जवाब देने के

संपादित करें ।

ऊपर प्रतिस्थापन भाग के रूप में ज्यादा है, तो आप अगर कुछ तो तरह मेल खाता देख सकते हैं:

public bool HasBadWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.IsMatch(inputWords); 
} 

यह true वापस आ जाएगी स्ट्रिंग आप इसे करने के पारित कर दिया सूची में किसी भी शब्द है या नहीं।

+1

आमतौर पर "कम"। –

+11

यदि आप ऐसा करने जा रहे हैं, ** '\ b' ** को न भूलें। यह एक गड़बड़ गलती है। गधे और सीमा के लिए –

+1

+1 –

1

क्योंकि .Contains() विधि .Keys.Contains हो जाने पर आपको, HashKey वस्तुओं या Dictionary<T1, T2> उदाहरण के लिए एक शब्दकोश का उपयोग कर कोड और अधिक कुशल बनाने के रूप में सरणी के बजाय प्रयोग करने पर विचार कर सकता है() जिस तरह से और अधिक कुशल है। यह विशेष रूप से सच है यदि आपके पास profanities की एक बड़ी सूची है (सुनिश्चित नहीं है कि कितने हैं! :)

4

मेरे काम पर हमने अपने सॉफ़्टवेयर में कुछ स्वचालित खराब शब्द फ़िल्टरिंग डाली (यह स्रोत ब्राउज़ करने के लिए चौंकाने वाला है और अचानक अंधेरे में भागते हैं जिसमें अश्लीलता के कई पृष्ठ होते हैं)।

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

  • इनपुट में अपरकेस सब कुछ
  • निकालें सबसे गैर अक्षर या अंक (जो है, बस किसी भी रिक्त स्थान, या विराम चिह्न, आदि बाहर ब्याह)
  • और फिर यह सोचते हैं किसी को है अक्षरों के लिए अंकों को पारित करने का प्रयास करते हुए, इस तरह कुछ करें: शून्य के साथ शून्य, 9 के साथ 9, एस के साथ 5, प्रतिस्थापित करें (रचनात्मक हो)

और फिर कुछ दोस्तों को इसे तोड़ने का प्रयास करें। मजा आता है।

+0

मुझे यह पसंद है ... मेरे उद्देश्यों के लिए सरल और प्रभावी। धन्यवाद। – Chaddeus

+1

इतना ही नहीं, अपने दोस्तों से इसे तोड़ने के लिए पूछना अच्छा क्यूए और अच्छी रात दोनों है :) – Flater

संबंधित मुद्दे

 संबंधित मुद्दे