2010-03-06 8 views
19

मैं कुछ ऐतिहासिक डेटा के साथ खेल रहा हूं जिसमें कुछ तिथियां मुझे सटीक रूप से जानती हैं (यानी डीडी/एमएम/वाईय्य) जबकि अन्य सिर्फ यद्यपि हैं और अन्य लोग हैं? (यानी वर्ष अनिश्चित है)। मैं भी फ्लो में आया हूं, जिसका स्पष्ट रूप से अर्थ है "समृद्ध"।क्या सी # में अनिश्चित तिथियों का प्रतिनिधित्व करने का एक मानक तरीका है?

फिलहाल मैं डेटटाइम क्लास का उपयोग कर रहा हूं जो ऐसी अनिश्चितता के ध्वज/प्रतिनिधित्व का समर्थन नहीं करता है। क्या इस समस्या को हल करने का कोई मानक तरीका है?

+2

अनिश्चित तिथियां जो भी प्लैटफॉम eHarmony उपयोग में कोडित हैं। –

उत्तर

6

तरीके अनुमानित समय का प्रतिनिधित्व करने, उदा पर विभिन्न शैक्षिक पेपर होते हैं: अन्यथा, मैं एक अतिरिक्त enum संपत्ति के साथ एक आवरण struct बनाने पर विचार करता हूँ http://www.musiccog.ohio-state.edu/Humdrum/representations/date.rep.html

यदि आप ऐतिहासिक दस्तावेजों के पूर्ण दायरे को संभालना चाहते हैं और अनुमानित ज्ञान आपके पास इनमें से किसी के लिए होगा तो यह डेटटाइम मानों के साथ एक साधारण बूल/नालीबल ऑपरेशन नहीं है।

मैंने अभी तक इसे संभालने के लिए सी # लाइब्रेरी नहीं देखी है। सी # के लिए मेरा खुद का प्राकृतिक भाषा इंजन सभी प्रकार के दिनांक समय वाक्यांशों को समझ सकता है लेकिन एक अलग समस्या के लिए डिज़ाइन किया गया था - यह एक अपरिचित प्रश्न स्वीकार कर सकता है और सटीक मानों के डेटाबेस से पूछताछ कर सकता है।

इसमें एक विशिष्ट तिथि, तिथियों की एक श्रृंखला, एक ज्ञात वर्ष (लेकिन कोई महीना/दिन), ज्ञात वर्ष + माह (लेकिन कोई तारीख नहीं), आधा अनंत सीमा (जैसे पहले या बाद में) दी गई तारीख), ... और इनका उपयोग करके यह डेटाबेस के खिलाफ प्रश्न बना सकता है या तारीखों की सभी संभावित श्रेणियों का आकलन कर सकता है। जैसे आप इसे पूछ सकते हैं "जिसे पिछले साल 4 बजे के बाद शुक्रवार को बुलाया गया था" और यह उपयुक्त एसक्यूएल क्वेरी उत्पन्न कर सकता है।

यदि आप यह करना चाहते हैं तो यह आसान नहीं है! अगर मैं आप थे, तो मैं डेटटाइम मानों के लिए उपयोग किए जाने वाले किसी भी प्रतिनिधित्व के साथ-साथ मूल पाठ के साथ एक स्ट्रिंग मान कैप्चर करता हूं। इस तरह आप अधिक मामलों को कवर करने के लिए समय के साथ प्रतिनिधित्व को बेहतर बना सकते हैं, आखिरकार "1 9 40 और 16 सितंबर 1 9 45 के बीच कुछ समय संभालने में सक्षम होना।

प्रारंभ में आप केवल स्ट्रिंग प्रस्तुति और दो डेटटाइम मानों को स्टोर करना चाहते हैं - सबसे पुरानी संभव और नवीनतम संभव तिथि। इसमें अधिकांश मामलों को शामिल किया गया है जो आप देखेंगे और इसके खिलाफ पूछना वास्तव में आसान है। आप या तो डेटाटाइम वैल्यू नल छोड़ सकते हैं या शायद इसे अधिकतम या न्यूनतम मान पर सेट कर सकते हैं जैसे "आधा अनंत श्रेणियां" 1 9 00 "

+0

+1 सहमत हैं कि इसमें प्राकृतिक भाषा पार्सिंग शामिल है। –

+0

मूल स्ट्रिंग प्रस्तुति को कैप्चर करने के विचार की तरह, और रेफरी के लिए धन्यवाद। –

1

DateTime? शून्य है। यह तुम्हारा सबसे अच्छा शर्त हो सकता है। दूसरा विकल्प DateTime.MinValue (या MaxValue) है।

[संपादित करें] असल में, अपने प्रश्न को दोबारा पढ़ना, मुझे लगता है कि आपकी सबसे अच्छी शर्त एक कस्टम क्लास तैयार करना है जो आपके सटीक उद्देश्य की सेवा करता है।

11

मैं एक ऐसी कक्षा बनाने पर विचार करता हूं जो डेटटाइम (या डेटटाइम ऑफसेट) को लपेटता है और इसमें यह निर्दिष्ट करने के लिए अतिरिक्त फ़ील्ड हैं कि तिथि के कौन से भाग निश्चित हैं और जो नहीं हैं।

तब आप महीने, दिन और साल के क्षेत्रों को निरर्थक मूल्यों के रूप में उजागर कर सकते हैं ताकि यह दर्शाया जा सके कि तिथि के कौन से भाग ज्ञात हैं।

+0

मैं इस पर विचार नहीं करता। मैं यह करूँगा अनिश्चितता अतिरिक्त जानकारी है जिसे किसी भी तरीके से मॉडलिंग या प्रतिनिधित्व करने की आवश्यकता है, और डेटटाइम ऐसा नहीं करता है। – Cheeso

+0

यह दृष्टिकोण उन पुराने ऐतिहासिक तिथियों के लिए बहुत अच्छा नहीं है जो आपको पुरानी दस्तावेजों या "लगभग 1 9 50" या "जून 1 9 45 के बाद" जैसी तस्वीरों पर मिलते हैं। सर्का 1 9 50 का नक्शा होगा? /? /? यदि आप सभी मॉडल डेट के समय पर अनिश्चितता के साथ डेटटाइम है। –

2

यदि अनिश्चितता द्विआधारी है (यानी, तारीख या तो ज्ञात या अज्ञात है), तो मैं एक निरर्थक डेटटाइम प्रकार के साथ जाऊंगा।

public enum DateConfidence 
{ 
    Certain, 
    Unknown, 
    YearOnly, 
    ApproximateYearOnly 
} 
0

.NET में ऐसी कोई कक्षा नहीं है, इसलिए सबसे अच्छी तारीख है कि सभी आवश्यक दिनांक फ़ील्ड का प्रतिनिधित्व करने वाले निरर्थक गुणों के साथ अपनी कक्षा बनाएं।

यह आपको भविष्य में सबसे अधिक लचीलापन देगा और आपके पास होने वाले किसी परिदृश्य को संभालने की अनुमति देगा (यदि नहीं - तो आप बस अपनी कक्षा को दोबारा सुधारें और कंपाइलर आपको उन जगहों को ढूंढने में मदद करेगा जहां फिक्स की आवश्यकता है)।

1

रेडियो कार्बन डेटिंग इसका एक सामान्य उदाहरण होगा। आपको दो सदस्यों के साथ एक कक्षा की जरूरत है। अनुमानित तिथि और त्रुटि अनुमान। उत्तरार्द्ध आमतौर पर वर्षों में व्यक्त किया जाता है, लेकिन आप किसी भी इकाई को चुनने के लिए स्वतंत्र हैं। सावधान रहें कि डेटटाइम 0 बीसीई से पहले एक तारीख व्यक्त नहीं कर सकता है, इसलिए इसे साल के लिए एक सरल int बनाओ। इससे पहले कि इसे और अधिक फैंसी बनाने से बचें, सही महीने का अनुमान वर्ष 1000 से पहले किसी भी तारीख के लिए व्यर्थ है।

+0

0 बीसीई सीमा पर टिप के लिए धन्यवाद, मैं एक्सेल में 1 9 00 की सीमा से बाहर पकड़ा गया ... –

0

ऐसी स्थिति के लिए मेरी प्राथमिकता एक निश्चित श्रेणी संपत्ति के साथ दिनांक सीमा वस्तु बनाना होगा।

कुछ जैसे:

public struct HistorialDateRange 
{ 
    public DateTime StartDate { get; } 
    public DateTime EndDate { get; } 
    public double Confidence { get; } /* range [0.0, 1.0] */ 
} 

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

यदि मैं एक दिन सेट करता हूं तो StartDate & EndDate उस तारीख को शामिल करना चाहिए।

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

आशा है कि मदद करता है।

0

आपकी समस्या के उत्तर बॉक्स के बाहर थोड़ा सा।

यदि आप वर्णन किए गए असंगठित ऐतिहासिक डेटा से निपट रहे हैं, तो मैं वास्तव में उन्हें स्ट्रिंग के रूप में कैप्चर करूँगा - जैसा कि है। डेटा का वास्तविक अर्थ उस संदर्भ के संदर्भ से आता है जहां इसका उपयोग किया जा रहा है। आप तर्क दे सकते हैं कि हम अर्थ खो रहे हैं, लेकिन वास्तव में डेटटाइम ऑब्जेक्ट के बहुत सारे नामुमकिन/मनमानी मूल्य वाले डेटा को मजबूर करना उतना ही अमानवीय है। इस रूप में उदाहरण लें:

  • 1910 - 1929
  • < 1960 या इससे पहले 1960
  • जुला 1950 या बाद जुला 1950

  • 1950 - वर्तमान या 1950 - अब

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

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

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

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