2011-10-18 13 views
9
में

को देखते हुए, कहते हैं, एक नुस्खा मुक्त पाठ के रूप में (सामग्री, चरण, आदि की सूची), मैं कैसे पार्स सकता है कि इस तरह से मैं की इकाई सामग्री (जैसे मात्रा बाहर खींच सकते हैं, मापन, घटक नाम, आदि) PHP में usin?प्राकृतिक भाषा संसाधन पीएचपी

मान लें कि मुफ़्त पाठ कुछ हद तक स्वरूपित है।

+1

परिभाषित करें "* कुछ हद तक * स्वरूपित"। –

+0

"1 कप दूध", "दूध, 1 कप", "नमक चुटकी", "दूध के 2 250 मिलीलीटर के डिब्बे" कहें ... – StackOverflowNewbie

+1

http://stackoverflow.com/questions/4457830/nlp-programming का संभावित डुप्लिकेट -tools-का उपयोग कर-php – rid

उत्तर

7

इसे 'ठीक से' करने के लिए, आपको कुछ प्रकार के व्याकरण को परिभाषित करने की आवश्यकता है, और फिर शायद एक एलएएलआर पार्सर या कुछ उपकरण जैसे yacc, bison या Lex का उपयोग पार्सर बनाने के लिए करें। मान लीजिए कि आप ऐसा नहीं करना चाहते हैं, इसके स्ट्रॉप्स() ftw!

0

भाषा मॉडलिंग की एक टन के बिना, मुझे लगता है कि एक ही रास्ता सामग्री की एक बड़ी सूची है और नुस्खा में उनके लिए खोज करने के लिए किया जाएगा। मात्रा घटक से तुरंत शब्द होना चाहिए।

1

वहाँ जावा के लिए बहुत समान question है। संक्षेप में, आपको शब्दों (एनोटेशन) पर शब्दकोष (कहने, सामग्री,) और regex जैसी भाषा की आवश्यकता है। आप इसे जावा में कर सकते हैं और इसे वेब सेवा के माध्यम से PHP से आवेदक कर सकते हैं या आप PHP में इसे फिर से कार्यान्वित करने का प्रयास कर सकते हैं (नोट, कि दूसरे मामले में आपको महत्वपूर्ण मंदी हो सकती है)।

3

नाम इकाई निकासी के लिए जावा में openNlp जो आप प्राप्त कर सके कि आप क्या देख रहे हैं यह देखने नहीं है: http://opennlp.sourceforge.net/models-1.5/

तो फिर तुम php-जावा कनेक्टर का उपयोग कर सकते हैं php में परिणाम प्राप्त करने के।

0

आप जल्दी से यह करने के लिए चाहते हैं, और संसाधन जुटाने की छोटी राशि एकत्र करने के साथ, तो आप शायद कुछ अच्छा heuristics और कुछ नियमित अभिव्यक्ति के साथ आ सकते हैं।

जब से तुम कहना है कि सूची "कुछ हद तक स्वरूपित," मैं इस धारणा पर काम करेंगे प्रत्येक पंक्ति में एक घटक के निर्देश नहीं है।

मैं माप नामों की एक सूची के साथ आना शुरू कर दूंगा, जो अपेक्षाकृत बंद वर्ग हैं (जैसा कि हम इसे भाषा विज्ञान में कहते हैं), जैसे $measurements=['cup', 'tablespoon', 'teaspoon', 'pinch', 'dash', 'to taste', ...]। आप एक ऐसे शब्दकोश के साथ भी आ सकते हैं जो कई वस्तुओं को एक सामान्यीकृत मूल्य ($measurements={cup:['cup', 'c'], tablespoon:['tablespoon', 'tbsp', 'tablesp', ...], ...} या व्हाट्नॉट) पर नज़र रखता है।

फिर प्रत्येक पंक्ति पर, यदि आप अपने शब्दकोश में हैं तो माप की इकाई पा सकते हैं। इसके बाद, संख्याओं को देखें (जिसे दशमलव के रूप में स्वरूपित किया जा सकता है - उदाहरण के लिए 1.5 - या जटिल अंशों के रूप में - उदाहरण के लिए 2 1/2 या 2-1/2), और मान लें कि आपकी आवश्यक इकाइयों की गणना है। यदि कोई संख्या नहीं है, तो आप केवल यह मान सकते हैं कि इकाई एक है (जैसा कि "स्वाद" और जैसा मामला हो)।

अंत में, आप कुछ भी शेष है कि वास्तविक घटक है ग्रहण कर सकते हैं।

मुझे लगता है कि इस ह्युरिस्टिक में आपके मामलों का 75-80% शामिल होगा। आपको अभी भी बहुत सारे कोने के मामले होने जा रहे हैं, जैसे कि नुस्खा "2 संतरे" के लिए कहता है, या - बदतर! - "2 संतरे का रस"। इन मामलों में, आप या तो उन्हें अपवाद के रूप में (कुछ प्रकार के ऑफ-लाइन क्यूरेशन के दौरान) जोड़ना चाहते हैं, या अपने आप को "ठीक" होने दें, ठीक से इलाज नहीं किया जा रहा है।

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