2009-12-01 9 views
8

क्या किसी को टाइमस्टैम्प में समय के अंग्रेजी प्रस्तुतियों को बदलने के लिए किसी भी अच्छी कक्षा/पुस्तकालय के बारे में पता है?अंग्रेजी से समय

लक्ष्य "दस साल से अब" और "तीन सप्ताह" और "10 मिनट में" प्राकृतिक भाषा वाक्यांशों को परिवर्तित करना है और उनके लिए एक सर्वश्रेष्ठ मैच यूनिक्स टाइमस्टैम्प का काम करना है।

मैंने इसे पाने के लिए कुछ सुंदर और अवांछित कोड को हैक किया है, लेकिन मुझे यकीन है कि कैलेंडर और ऐसे के लिए वहां बहुत अच्छे पार्सर्स हैं।

private function timeparse($timestring) 
{ 
    $candidate = @strtotime($timestring); 
    if ($candidate > time()) return $candidate; // Let php have a bash at it 

    //$thisyear = date("Y"); 
    if (strpos($timestring, "min") !== false) // Context is minutes 
    { 
      $nummins = preg_replace("/\D/", "", $timestring); 
      $candidate = @strtotime("now +$nummins minutes"); 
      return $candidate; 
    } 

    if (strpos($timestring, "hou") !== false) // Context is hours 
    { 
      $numhours = preg_replace("/\D/", "", $timestring); 
      $candidate = @strtotime("now +$numhours hours"); 
      return $candidate; 
    } 

    if (strpos($timestring, "day") !== false) // Context is days 
    { 
      $numdays = preg_replace("/\D/", "", $timestring); 
      $candidate = @strtotime("now +$numdays days"); 
      return $candidate; 
    } 

    if (strpos($timestring, "year") !== false) // Context is years (2 years) 
    { 
      $numyears = preg_replace("/\D/", "", $timestring); 
      $candidate = @strtotime("now +$numyears years"); 
      return $candidate; 
    } 

    if (strlen($timestring) < 5) // 10th || 2nd (or probably a number) 
    { 
      $day = preg_replace("/\D/", "", $timestring); 
      if ($day > 0) 
      { 
        $month = date("m"); 
        $year = date("y"); 
        return strtotime("$month/$day/$year"); 
      } 
      else 
      { 
        return false; 
      } 
    } 

    return false; // No can do. 
} 
+1

कैसे के बारे में "तीन साल, दो दिन और पांच मिनट भविष्य में "इनपुट के रूप में? – chelmertz

+0

हां, बिल्कुल इसी तरह की चीजें। मुझे इसकी ही आवश्यकता थी। –

+2

"तीन साल, दो दिन और पांच मिनट" और इसी तरह एक आईएस 868601 अंतराल में आसानी से अनुवाद करना चाहिए: "पी 3 वाई 2 डीटी 5 एम" जिसे आप डेटइंटरवाल में फ़ीड कर सकते हैं और डेटटाइम ऑब्जेक्ट में जोड़ सकते हैं। – dnagirl

उत्तर

0

Cocoa की और GNUStep के NSDateFormatter ऐसे समय अभ्यावेदन को संभालने में सक्षम हैं। जीएनयूएसटीपी संस्करण ओपन-सोर्स है।

+0

PHP टैग दिए जाने में बहुत मदद करने की संभावना नहीं है। संदेह है कि वह कोको पुस्तकालयों की तलाश में है –

+0

मुझे लगता है कि म्यूविसील बनाने का प्रयास कर रहा है यह मुद्दा है कि वह लाइब्रेरी को PHP पर पोर्ट कर सकता है। –

+0

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

2

DateTime कक्षा का उपयोग करें।

उदा .:

$string='four days ago'; 
$d=date_create($string); 
$d->getTimestamp(); 

ईटीए: जो आप का विस्तार कर सकते हैं:

class myDateTime extends DateTime { 
    static $defined_expressions=array(...); 

    function __construct($expression=NULL) { 
    if ($exp=$this->translate($expression)) { 
     parent::__construct($exp); 
    } 
    } 

    function translate($exp) { 
    //check to see if strtotime errors or not 
    //if it errors, check if $exp matches a pattern in self::$defined_expressions 
    return $exp, modified $exp or false 
    } 

} 
+1

ऐसा लगता है कि इस वर्ग में स्ट्रेटोटाइम() का उपयोग किया जाता है जो काफी पर्याप्त या शक्तिशाली नहीं है ... –

+0

यह स्ट्रेटोटाइम और आईएसओ 8601 (कन्स्ट्रक्टर का उपयोग करके) वाक्यांश ले सकता है। जो मैंने प्राकृतिक भाषा तिथियों से निपटने में पाया है, वह है कि आपको सिंटैक्स को एक निश्चित सेट तक सीमित करना होगा। आप अभिव्यक्तियों के एक सुपरसेट को परिभाषित करके डेटटाइम को विस्तारित करने पर विचार कर सकते हैं जिसे आप मानक PHP दिनांक अभिव्यक्तियों पर मैप कर सकते हैं। – dnagirl

+0

ठीक है, यह कोशिश कर रहा हूं, धन्यवाद। –

1

कुछ समय पहले मैं http://www.timeapi.org जो समय में प्राकृतिक भाषा प्रश्नों धर्मान्तरित भर में आया था। हालांकि यह एक एपीआई है।

रूबी स्रोत कोड जिथब पर है। यदि आवश्यकता हो, तो मुझे लगता है कि आप इसे PHP पर पोर्ट करने का प्रयास कर सकते हैं।

1

बस मासिक नवाचार पुरस्कार के धावक-अप में से एक के साथ, PHPClasses से एक सूचना मिली: Text to Timestamp

आपको लगता है कि कोशिश कर सकते ...

+0

इसे देखकर, यह बहुत अच्छा है। आप इसे कॉन्फ़िगर भी कर सकते हैं और अन्य वस्तुओं को आसानी से जोड़ सकते हैं ... – Franz

+0

उदाहरणों को देखते हुए 20 मिनट के बाद, मुझे कोई संकेत नहीं है कि इसका उपयोग कैसे किया जाए, भले ही यह मैं चाहता हूं ... ऐसा लगता है कि उपयोगकर्ता की अपेक्षा है सभी संभावित प्रश्नों को जोड़ने और उन्हें एक समय में मैप करने के लिए?"$ obj-> addTimer (समय() - 60 * 60 * 60, समय(), '1 घंटा पहले');" –

+0

हाँ, मैं मानता हूं, दस्तावेज भयानक लग रहा है। फिर भी, मुझे विश्वास है कि पहले से ही "स्थापित" कुछ डिफ़ॉल्ट स्ट्रिंग हैं ... – Franz

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