2012-03-09 13 views
5

जाँच मैं तो जैसे वर्तनी त्रुटियों के लिए एक स्ट्रिंग की जाँच करने के NHunspell उपयोग कर रहा हूँ:बुद्धिमान जादू

var words = content.Split(' '); 
string[] incorrect; 
using (var spellChecker = new Hunspell(affixFile, dictionaryFile)) 
{ 
    incorrect = words.Where(x => !spellChecker.Spell(x)) 
     .ToArray(); 
} 

यह आम तौर पर काम करता है, लेकिन यह कुछ समस्या है। उदाहरण के लिए, यदि मैं वाक्य की जांच कर रहा हूं "यह एक (बहुत अच्छा) उदाहरण है", यह गलत वर्तनी के रूप में "(बहुत" और "अच्छा)" की रिपोर्ट करेगा। या यदि स्ट्रिंग में "8:30" जैसे समय होता है, तो यह एक गलत वर्तनी वाले शब्द के रूप में रिपोर्ट करेगा। इसमें अल्पविराम, आदि

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

संपादित करें: मैं उपयोगकर्ताओं को अपनी मशीन पर माइक्रोसॉफ्ट वर्ड स्थापित करने के लिए मजबूर नहीं करना चाहता, इसलिए COM इंटरऑप का उपयोग करना एक विकल्प नहीं है।

उत्तर

6

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

>>> s = "This is a (very good) example" 
>>> re.findall(r"\w+", s) 
['This', 'is', 'a', 'very', 'good', 'example'] 

और मुझे यकीन है नेट बहुत कुछ इसी तरह की है। वास्तव में, .NET docs के अनुसार, \w समर्थित है, इसलिए आपको यह पता लगाना होगा कि re.findall कहलाता है।

0
using System.Text.RegularExpressions; 
... 
// any occurence of (and) (maybe needs escaping) 
string pattern = "((\\.? |)\\.?)"; 
foreach(string i in incorrect){ 
    Regex.Replace(i, pattern, String.Empty) // replace with String.Empty 
} 

regex here के बारे में अधिक जानकारी। मैं this पढ़ रहा हूं, मुझे लगता है कि हनस्पेल सबसे अच्छे विकल्पों में से एक है :)

0

सी # में, आप ऐसा कुछ कर सकते हैं।

public static class ExtensionHelper 
{ 
    public static string[] GetWords(this string input) 
    { 
     MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b"); 

     var words = from m in matches.Cast<Match>() 
        where !string.IsNullOrEmpty(m.Value) 
        select TrimSuffix(m.Value); 

     return words.ToArray(); 
    } 

    public static string TrimSuffix(this string word) 
    { 
     int apostropheLocation = word.IndexOf('\''); 
     if (apostropheLocation != -1) 
     { 
      word = word.Substring(0, apostropheLocation); 
     } 

     return word; 
    } 
} 

वर NumberOfMistakes = content.GetWords() जहां (x => hunspell.Spell (एक्स)!) गणना()।।

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