2015-01-19 13 views
6

एक इनपुट शब्द दिया गया है, मैं यह निर्धारित करना चाहता हूं कि यह एक संज्ञा है या नहीं (अस्पष्टता के मामले में, उदाहरण के लिए cook एक संज्ञा या क्रिया हो सकता है, शब्द की पहचान की जानी चाहिए एक संज्ञा के रूप में)।यह निर्धारित करना कि कोई शब्द संज्ञा है या नहीं

असल में मैं स्टैनफोर्ड पार्सर से पीओएस टैगर का उपयोग करता हूं (मैं इसे इनपुट के रूप में एक शब्द देता हूं, और मैं परिणाम से केवल पीओएस टैग निकालता हूं)। परिणाम काफी अच्छे हैं लेकिन इसमें बहुत लंबा समय लगता है।

क्या कोई तरीका है (पायथन में, कृपया :) इस कार्य को वास्तव में करने के लिए तेज़ी से करने के लिए?

+1

स्टैनफोर्ड पार्सर इनपुट (निर्भरता पार्सिंग, निर्वाचन क्षेत्र पार्सिंग ...) पर कई अन्य चीजें करता है, यह समय बर्बाद है यहाँ। इसके अलावा, मैं जो करना चाहता हूं उसके लिए पीओएस टैगिंग थोड़ा अधिक मजबूत नहीं है (आमतौर पर पीओएस टैगिंग पूरी वाक्य पर किया जाता है, एक शब्द नहीं)? – permanganate

उत्तर

5

यदि आप बस यह देखना चाहते हैं कि एक शब्द के रूप में एक शब्द का उपयोग किया जा सकता है, तो सबसे तेज़ तरीका सभी संज्ञाओं का एक सेट बनाने के लिए हो सकता है और फिर उस सेट की सदस्यता के लिए शब्द की जांच करें।

आप WordNet कोष (उदाहरण के लिए NLTK के माध्यम से पहुँचा जा सकता है) इस्तेमाल कर सकते हैं सभी संज्ञाओं की सूची के लिए:

>>> from nltk.corpus import wordnet as wn 
>>> nouns = {x.name().split('.', 1)[0] for x in wn.all_synsets('n')} 
>>> "cook" in nouns 
True 
>>> "and" in nouns 
False 
+0

यह एक संभावना है, धन्यवाद :) nltk 67176 संज्ञाएं प्रदान करता है, क्या हम उनमें से बहुत से नहीं खोते हैं (एक और शब्दकोश का उपयोग करें)? (मुझे लगता है कि आप अपने कोड में 'name' के बाद'() 'भूल गए हैं) – permanganate

+0

आप सही हो सकते हैं: मुझे यकीन नहीं है कि कितने अंग्रेजी संज्ञाएं हैं! वर्डनेट प्रदान करने के लिए आप कहीं और बड़ी सूची ढूंढ सकते हैं। ('.name', कोष्ठक के बिना, पाइथन और एनएलटीके के मेरे संस्करण पर शब्द तक पहुंचने का सही तरीका प्रतीत होता है।) –

+0

मेरा मानना ​​है कि 'name' एक फ़ंक्शन है, और कोड को' nouns = {x 'पढ़ना चाहिए। नाम()। विभाजन ('।', 1) [0] [...]} ' – Ponkadoodle

1

मैं अजगर आवरण के लिए नहीं बोल सकता, लेकिन अगर आप स्टैनफोर्ड का उपयोग पार्सर की बजाय POS tagger, यह बहुत तेज़ होना चाहिए। Stanford CoreNLP के लिए रैपर हैं, जिनमें टैगर: https://pypi.python.org/pypi/corenlp-python शामिल है; या, ऐसा लगता है कि nltk में स्टैनफोर्ड टैगर मॉड्यूल भी http://www.nltk.org/_modules/nltk/tag/stanford.html है।

यदि आप खिलौना वाक्य में एकल शब्द एम्बेड करते हैं तो आपको बेहतर परिणाम भी मिल सकते हैं। कुछ "एक्स एक चीज है।" वाक्य के आधार पर, यह आपको संज्ञाओं के रूप में शब्दों को अनुमान लगाने से दूर या दूर कर सकता है।

0

यदि आप एकल शब्दों की जांच कर रहे हैं तो मैं वर्डनेट का उपयोग करूंगा। मैंने स्वतंत्र रूप से उपलब्ध ट्रीटागर का भी उपयोग किया: http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/ बाइनरी वास्तव में तेज़ चलता है और कई भाषाओं के लिए समर्थन करता है। यदि आपको शुद्ध पायथनिक समाधान की आवश्यकता है, तो ब्रिल टैगर के एनएलटीके कार्यान्वयन की जांच करें: http://www.nltk.org/_modules/nltk/tag/brill.html

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