2010-04-06 13 views
12

मैं जावा लाइब्रेरी की तलाश में हूं ताकि उपयोगकर्ता द्वारा दर्ज किए गए टेक्स्ट को पार्स करने में सहायता मिल सके जो कैलेंडर एप्लिकेशन के लिए 'अपॉइंटमेंट' का प्रतिनिधित्व करती है। उदाहरण के लिए:प्राकृतिक भाषा एक नियुक्ति का विश्लेषण?

मंगलवार

या

17:00 खुशनुमा समय पर 11:30 पर माइक के साथ दोपहर के भोजन के शुक्रवार

पर मैं https://github.com/samtingleff/jchronic और http://www.datejs.com/ जो दिनांक पार्स कर सकते हैं जैसे कुछ आशाजनक सुराग मिल गया है - लेकिन मुझे "माइक के साथ लंच" जैसे कार्यक्रम के शीर्षक को निकालने में भी सक्षम होना चाहिए।

यदि ऐसा कोई एपीआई मौजूद नहीं है, तो मुझे किसी भी विचार में दिलचस्पी है कि कोडिंग परिप्रेक्ष्य से समस्या का सर्वोत्तम तरीका कैसे प्राप्त किया जाए।

+0

संभव डुप्लिकेट (http वितरित इस्तेमाल कर सकते हैं /stackoverflow.com/questions/1410408/natural-language-date-and-time-parser-for-java) – nawfal

उत्तर

0

मैं अपने सिर के शीर्ष पर कुछ भी नहीं सोच सकता जो आपके विनिर्देशों के लिए ऐसा करेगा। आप स्टैनफोर्ड एनएलपी जावा पैकेज या ओपनएनएलपी आज़मा सकते हैं। हालांकि यह आपके प्रयास करने के लिए एक स्लेजहैमर समाधान हो सकता है।

वैकल्पिक रूप से आप इसे स्वयं पार्स करने का प्रयास कर सकते हैं। यदि आप अधिक इनपुट संभालना चाहते हैं तो व्याकरण बनाने के लिए इनपुट और टोकन और स्कूप स्कैन करने के लिए जेएफएक्स का उपयोग करें।

9

जेच्रोनिक विस्तार करना आपकी सबसे अच्छी शर्त हो सकती है। मुझे लगता है कि this question पर प्रतिक्रियाएं दी गई हैं, यह संभावना नहीं है कि इसके लिए एक पूर्व-निर्मित लाइब्रेरी मौजूद है (हालांकि ऐसा लगता है कि ऐसी चीज उपयोगी हो सकती है ... मुझे लगता है कि प्राकृतिक भाषा तिथियों को पार्स करने के लिए प्रमुख उपयोग-मामले यदि वे उपयोगकर्ता द्वारा आपूर्ति किए गए तारों से अतिरिक्त डेटा निकालने की क्षमता रखते हैं तो भी अधिक उपयोगी हो)।

कार्यान्वयन के अनुसार, शायद सबसे सीधी-आगे की चीज जेच्रोनिक का विस्तार करना है, क्योंकि यह आपके उपयोग के मामले का एक महत्वपूर्ण हिस्सा का समर्थन करता है, लेकिन as you can see from the unit test से अधिक जानकारी को ढांचे द्वारा पहले ही अनदेखा किया जाना चाहिए। सौभाग्य से, यदि आप the main class देखते हैं, तो किसी ईवेंट शीर्षक के लिए कस्टम स्कैनर का समर्थन करने के लिए पार्स() विधि को विस्तार/संशोधित/लपेटना बहुत कठिन नहीं होना चाहिए। (इनमें से मेरी प्राथमिकता कांटा के बजाय ढांचे को लपेटना और इसे संशोधित करना होगा, क्योंकि इससे आपको अंतर्निहित कोड में किसी भी सुधार से अधिक आसानी से फायदा हो सकता है)।

आखिरकार, ऐसा करने का सबसे सीधा-आगे तरीका साबित हो सकता है कि एक रेगेक्स-पार्सर उत्पन्न करना है जो जेच्रोनिक कैप्चर करने की कोशिश करता है (और इसका अर्थ यह होगा कि जेरिकॉन स्रोत कोड से गहराई से परिचित हो रहा है)।

किसी भी एनएलपी-प्रकार प्रोजेक्ट के साथ सफलतापूर्वक इसे कार्यान्वित करने की कुंजी, जैसा कि संभवतः आप स्वचालित रूप से प्राप्त कर सकते हैं, स्वचालित रूप से स्वचालित यूनिट परीक्षण के रूप में (अंत में, यहां तक ​​कि यदि टेस्ट केस परीक्षण कई बार समान कार्यक्षमता को डुप्लिकेट करते हैं , कम से कम उदाहरण होना बेहतर है)। सौभाग्य से, चूंकि हम प्राकृतिक भाषा के बारे में बात कर रहे हैं, ऐसे परीक्षण मामलों को विशेष रूप से प्राप्त करना आसान होना चाहिए, क्योंकि गैर-प्रोग्रामर मित्र, परिवार इत्यादि भी आपको "घटना विवरण" प्रदान करने में सक्षम होना चाहिए (या जो भी आप कॉल करना चाहते हैं उन्हें)। आप विशेष रूप से किनारे के मामलों पर ध्यान केंद्रित करना चाहेंगे जहां डेट-पार्सिंग बिट स्थान/शीर्षक पार्सिंग बिट में हस्तक्षेप कर सकता है (उदाहरण के लिए "सिगुर आरओएस 8 बजे" "एट" में स्पष्ट रूप से उस समय का हिस्सा है जबकि "पार्टी में फोबे के शनिवार में "यह स्पष्ट रूप से नहीं है)।

मुझे एहसास हुआ कि मैंने जेक्रोनिक के बारे में काफी कुछ कहा है, लेकिन मुझे लगता है कि यह आपकी समस्या के लिए एक प्राकृतिक विकल्प है क्योंकि यह पहले से ही प्राकृतिक भाषा "नियुक्तियों" को पार्स करने के "कठिन भाग" को कवर करता है, यानी, अस्पष्टता हमारी भाषा जिसे हम समय के बारे में उपयोग करते हैं, और पहले से ही उस भाषा में लागू किया गया है जिसे आप लक्षित कर रहे हैं।

2

नियुक्ति नाम निकालने का प्रयास करने के दो अपेक्षाकृत सरल तरीके हैं।

उपयोग एक अनुक्रम लेबलिंग पैकेज

आप एक लेबल डेटा सेट है, तो आप एक दृश्य मॉडल प्रशिक्षण दे सकते, CRF++ या Yamcha तरह संकुल का उपयोग कर, "माइक के साथ दोपहर के भोजन के" की तरह नियुक्ति खिताब बाहर निकलने के लिए।

उपयोग नामांकित संस्थाओं और नियम

आप एक लेबल डाटासेट की जरूरत नहीं है, तो आप शायद कुछ लाभ एक named entity recognizer का उपयोग कर सभी लोगों, स्थानों को टैग करने से बाहर हो सकता है, और संगठनों नियुक्ति पाठ में । बोनस के रूप में यह आपको & तिथियों को भी समय देगा, इसलिए आपको उनको खींचने के लिए अपना कोड लिखने की आवश्यकता नहीं होगी।

नामित इकाइयों के साथ सभी लेबल किए गए हैं, यह प्रत्येक नियुक्ति के लिए शीर्षक निकालने या निर्माण करने के लिए कुछ नियम लिखने के लिए बहुत सीधे आगे होना चाहिए। /:

आप एक जावा आधारित एनईआर टैगर के लिए देख रहे हैं, तो आप एक Stanford द्वारा जारी या एक के साथ OpenNLP

की [जावा के लिए प्राकृतिक भाषा की तारीख और समय पार्सर]
संबंधित मुद्दे