2009-12-11 13 views
11

से नाम निकालें क्या किसी को पाठ के शरीर से केवल संज्ञा निकालने का सबसे आसान तरीका पता है?पाठ (जावा)

मैं TreeTagger tool के बारे में सुना है और मैं इसे एक शॉट देने की कोशिश की, लेकिन यह किसी कारण के लिए काम करने के लिए नहीं मिल सका।

कोई सुझाव?

धन्यवाद फिल

संपादित करें:

 import org.annolab.tt4j.*; 
TreeTaggerWrapper tt = new TreeTaggerWrapper(); 

try { tt.setModel("/Nouns/english.par"); 

tt.setHandler(new TokenHandler() { 
    void token(String token, String pos, String lemma) {  
    System.out.println(token+"\t"+pos+"\t"+lemma); } }); 
    tt.process(words); // words = list of words 

    } finally { tt.destroy(); 
}

मेरी कोड है, अंग्रेजी भाषा है। मुझे त्रुटि मिल रही थी: प्रकार नया टोकन हैंडलर() {} को विरासत सार विधि TokenHandler.token को लागू करना होगा। क्या मुझसे कुछ गलत हो रही है?

+3

मन को समझाने के लिए बिल्कुल TreeTagger साथ काम नहीं किया क्या? –

+1

क्या आप अपनी समस्या निर्दिष्ट कर सकते हैं? विशेष रूप से भाषा जानना अच्छा लगेगा ... उदाहरण के लिए जर्मन का अच्छा फायदा है कि सभी संज्ञाओं में पहला अक्षर पूंजीकृत है। – Chris

+0

मैं ट्रीटागर एपीआई से परिचित नहीं हूं लेकिन मैं सेटहैंडलर() के बाहर टोकनहैंडलर को तुरंत चालू करके शुरू करूंगा - जो एक स्पष्ट संदेश दे सकता है। मेरा अनुमान है कि टोकनहैंडलर अमूर्त है लेकिन ... –

उत्तर

22

सबसे पहले आपको अपना टेक्स्ट टोकन करना होगा। यह तुच्छ लग सकता है (किसी भी व्हाइटस्पेस पर विभाजित आपके लिए काम कर सकता है) लेकिन औपचारिक रूप से यह कठिन है। फिर आपको यह तय करना होगा कि संज्ञा क्या है। क्या "कार पार्क" में एक संज्ञा (कार पार्क), दो संज्ञाएं (कार, पार्क) या एक संज्ञा (पार्क) और एक विशेषण (कार) है? यह एक कठिन समस्या है, लेकिन फिर आप इसके बिना प्राप्त करने में सक्षम हो सकते हैं।

क्या "मैंने देखा xyzzy" एक संज्ञा की पहचान एक संज्ञा में नहीं है? "द" शब्द शायद xyzzy को संज्ञा के रूप में पहचानता है।

"समय मक्खियों की तरह उड़ता है" में संज्ञाएं कहां हैं। "फल की तरह मक्खियों की तरह मक्खियों" की तुलना करें (ग्रौचो मार्क्स के लिए धन्यवाद)। (; http://opennlp.sourceforge.net/ पर opennlp.tools.postag.POSDictionary opennlp.tools.lang.english.PosTagger) सामान्य अंग्रेजी में संज्ञाओं को खोजने के लिए और मैं था

हम OpenNLP टूलकिट में ब्राउन टैगर (जावा) (http://en.wikipedia.org/wiki/Brown_Corpus) का उपयोग इसके साथ शुरू करने की सलाह दें - यह आपके लिए आपकी अधिकांश सोच है। अन्यथा POSTAGERS (http://en.wikipedia.org/wiki/POS_tagger) या (http://www-nlp.stanford.edu/links/statnlp.html#Taggers) में से किसी भी को देखें।

कंप्यूटर से भाग के- भाषण टैगिंग में, यह ठेठ, अंग्रेजी के लिए भाषण की 50 150 अलग अलग हिस्सों से अलग करने के उदाहरण के लिए, एनएन विलक्षण जातिवाचक संज्ञाएं के लिए, है बहुवचन आम के लिए NNS संज्ञाएं, एनपी के लिए विलक्षण व्यक्तिवाचक संज्ञाओं (ब्राउन कोर्पस में इस्तेमाल पीओएस टैग देख)

http://en.wikipedia.org/wiki/Natural_language_processing_toolkits में NLP उपकरणकिटें का एक बहुत ही पूरी सूची नहीं है। मैं दृढ़ता से सुझाव दूंगा कि आप Wordnet या अन्य संग्रहों के खिलाफ मिलान करने की कोशिश करने के बजाय उनमें से एक का उपयोग करें।

+0

+1। कुछ लोगों को लगता है कि एनएलपी इतना कठिन नहीं है, जब यह वास्तव में कंप्यूटिंग में सबसे जटिल चीजों में से एक है। कोने के मामलों की जबरदस्त संख्या है और अचानक भाषा बदलने की भाषा में सबकुछ बेकार होगा। और, एक सैद्धांतिक स्तर पर, आपको यह भी समस्या है कि संज्ञा, या क्रिया, या सर्वनाम आदि के लिए 1 से अधिक परिभाषाएं हैं –

+0

@Maximilian समर्थन के लिए धन्यवाद। हम सहमत हैं कि यह मुश्किल है। सौभाग्य से हम केवल रसायनविदों द्वारा लिखी गई भाषा की व्याख्या करने की कोशिश कर रहे हैं और यह एक अच्छा सौदा आसान है! –

+0

उत्कृष्ट पोस्ट, धन्यवाद। वर्तमान में लाइंगपाइप डाउनलोड कर रहा है, विंडोज़ पर आईएम हालांकि, उम्मीद है कि इसमें बहुत सारी गंदगी नहीं है। मेरी स्क्रिप्ट! हाहा – Phil

0

WordNet डेटाबेस पर एक नज़र डालें। यह व्याख्यात्मक डेटाबेस। आप इसके खिलाफ प्रत्येक शब्द से मिलान करने का प्रयास कर सकते हैं और जांच सकते हैं कि यह एक संज्ञा है या नहीं।

मुझे संदेह है कि आपके पास 100% सटीकता होगी, हालांकि; डेटाबेस में अंग्रेजी भाषा में हर संभव शब्द के लिए कोई मिलान नहीं है, लेकिन कम से कम यह एक शुरुआत है।

+1

यह वास्तव में सटीक नहीं है। उदाहरण के लिए, "वह स्कूल जाने जा रहा है" वाक्य ले लो। बनाम "उन्होंने कहा कि चलना थकाऊ है।" अब, दूसरी वाक्य में, "चलना" एक संज्ञा है (एक जीरंड के माध्यम से नामित एक क्रिया), लेकिन पहली वाक्य में यह "चलने" क्रिया का प्रगतिशील रूप है। और ताहट सिर्फ एक उदाहरण है, और अधिक समस्याएं हैं। स्पष्टीकरण के लिए –

1

LingPipe देखें। यह माना जाता है कि अंग्रेजी पाठ से named entities निकाल सकते हैं। लेकिन मुझे कबूल करना होगा कि NLP विशेषज्ञता का मेरा क्षेत्र नहीं है।

0

सबसे आसान तरीका शायद शब्दों में से प्रत्येक शब्द के साथ पाठ में प्रत्येक शब्द की तुलना करना होगा। इसके बाद आपको शायद कुछ प्राथमिक पार्सिंग करना होगा और परिणामों में अनुमानित शुद्धता स्वीकार करनी होगी। प्राकृतिक भाषाओं को पार्स करने के लिए ऑनलाइन संदर्भों के बहुत सारे संदर्भ।

0

एक API (जैसे WS, RESTful) जो आप के खिलाफ खोज प्रश्नों को चलाने के लिए उपयोग कर सकते हैं के साथ एक शब्दकोश वेब साइट का पता लगाएं।

परिणाम एक आसानी से उपभोज्य प्रारूप (उदाहरण के एक्सएमएल, JSON) में आना चाहिए और निश्चित रूप से करना चाहिए शब्द का शाब्दिक वर्ग शामिल हैं।

1

आपके संपादन के आधार:

त्रुटि का कहना है कि आप सार विधि टोकन ओवरराइड चाहिए, और आप अपने गुमनाम भीतरी कक्षा में टोकन के लिए एक परिभाषा है, लेकिन हो सकता है आपके टोकन-ओवरराइड के हस्ताक्षर नहीं है टोकन हैंडलर में परिभाषित अमूर्त विधि के हस्ताक्षर से मेल खाते हैं?

1

मेरी निम्न कोड TreeTagger साथ काम करता है:

public List<String> tag(String str) { 
    final List<String> tagLemme = new ArrayList<String>(); 
    String[] tokens =tokenizer.tokenize(str); 
     System.setProperty("treetagger.home", "parametresTreeTagger/TreeTagger"); 
    TreeTaggerWrapper tt = new TreeTaggerWrapper<String>(); 
    try { 
     tt.setModel("parametresTreeTagger/english/english.par"); 
     tt.setHandler(new TokenHandler<String>(){ 
       public void token(String token, String pos, String lemma) { 
         tagLemme.add(token + "_" + pos + "_" + lemma); 
         //System.out.println(token + "_" + pos + "_" + lemma); 
       } 
     }); 
     tt.process(asList(tokens)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     } catch (TreeTaggerException e) { 
     e.printStackTrace(); 
    } 
finally { 
     tt.destroy(); 
} 
    return tagLemme; 
} 
+0

मैं भी इसे ठीक से http://stackoverflow.com/questions/15503388/treetagger-installation-successful-but-cannot-open-par-file – alvas

+0

इसका मेरे लिए काम ठीक स्थापित नहीं कर सका –

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