2012-02-19 17 views
5

मैं स्वचालित भाषा का पता लगाने के लिए एक ह्युरिस्टिक विकसित कर रहा हूं और यह जानना चाहता हूं कि दिए गए पत्र में विशिष्टताएं हैं (जैसे "Ðàäèî Êóëüòóðà" - सभी अक्षरों में विशिष्टता है)। यदि संभव हो तो मैं डायक्रिटिक के प्रकार को भी प्राप्त कर सकता हूं।कैसे जांचें कि यूनिकोड चरित्र में नैतिकता है या नहीं?

मैंने UnicodeCategory enum के माध्यम से ब्राउज़ किया लेकिन मुझे कुछ भी नहीं मिला जो मुझे यहां मदद कर सकता था।

+0

पत्र eth (Ð) में कोई विशिष्ट नहीं है। यूनिकोड में, यह एक मूल चरित्र है; स्ट्रोक को एक विशिष्ट के रूप में नहीं माना जाता है। इस प्रकार आप अपने लक्ष्य को सुधारना चाहते हैं (और संभवतः यह बताएं कि यह किस विशिष्ट समस्या को हल करेगा, क्योंकि बेहतर दृष्टिकोण हो सकते हैं)। –

+2

विघटन करना आखिरी चीज है जिसे आप करना चाहते हैं। एक विशिष्ट diacritic के साथ एक विशिष्ट पत्र का संयोजन भाषा के लिए एक मजबूत चयनकर्ता है। बस आवृत्ति तालिकाओं को सामने बनाओ। लेकिन ऐसी कई भाषाएं हैं जो कोई विशिष्टता के बगल में उपयोग नहीं करती हैं। उदाहरण के लिए आप अंग्रेजी, डच और इतालवी के बीच का अंतर बताने में सक्षम नहीं होंगे। इसे वास्तव में काम करने के लिए आपको एक शब्दकोश की आवश्यकता होगी। भंडारण, कहें, 100 सबसे आम शब्द एक लंबा रास्ता तय करेंगे। –

उत्तर

11

एक संभावित तरीका यह है कि इसे एक रूप में सामान्यीकृत किया जाए जहां अक्षरों और उनके विशिष्टता कई कोडपॉइंट्स के रूप में लिखी जाए। फिर जांच करें कि आपके पास लहजे के बाद एक पत्र है या नहीं।

How do I remove diacritics (accents) from a string in .NET? से अपनाने, आप Normalize(NormalizationForm.FormD) के साथ सामान्यीकृत कर सकते हैं और UnicodeCategory.NonSpacingMark के साथ डायक्रिटिक्स की जांच कर सकते हैं।

bool IsLetterWithDiacritics(char c) 
{ 
    var s = c.ToString().Normalize(NormalizationForm.FormD); 
    return (s.Length > 1) && 
      char.IsLetter(s[0]) && 
      s.Skip(1).All(c2 => CharUnicodeInfo.GetUnicodeCategory(c2) == UnicodeCategory.NonSpacingMark); 
} 
+3

यदि आपको सच्ची/झूठी जांच की आवश्यकता है, तो आप इसे फॉर्मडी या सामान्य रूप से सामान्यीकृत कर सकते हैं, और यह जांच लें कि स्ट्रिंग मूल से अधिक लंबी है या नहीं। –

+1

@ जोकिम जोहानसन मैं आश्चर्यचकित नहीं होगा अगर फॉर्म में डी विघटन करने वाले अन्य ग्लिफ थे, लेकिन वे अक्षरों से जुड़े नहीं हैं। लेकिन मुझे नहीं पता कि मेरा विचार उन पर कितना अच्छा व्यवहार करेगा। – CodesInChaos

+2

@ जोकिम जोहानसन पात्रों की एक बड़ी श्रेणी है कि आपके एल्गोरिदम को डाइक्रिटिक्स के रूप में माना जाता है कोरियाई हैंगुल पात्र हैं। इनमें कई हिस्सों होते हैं, जो विघटित हो जाते हैं, लेकिन कोई विशिष्टता नहीं होती है। कुछ उदाहरण: '가', '간', '갂'। फिर गणितीय प्रतीकों जैसे कि: '≠', '⊉',' ∄', '∦' और आखिर में कुछ जिन्हें मैं बिल्कुल नहीं जानता:' ஔ' – CodesInChaos

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