স্ট্যানফোর্ড পার্সার এবং এনএলটিকে


90

এনএলটিকে স্ট্যানফোর্ড পার্সার ব্যবহার করা কি সম্ভব? (আমি স্ট্যানফোর্ড পস সম্পর্কে কথা বলছি না।)



4
এই লিঙ্কটি আরও দৃশ্যমান হওয়া দরকার। সম্ভবত শীর্ষ উত্তর এডিট করা উচিত?
লালো সানচেজ

4
ছেলেরা এখানে একটি পার্শ্ব নোট। আপনার জাভা স্ট্যানফোর্ড এনএলপি এবং জাভাহোম সঠিকভাবে সেট আপ হয়েছে তা নিশ্চিত করুন। কখনও কখনও লোকেরা "অদ্ভুত" ত্রুটি পেতে পারে যা এর কারণ হতে পারে।
মেং ঝাও

NLTK v3.3 জন্য, দেখুন stackoverflow.com/a/51981566/610569
alvas

উত্তর:


89

নোট করুন যে এই উত্তরটি NLTK v 3.0 এ প্রযোজ্য, এবং আরও সাম্প্রতিক সংস্করণগুলিতে নয়।

অবশ্যই, পাইথনে নিম্নলিখিত চেষ্টা করুন:

import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = '/path/to/standford/jars'
os.environ['STANFORD_MODELS'] = '/path/to/standford/jars'

parser = stanford.StanfordParser(model_path="/location/of/the/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences

# GUI
for line in sentences:
    for sentence in line:
        sentence.draw()

আউটপুট:

[গাছ ('রুট', [গাছ ('এস', [ট্রি ('আইএনটিজে', [গাছ '(ইউএইচ', ['হ্যালো'])))), গাছ (',', [',']), গাছ ('এনপি', [গাছ ('পিআরপি $', ['আমার']]), গাছ ('এনএন', ['নাম']])]), গাছ ('ভিপি', [ট্রি ('ভিবিজেড', [ 'is']), গাছ ('এডিজেপি', [গাছ ('জেজে', ['মেল্রয়'])])], গাছ ('।' মূল ',' গাছ ('এসবিআরকিউ', [গাছ ('ডাব্লুএইচএনপি', [বৃক্ষ ('ডাব্লুপিপি', ['কি']]))), গাছ ('এসকিউ', [ট্রি ('ভিবিজেড', [' ]), গাছ ('এনপি', [গাছ ('পিআরপি $', ['আপনার'])), গাছ ('এনএন', ['নাম'])])]), গাছ ('।', ['? '])])]]]

দ্রষ্টব্য 1: এই উদাহরণে পার্সার এবং মডেল জারগুলি একই ফোল্ডারে রয়েছে।

নোট 2:

  • স্ট্যানফোর্ড পার্সারের ফাইলের নাম: স্ট্যানফোর্ড-পার্সার.জার
  • স্ট্যানফোর্ড মডেলগুলির ফাইলের নাম: স্ট্যানফোর্ড-পার্সার-এক্সএক্সএক্সএক্স-মডেল.জার

দ্রষ্টব্য 3: ইংলিশপিসিএফজি.সেসর ফাইলগুলি মডেল.জার ফাইলের (/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz) এর ভিতরে পাওয়া যাবে । মডেল.জার ফাইলটি 'আনজিপ' করতে অনুগ্রহ করে সংরক্ষণাগার পরিচালক ব্যবহার করুন।

নোট 4: আপনি জাভা জেআরই (রানটাইম এনভায়রনমেন্ট) 1.8 ব্যবহার করছেন তা নিশ্চিত হয়ে নিন এবং এটি ওরাকল জেডিকে ৮ নামে পরিচিত Otherwise

স্থাপন

  1. NLTK ভি 3 ডাউনলোড করুন থেকে: https://github.com/nltk/nltk । এবং এনএলটিকে ইনস্টল করুন:

    sudo পাইথন সেটআপ.পিপি ইনস্টল করুন

  2. পাইথন ব্যবহার করে স্ট্যানফোর্ড পার্সার পেতে আপনি এনএলটিকে ডাউনলোডার ব্যবহার করতে পারেন:

    import nltk
    nltk.download()
    
  3. আমার উদাহরণ চেষ্টা করুন! (জার পাথগুলি পরিবর্তন করতে এবং সেরপজ স্থানে মডেলের পাথ পরিবর্তন করবেন না)

বা:

  1. উপরের মত এনএলটিকে ভি 3 ডাউনলোড এবং ইনস্টল করুন।

  2. সর্বশেষ সংস্করণটি ডাউনলোড করুন ( বর্তমান সংস্করণ ফাইলের নামটি স্ট্যানফোর্ড- পার্সার- পুরো ২০১৫-০১-২৯.জিপ): http://nlp.stanford.edu/software/lex-parser.shtml# ডাউনলোড ডাউনলোড

  3. স্ট্যান্ডফোর্ড-পার্সার- পুরো ২০০০ এক্সএক্সএক্সএক্সএক্সএক্সএক্স.জিপ বের করুন Ext

  4. একটি নতুন ফোল্ডার তৈরি করুন (আমার উদাহরণে 'জারস')। এক্সট্রাক্ট করা ফাইলগুলি এই জার ফোল্ডারে রাখুন: স্ট্যানফোর্ড-পার্সার -৩.এক্সএক্স-মডেলস.জার এবং স্ট্যানফোর্ড-পার্সার.জার jar

    উপরে প্রদর্শিত হিসাবে আপনি এই 'জারস' ফোল্ডারে নির্দেশ করতে পরিবেশের ভেরিয়েবলগুলি (STANFORD_PARSER এবং STANFORD_MODELS) ব্যবহার করতে পারেন। আমি লিনাক্স ব্যবহার করছি, সুতরাং আপনি যদি উইন্ডোজ ব্যবহার করেন তবে দয়া করে এমন কিছু ব্যবহার করুন: সি: // ফোল্ডার // জার্স।

  5. সংরক্ষণাগার ব্যবস্থাপক (z জীপ) ব্যবহার করে স্ট্যানফোর্ড-পার্সার -৩.এক্সএক্সএক্স-মডেলস.জার খুলুন।

  6. জার ফাইলের ভিতরে ব্রাউজ করুন; এডু / স্ট্যানফোর্ড / এনএলপি / মডেল / লেপপারসার। আবার, 'ইংলিশপিসিএফজি.সেসর .zz' নামক ফাইলটি বের করুন। আপনি এই ser.gz ফাইলটি যেখানে বের করেছেন সেই স্থানটি মনে রাখবেন।

  7. স্ট্যানফোর্ডপার্সার উদাহরণ তৈরি করার সময়, আপনি প্যারামিটার হিসাবে মডেল পাথ সরবরাহ করতে পারেন। এটি আমাদের ক্ষেত্রে / অবস্থান /of /englishPCFG.ser.gz ক্ষেত্রে মডেলের সম্পূর্ণ পথ।

  8. আমার উদাহরণ চেষ্টা করুন! (জার পাথগুলি পরিবর্তন করতে এবং সেরপজ স্থানে মডেলের পাথ পরিবর্তন করবেন না)


4
Nltk এর কোন সংস্করণ যুক্ত হয়েছে nltk.parse.stanford? আমার কেবল nltk.tag.stanfordএনএলটিকে আছে 2.0.4
Alexis

4
AttributeError: 'StanfordParser' object has no attribute 'raw_batch_parse'
নিক retallack

4
@alexis: এখান থেকে nltk 3.0 ডাউনলোড করুন @ নিক রেটাল্যাক: এটি পরিবর্তন করা উচিতraw_parse_sents()
রসিকা পেরেরা

4
ঠিক আছে, আপনি ঠিক বলেছেন। এনএলটিকে ফাংশনটি এতে পরিবর্তিত করে: কাঁচা_পোষী_শক্তি ()। ডকুমেন্টেশন দেখুন: nltk.org/_modules/nltk/parse/stanford.html আপনি যদি কাঁচা_ পার্স () ব্যবহার করেন তবে আপনি একটি ইটার (ট্রি) রিটার্ন মান হিসাবে পাবেন। অঙ্কনের উপরোক্ত নমুনার অর্থ () কাজ করা উচিত। আপনি যদি কাঁচা_পর্সী_মিটি () ব্যবহার করেন তবে আপনার স্পষ্টতই একটি ডাবল লুপের প্রয়োজন; এটি একটি ইটার (আইটার (ট্রি)) ফিরিয়ে দিচ্ছে। কোডের উদাহরণ: for line in sentences: for sentence in line: sentence.draw() আপনি কেবলমাত্র একটি বৃক্ষের বস্তুর উপর অঙ্কন () চালাতে পারেন
বিপদ 89

4
@ বিপদ ৯৯, সম্পাদিত নোট সহ আপনার উত্তরটি ওভাররাইট করার জন্য দুঃখিত। স্ট্যানফোর্ড ডিপেন্ডেন্সি পার্সার সম্পর্কে লোকেরা সম্প্রতি অভিযোগ করছে এনএলটিকে ভি ৩.১-এর পরে সম্প্রতি যুক্ত হয়েছে এবং আমি মনে করি তারা এখানে কোডের কিছু স্নিপিকেট নকল করে চলেছিল এবং এখানে উত্তর বাতিল করা হয়েছে। সুতরাং বিভ্রান্তি হ্রাস করতে, আমি ভেবেছিলাম NLTK official 3rd party toolsডকুমেন্টেশন থেকে প্রাপ্ত নির্দেশাবলী অনুসরণ করার জন্য এখানে সমস্ত উত্তরে অস্বীকৃতি যুক্ত করা ভাল ।
আলভাস

77

অবমানিত উত্তর

নীচের উত্তরটি অবচিত করা হয়েছে, দয়া করে এনএলটিকে ভি 3.3 এবং তার জন্য https://stackoverflow.com/a/51981566/610569 এ সমাধানটি ব্যবহার করুন ।


সম্পাদিত

দ্রষ্টব্য: নিম্নলিখিত উত্তরগুলি কেবলমাত্র এতে কাজ করবে:

  • NLTK সংস্করণ> = 3.2.4
  • স্ট্যানফোর্ড সরঞ্জামগুলি 2015-04-20 থেকে সংকলিত
  • পাইথন 2.7, 3.4 এবং 3.5 (পাইথন 3.6 এখনও আনুষ্ঠানিকভাবে সমর্থিত নয়)

যেহেতু উভয় সরঞ্জাম পরিবর্তে দ্রুত পরিবর্তিত হয় এবং 3-6 মাস পরে এপিআই খুব আলাদা দেখাবে। নীচের উত্তরটি স্থায়ী হিসাবে বিবেচনা করুন এবং চিরস্থায়ী সমাধান নয়।

NLTK ব্যবহার করে স্ট্যানফোর্ড এনএলপি সরঞ্জামগুলিকে কীভাবে ইন্টারফেস করতে হবে তার সর্বশেষ নির্দেশের জন্য সর্বদা https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software দেখুন !!


টিএল; ডিআর

cd $HOME

# Update / Install NLTK
pip install -U nltk

# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip 
unzip stanford-parser-full-2015-04-20.zip 
unzip stanford-postagger-full-2015-04-20.zip


export STANFORDTOOLSDIR=$HOME

export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar

export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers

তারপরে:

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

>>> from nltk.parse.stanford import StanfordDependencyParser
>>> dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> print [parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]
[Tree('jumps', [Tree('fox', ['The', 'quick', 'brown']), Tree('dog', ['over', 'the', 'lazy'])])]

দীর্ঘ সময়:


প্রথমত , একটি অবশ্যই লক্ষণীয় যে স্ট্যানফোর্ড এনএলপি সরঞ্জামগুলি জাভাতে এবং এনএলটিকে পাইথনে লেখা আছে । NLTK যেভাবে সরঞ্জামটির সাথে ইন্টারফেস করছে তা হ'ল কমান্ড লাইন ইন্টারফেসের মাধ্যমে জাভা সরঞ্জামটি কল করে।

দ্বিতীয়ত , NLTKস্ট্যানফোর্ড এনএলপি সরঞ্জামগুলির এপিআই ৩.১ সংস্করণ থেকে এখন পর্যন্ত বেশ পরিবর্তন হয়েছে। সুতরাং আপনার NLTK প্যাকেজটি v3.1 এ আপডেট করার পরামর্শ দেওয়া হচ্ছে।

তৃতীয়ত , NLTKস্ট্যানফোর্ড এনএলপি সরঞ্জামগুলির এপিআই পৃথক এনএলপি সরঞ্জামগুলি, যেমন স্ট্যানফোর্ড পিওএস ট্যাগার , স্ট্যানফোর্ড এনইআর ট্যাগার , স্ট্যানফোর্ড পার্সারকে ঘিরে ।

পস এবং এনইআর ট্যাগারের জন্য, এটি স্ট্যানফোর্ড কোর এনএলপি প্যাকেজটির চারপাশে মোড়ানো নয়

স্ট্যানফোর্ড পার্সারের ক্ষেত্রে এটি একটি বিশেষ ক্ষেত্রে যেখানে এটি স্ট্যানফোর্ড পার্সার এবং স্ট্যানফোর্ড কোর এনএলপি উভয়কেই জড়িয়ে রেখেছে (ব্যক্তিগতভাবে, আমি এনএলটিকে ব্যবহার করে পরবর্তীটি ব্যবহার করি নি, বরং আমি @ dimazest এর প্রদর্শনীটি http: //www.eecs এ অনুসরণ করব)। qmul.ac.uk/~dm303/stanford-d dependency-parser-nltk-and-anaconda.html )

নোট করুন যে NLTK v3.1 হিসাবে, STANFORD_JARএবং STANFORD_PARSERভেরিয়েবলগুলি হ্রাস করা হয় এবং কোনও দীর্ঘ ব্যবহার করা হয় না


দীর্ঘায়িত:


ধাপ 1

ধরে নিই যে আপনি আপনার ওএসে যথাযথভাবে জাভা ইনস্টল করেছেন।

এখন, আপনার NLTK সংস্করণ ইনস্টল / আপডেট করুন (দেখুন http://www.nltk.org/install.html ):

  • পাইপ ব্যবহার :sudo pip install -U nltk
  • ডেবিয়ান ডিস্ট্রো ( অ্যাপট - গেট ব্যবহার করে):sudo apt-get install python-nltk

উইন্ডোজের জন্য (32-বিট বাইনারি ইনস্টলেশন ব্যবহার করুন):

  1. পাইথন ৩.৪ ইনস্টল করুন: http://www.python.org/downloads/ (-৪-বিট সংস্করণ এড়ানো)
  2. নম্পি ইনস্টল করুন (alচ্ছিক): http://sourceforge.net/projects/numpy/files/NumPy/ (সংস্করণ যা পাইথন 3.4 নির্দিষ্ট করে)
  3. এনএলটিকে ইনস্টল করুন: http://pypi.python.org/pypi/nltk
  4. পরীক্ষার ইনস্টলেশন: পাইথন 34 শুরু করুন, তারপরে আমদানি এনটিলেটকে টাইপ করুন

( কেন 64 বিট নয়? দেখুন https://github.com/nltk/nltk/issues/1079 )


তারপরে অদ্ভুততার বাইরে, nltkঅজগরের অভ্যন্তরে আপনার সংস্করণটি যাচাই করে দেখুন:

from __future__ import print_function
import nltk
print(nltk.__version__)

অথবা কমান্ড লাইনে:

python3 -c "import nltk; print(nltk.__version__)"

আপনি 3.1আউটপুট হিসাবে দেখতে পান তা নিশ্চিত করুন ।

আরও বেশি প্যারানোয়ার জন্য, আপনার প্রিয় সমস্ত স্ট্যানফোর্ড এনএলপি সরঞ্জামের এপিআই উপলব্ধ কিনা তা পরীক্ষা করে দেখুন:

from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
from nltk.parse.stanford import StanfordNeuralDependencyParser
from nltk.tag.stanford import StanfordPOSTagger, StanfordNERTagger
from nltk.tokenize.stanford import StanfordTokenizer

( দ্রষ্টব্য : উপরের আমদানিগুলি কেবলমাত্র নিশ্চিত করবে যে আপনি একটি সঠিক এনএলটিকি সংস্করণ ব্যবহার করছেন যা এই এপিআইগুলি রয়েছে the


ধাপ ২

এখন আপনি যাচাই করেছেন যে আপনার কাছে NLTK এর সঠিক সংস্করণ রয়েছে যাতে প্রয়োজনীয় স্ট্যানফোর্ড এনএলপি সরঞ্জাম ইন্টারফেস রয়েছে। আপনার প্রয়োজনীয় স্ট্যানফোর্ড এনএলপি সমস্ত সরঞ্জাম ডাউনলোড এবং বের করতে হবে।

টিএল; ডিআর , ইউনিক্সে:

cd $HOME

# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip 
unzip stanford-parser-full-2015-04-20.zip 
unzip stanford-postagger-full-2015-04-20.zip

উইন্ডোজ / ম্যাকে:


ধাপ 3

এনভায়রনমেন্ট ভেরিয়েবল সেটআপ করুন যেমন এনএলটিকি প্রাসঙ্গিক ফাইল পাথ স্বয়ংক্রিয়ভাবে খুঁজে পেতে পারে। আপনাকে নিম্নলিখিত ভেরিয়েবলগুলি সেট করতে হবে:

  • পরিবেশগত পরিবর্তনশীলটিতে উপযুক্ত স্ট্যানফোর্ড এনএলপি .jarফাইল যুক্ত করুন CLASSPATH

    • যেমন NER এর জন্য, এটি হবে it stanford-ner-2015-04-20/stanford-ner.jar
    • যেমন POS এর জন্য, এটি হবে it stanford-postagger-full-2015-04-20/stanford-postagger.jar
    • যেমন পার্সারের জন্য, এটি হবে stanford-parser-full-2015-04-20/stanford-parser.jarএবং পার্সার মডেল জার ফাইল,stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
  • STANFORD_MODELSভেরিয়েবলের জন্য উপযুক্ত মডেল ডিরেক্টরি যুক্ত করুন (উদাহরণস্বরূপ ডিরেক্টরিটি যেখানে আপনি প্রাক প্রশিক্ষিত মডেলগুলি সংরক্ষণ করা সন্ধান করতে পারেন)

    • উদাহরণস্বরূপ NER এর জন্য, এটি হবে stanford-ner-2015-04-20/classifiers/
    • উদাহরণস্বরূপ পস জন্য, এটি হবে stanford-postagger-full-2015-04-20/models/
    • যেমন পার্সারের জন্য, কোনও মডেল ডিরেক্টরি থাকবে না।

STANFORD_MODELSকোডটিতে , দেখুন যে এটি মডেলের নাম সংযোজন করার আগে ডিরেক্টরিটি অনুসন্ধান করে । এছাড়াও এটি দেখুন, API গুলি স্বয়ংক্রিয়ভাবে the ক্লাসস্প্যাথের জন্য ওএস পরিবেশ অনুসন্ধান করার চেষ্টা করে )

নোট করুন যে NLTK v3.1 হিসাবে, STANFORD_JARভেরিয়েবলগুলি হ্রাস করা হয় এবং কোনও দীর্ঘ ব্যবহার করা হয় না । নিম্নলিখিত স্ট্যাকওভারফ্লো প্রশ্নগুলিতে কোড স্নিপেটগুলি কার্যকর নাও করতে পারে:

উবুন্টুতে স্টেপ 3 এর জন্য টিএল; ডিআর

export STANFORDTOOLSDIR=/home/path/to/stanford/tools/

export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar

export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers

( উইন্ডোজের জন্য : পরিবেশের ভেরিয়েবলগুলি নির্ধারণের জন্য https://stackoverflow.com/a/17176423/610569 দেখুন )

আপনি হবে , পাইথন শুরু করার আগে উপরের মতো ভেরিয়েবল সেট তারপর:

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

বিকল্প হিসাবে, আপনি পাইথনের অভ্যন্তরে পরিবেশের পরিবর্তনগুলি যুক্ত করার চেষ্টা করতে পারেন, পূর্ববর্তী উত্তরগুলি যেমন প্রস্তাব করেছে তবে আপনি যেখানে আপনার .jarফাইল এবং আপনার মডেলগুলি রেখেছেন সেই সরাসরি পথে শুরু করতে পার্সার / ট্যাগারকে বলতে পারেন ।

বিভিন্ন পরিবেশের সেট করতে আপনি নিম্নলিখিত পদ্ধতি ব্যবহার কোন প্রয়োজন নেই কিন্তু যখন এপিআই তার পরামিতি নাম পরিবর্তন, আপনি সেই অনুযায়ী পরিবর্তন করতে হবে। এজন্য এনএলটিকে সংস্করণ অনুসারে আপনার অজগর কোডটি সংশোধন করার চেয়ে পরিবেশের ভেরিয়েবল সেট করা আরও যুক্তিযুক্ত।

উদাহরণস্বরূপ ( কোনও পরিবেশের ভেরিয়েবল সেট না করে ):

# POS tagging:

from nltk.tag import StanfordPOSTagger

stanford_pos_dir = '/home/alvas/stanford-postagger-full-2015-04-20/'
eng_model_filename= stanford_pos_dir + 'models/english-left3words-distsim.tagger'
my_path_to_jar= stanford_pos_dir + 'stanford-postagger.jar'

st = StanfordPOSTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar) 
st.tag('What is the airspeed of an unladen swallow ?'.split())


# NER Tagging:
from nltk.tag import StanfordNERTagger

stanford_ner_dir = '/home/alvas/stanford-ner/'
eng_model_filename= stanford_ner_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir + 'stanford-ner.jar'

st = StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar) 
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())

# Parsing:
from nltk.parse.stanford import StanfordParser

stanford_parser_dir = '/home/alvas/stanford-parser/'
eng_model_path = stanford_parser_dir  + "edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir  + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir  + "stanford-parser.jar"

parser=StanfordParser(model_path=eng_model_path, path_to_models_jar=my_path_to_models_jar, path_to_jar=my_path_to_jar)

22

অবমানিত উত্তর

নীচের উত্তরটি অবচিত করা হয়েছে, দয়া করে এনএলটিকে ভি 3.3 এবং তার জন্য https://stackoverflow.com/a/51981566/610569 এ সমাধানটি ব্যবহার করুন ।


সম্পাদিত

বর্তমান স্ট্যানফোর্ড পার্সার হিসাবে (2015-04-20), এর জন্য ডিফল্ট আউটপুট lexparser.shপরিবর্তিত হয়েছে সুতরাং নীচের স্ক্রিপ্টটি কাজ করবে না।

তবে উত্তরটি উত্তরাধিকারের জন্য রাখা হয়েছে, এটি এখনও http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zip নিয়ে কাজ করবে ।


আসল উত্তর

আমি পরামর্শ দিচ্ছি যে আপনি জাইথন, জেপাইপের সাথে ঝামেলা করবেন না। পাইথন পাইথন স্টাফটি করতে এবং জাভা জাভা স্টাফ করতে দিন, কনসোল মাধ্যমে স্ট্যানফোর্ড পার্সার আউটপুট পেতে।

আপনি আপনার হোম ডিরেক্টরিতে স্ট্যানফোর্ড পার্সার ইনস্টল করার পরে ~/, ফ্ল্যাট বন্ধনী বিশ্লেষণ পাওয়ার জন্য কেবল এই অজগর রেসিপিটি ব্যবহার করুন:

import os
sentence = "this is a foo bar i want to parse."

os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()

bracketed_parse = " ".join( [i.strip() for i in parser_out if i.strip()[0] == "("] )
print bracketed_parse

4
এটি আমার পক্ষে কাজ করেছে কেবলমাত্র আমার শর্ত যুক্ত করার দরকার ছিল তা পরীক্ষা করার জন্য len(i.strip()) > 0অন্যথায় আমার একটি ত্রুটি হয়েছে। আমার অনুমান যে আমার পার্সার আউটপুটটিতে কমপক্ষে একটি লাইন ছিল যা খাঁটি সাদা জায়গা ছিল।
এএলফ্রিক 5578

4
অন্যথা,, স্ট্যানফোর্ড corenlp সরঞ্জাম জন্য এই পাইথন মোড়কের ব্যবহার bitbucket.org/torotoki/corenlp-python
alvas

4
এই বিষয়ে সতর্কতা অবলম্বন করুন। যদি আপনার ইনপুটটিতে কোনও 'গুলি থাকে তবে আপনি কিছু অদ্ভুত ত্রুটি পাবেন। সেখানে ভাল উপায় আছে কমান্ড লাইন জিনিষ ডাকতে
নিক গার্ভি

21

NLTK v3.3 হিসাবে, ব্যবহারকারীদের স্ট্যানফোর্ড NER বা POS ট্যাগারগুলি এড়ানো উচিত nltk.tagএবং স্ট্যানফোর্ড টোকেনাইজার / সেগমেন্টার থেকে এড়ানো উচিতnltk.tokenize

পরিবর্তে নতুন nltk.parse.corenlp.CoreNLPParserএপিআই ব্যবহার করুন ।

দয়া করে https://github.com/nltk/nltk/wiki/Stanford-CoreNLP-API-in-NLTK দেখুন


(কেবলমাত্র লিঙ্কটি উত্তর এড়ানো, আমি নীচে এনএলটিকে গিথুব উইকি থেকে ডকগুলি আটকে দিয়েছি)

প্রথমে আপনার এনএলটিকে আপডেট করুন

pip3 install -U nltk # Make sure is >=3.3

তারপরে প্রয়োজনীয় কোরএনএলপি প্যাকেজগুলি ডাউনলোড করুন:

cd ~
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-02-27.zip
unzip stanford-corenlp-full-2018-02-27.zip
cd stanford-corenlp-full-2018-02-27

# Get the Chinese model 
wget http://nlp.stanford.edu/software/stanford-chinese-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-chinese.properties 

# Get the Arabic model
wget http://nlp.stanford.edu/software/stanford-arabic-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-arabic.properties 

# Get the French model
wget http://nlp.stanford.edu/software/stanford-french-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-french.properties 

# Get the German model
wget http://nlp.stanford.edu/software/stanford-german-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-german.properties 


# Get the Spanish model
wget http://nlp.stanford.edu/software/stanford-spanish-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-spanish.properties 

ইংরেজি

stanford-corenlp-full-2018-02-27ডিরেক্টরিতে এখনও , সার্ভারটি শুরু করুন:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,ner,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000 & 

তারপরে পাইথনে:

>>> from nltk.parse import CoreNLPParser

# Lexical Parser
>>> parser = CoreNLPParser(url='http://localhost:9000')

# Parse tokenized text.
>>> list(parser.parse('What is the airspeed of an unladen swallow ?'.split()))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]

# Parse raw string.
>>> list(parser.raw_parse('What is the airspeed of an unladen swallow ?'))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]

# Neural Dependency Parser
>>> from nltk.parse.corenlp import CoreNLPDependencyParser
>>> dep_parser = CoreNLPDependencyParser(url='http://localhost:9000')
>>> parses = dep_parser.parse('What is the airspeed of an unladen swallow ?'.split())
>>> [[(governor, dep, dependent) for governor, dep, dependent in parse.triples()] for parse in parses]
[[(('What', 'WP'), 'cop', ('is', 'VBZ')), (('What', 'WP'), 'nsubj', ('airspeed', 'NN')), (('airspeed', 'NN'), 'det', ('the', 'DT')), (('airspeed', 'NN'), 'nmod', ('swallow', 'VB')), (('swallow', 'VB'), 'case', ('of', 'IN')), (('swallow', 'VB'), 'det', ('an', 'DT')), (('swallow', 'VB'), 'amod', ('unladen', 'JJ')), (('What', 'WP'), 'punct', ('?', '.'))]]


# Tokenizer
>>> parser = CoreNLPParser(url='http://localhost:9000')
>>> list(parser.tokenize('What is the airspeed of an unladen swallow?'))
['What', 'is', 'the', 'airspeed', 'of', 'an', 'unladen', 'swallow', '?']

# POS Tagger
>>> pos_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='pos')
>>> list(pos_tagger.tag('What is the airspeed of an unladen swallow ?'.split()))
[('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'), ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]

# NER Tagger
>>> ner_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
>>> list(ner_tagger.tag(('Rami Eid is studying at Stony Brook University in NY'.split())))
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'STATE_OR_PROVINCE')]

চাইনিজ

সার্ভারটি একটু অন্যভাবে শুরু করুন, এখনও from স্ট্যানফোর্ড-কোরনল্প-ফুল-2018-02-27 ডিরেক্টরি থেকে:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-chinese.properties \
-preload tokenize,ssplit,pos,lemma,ner,parse \
-status_port 9001  -port 9001 -timeout 15000

পাইথনে:

>>> parser = CoreNLPParser('http://localhost:9001')
>>> list(parser.tokenize(u'我家没有电脑。'))
['我家', '没有', '电脑', '。']

>>> list(parser.parse(parser.tokenize(u'我家没有电脑。')))
[Tree('ROOT', [Tree('IP', [Tree('IP', [Tree('NP', [Tree('NN', ['我家'])]), Tree('VP', [Tree('VE', ['没有']), Tree('NP', [Tree('NN', ['电脑'])])])]), Tree('PU', ['。'])])])]

আরবি

সার্ভারটি শুরু করুন:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-arabic.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9005  -port 9005 -timeout 15000

পাইথনে:

>>> from nltk.parse import CoreNLPParser
>>> parser = CoreNLPParser('http://localhost:9005')
>>> text = u'انا حامل'

# Parser.
>>> parser.raw_parse(text)
<list_iterator object at 0x7f0d894c9940>
>>> list(parser.raw_parse(text))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]
>>> list(parser.parse(parser.tokenize(text)))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]

# Tokenizer / Segmenter.
>>> list(parser.tokenize(text))
['انا', 'حامل']

# POS tagg
>>> pos_tagger = CoreNLPParser('http://localhost:9005', tagtype='pos')
>>> list(pos_tagger.tag(parser.tokenize(text)))
[('انا', 'PRP'), ('حامل', 'NN')]


# NER tag
>>> ner_tagger = CoreNLPParser('http://localhost:9005', tagtype='ner')
>>> list(ner_tagger.tag(parser.tokenize(text)))
[('انا', 'O'), ('حامل', 'O')]

ফ্রেঞ্চ

সার্ভারটি শুরু করুন:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-french.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9004  -port 9004 -timeout 15000

পাইথনে:

>>> parser = CoreNLPParser('http://localhost:9004')
>>> list(parser.parse('Je suis enceinte'.split()))
[Tree('ROOT', [Tree('SENT', [Tree('NP', [Tree('PRON', ['Je']), Tree('VERB', ['suis']), Tree('AP', [Tree('ADJ', ['enceinte'])])])])])]
>>> pos_tagger = CoreNLPParser('http://localhost:9004', tagtype='pos')
>>> pos_tagger.tag('Je suis enceinte'.split())
[('Je', 'PRON'), ('suis', 'VERB'), ('enceinte', 'ADJ')]

জার্মান

সার্ভারটি শুরু করুন:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-german.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9002  -port 9002 -timeout 15000

পাইথনে:

>>> parser = CoreNLPParser('http://localhost:9002')
>>> list(parser.raw_parse('Ich bin schwanger'))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]
>>> list(parser.parse('Ich bin schwanger'.split()))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]


>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]

>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]

>>> ner_tagger = CoreNLPParser('http://localhost:9002', tagtype='ner')
>>> ner_tagger.tag('Donald Trump besuchte Angela Merkel in Berlin.'.split())
[('Donald', 'PERSON'), ('Trump', 'PERSON'), ('besuchte', 'O'), ('Angela', 'PERSON'), ('Merkel', 'PERSON'), ('in', 'O'), ('Berlin', 'LOCATION'), ('.', 'O')]

স্পেনীয়

সার্ভারটি শুরু করুন:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-spanish.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9003  -port 9003 -timeout 15000

পাইথনে:

>>> pos_tagger = CoreNLPParser('http://localhost:9003', tagtype='pos')
>>> pos_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PROPN'), ('Obama', 'PROPN'), ('salió', 'VERB'), ('con', 'ADP'), ('Michael', 'PROPN'), ('Jackson', 'PROPN'), ('.', 'PUNCT')]
>>> ner_tagger = CoreNLPParser('http://localhost:9003', tagtype='ner')
>>> ner_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PERSON'), ('Obama', 'PERSON'), ('salió', 'O'), ('con', 'O'), ('Michael', 'PERSON'), ('Jackson', 'PERSON'), ('.', 'O')]

দুর্দান্ত উত্তর। আপনাকে ধন্যবাদ
ইবেন

ধন্যবাদ, এটি খুব দরকারী। আরবী পার্সিং যদিও সঠিক নয়। এটি শব্দের পরিবর্তে পাঠ্যগুলিকে বিভক্ত করছে
লাবিবা

ব্যবহার করুন list(parser.raw_parse(text))বা list(parser.parse(parser.tokenize(text))। উদাহরণটি সংশোধন করেছেন;)
আলভাস

4
বিশ্বাস করা যায় না এটির বেশি বিজ্ঞাপন দেওয়া হয় না !!
নিমিটজ 14

4
দুঃখিতভাবে, NLTK যথেষ্ট মানুষ আলোচনা দিতে বা হোস্ট Snazzy দেব সম্মেলনে সম্পদ আছে একত্রিত হওয়া কাছাকাছি যাচ্ছে টুল প্রচার করতে হবে না = (আপনার চারপাশের এই বৈশিষ্ট্যটি বা সম্প্রদায়টিতে NLTK পরিচয় করিয়ে দিতে বিনা দ্বিধায়।
alvas



6

যদি আমি ভাল করে মনে করি তবে স্ট্যানফোর্ড পার্সারটি জাভা গ্রন্থাগার, সুতরাং আপনার সার্ভার / কম্পিউটারে আপনার অবশ্যই একটি জাভা ইন্টারপ্রেটার চালু থাকতে হবে।

আমি এটি পিএইচপি স্ক্রিপ্টের সাথে মিলিয়ে একবার সার্ভার ব্যবহার করেছি। স্ক্রিপ্টটি পার্সারে যেমন কমান্ড-লাইন কল করতে পিএইচপি এর এক্সিকিউটিউট () ফাংশন ব্যবহার করেছিল:

<?php

exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );

?>

আমি এই কমান্ডের সমস্ত বিবরণ মনে রাখিনা, এটি মূলত ফাইলটোপ্সেটি খুলল, এটি বিশ্লেষণ করে ফলাফল ফাইলে আউটপুট লিখেছিল। পিএইচপি তারপরে আরও ব্যবহারের জন্য ফলাফল ফাইলটি খুলবে।

কমান্ডের সমাপ্তি স্ক্রিপ্টটিকে অপ্রয়োজনীয় থেকে কমান্ড কমান্ড লাইনের তথ্য রোধ করতে পার্সারের ক্রিয়াপুস্তকে NUL তে নির্দেশ দেয়।

পাইথন সম্পর্কে আমি বেশি কিছু জানি না, তবে কমান্ড লাইন কল করার কোনও উপায় থাকতে পারে।

এটি আপনি যে সঠিক পথের জন্য প্রত্যাশা করেছিলেন তা নাও হতে পারে তবে আশা করি এটি আপনাকে কিছুটা অনুপ্রেরণা দেবে। ভাগ্য সুপ্রসন্ন হোক.


6

নোট করুন যে এই উত্তরটি NLTK v 3.0 এ প্রযোজ্য, এবং আরও সাম্প্রতিক সংস্করণগুলিতে নয়।

এখানে বিপদ ৯৮ এর কোডটির একটি রূপান্তর রয়েছে যা উইন্ডোজ-এ nltk3.0.0 এর সাথে কাজ করে এবং সম্ভবত অন্যান্য প্ল্যাটফর্মগুলিও আপনার সেটআপের জন্য যথাযথ ডিরেক্টরি নামগুলি সামঞ্জস্য করুন:

import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = 'd:/stanford-parser'
os.environ['STANFORD_MODELS'] = 'd:/stanford-parser'
os.environ['JAVAHOME'] = 'c:/Program Files/java/jre7/bin'

parser = stanford.StanfordParser(model_path="d:/stanford-grammars/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences

নোট করুন যে পার্সিং কমান্ডটি পরিবর্তিত হয়েছে (www.nltk.org/_modules/nltk/parse/stanford.html এ উত্স কোড দেখুন) এবং আপনাকে জাভাহোম ভেরিয়েবল সংজ্ঞায়িত করতে হবে। আমি ব্যাকরণ ফাইলটি পাত্রে সিটারুতে পড়ার চেষ্টা করেছি, তবে এখনও পর্যন্ত এটি করতে ব্যর্থ হয়েছি।


আমি 1989 সালের 98
বছরের

4

আপনি nltk (nltk.tree.Tree) তে একটি গাছ তৈরি করতে স্ট্যানফোর্ড পার্সার্স আউটপুট ব্যবহার করতে পারেন।

স্ট্যানফোর্ড পার্সার ধরে নিলে আপনাকে একটি ফাইল দেয় যাতে প্রতি বাক্যটির জন্য ঠিক একটি পার্স গাছ রয়েছে। তারপরে এই উদাহরণটি কার্যকর হয় যদিও এটি খুব অদ্ভুত দেখাচ্ছে না:

f = open(sys.argv[1]+".output"+".30"+".stp", "r")
parse_trees_text=[]
tree = ""
for line in f:
  if line.isspace():
    parse_trees_text.append(tree)
tree = ""
  elif "(. ...))" in line:
#print "YES"
tree = tree+')'
parse_trees_text.append(tree)
tree = ""
  else:
tree = tree + line

parse_trees=[]
for t in parse_trees_text:
  tree = nltk.Tree(t)
  tree.__delitem__(len(tree)-1) #delete "(. .))" from tree (you don't need that)
  s = traverse(tree)
  parse_trees.append(tree)

4
জাভা জাভা করার জন্য +1 এবং পাইথন পাইথন স্টাফ দেয়। আপনি কীভাবে জাভা কমান্ড কল করবেন এবং কোন বিকল্পগুলি তার উপর নির্ভর করে স্ট্যানফোর্ড পার্সার থেকে আউটপুট ফাইলকে পার্সিং করা আলাদা হতে পারে। আপনার আউটপুট ফাইলটি পেতে স্ট্যানফোর্ড পার্সিকে কীভাবে ডেকেছেন সে সম্পর্কেও আপনি বিশদ যুক্ত করলে ভাল হবে।
আলভাস

4

নোট করুন যে এই উত্তরটি NLTK v 3.0 এ প্রযোজ্য, এবং আরও সাম্প্রতিক সংস্করণগুলিতে নয়।

যেহেতু কেউই সত্যই উল্লেখ করেনি এবং এটি আমাকে একরকম সমস্যায় ফেলেছে, তাই পাইথনে স্ট্যানফোর্ড পার্সার ব্যবহারের বিকল্প উপায়:

stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar'    
parser = StanfordParser(path_to_jar=stanford_parser_jar, 
                        path_to_models_jar=stanford_model_jar)

এইভাবে, আপনাকে আর পথের জিনিস নিয়ে চিন্তা করার দরকার নেই।

যারা উবুন্টুতে এটি সঠিকভাবে ব্যবহার করতে পারবেন না বা একটিলিপসে কোডটি চালাতে পারবেন না।


3

আমি একটি উইন্ডোজ মেশিনে আছি এবং আপনি সাধারণভাবে পার্সারটি চালাতে পারেন আপনি যেমন কমান্ড থেকে পছন্দ করেন ঠিক তেমনই কিন্তু কোনও ভিন্ন ডিরেক্টরিতেও যাতে আপনার লেক্সপারসার.বাট ফাইলটি সম্পাদনা করার প্রয়োজন হয় না। শুধু পুরো পথে রাখুন।

cmd = r'java -cp \Documents\stanford_nlp\stanford-parser-full-2015-01-30 edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "typedDependencies" \Documents\stanford_nlp\stanford-parser-full-2015-01-30\stanford-parser-3.5.1-models\edu\stanford\nlp\models\lexparser\englishFactored.ser.gz stanfordtemp.txt'
parse_out = os.popen(cmd).readlines()

আমার জন্য কৌতূহলোদ্দীপক অংশটি বুঝতে পারছিল যে কীভাবে কোনও জাভা প্রোগ্রামটি অন্য কোনও পথ থেকে চালানো যায়। আরও ভাল উপায় থাকতে হবে তবে এটি কাজ করে।


3

নোট করুন যে এই উত্তরটি NLTK v 3.0 এ প্রযোজ্য, এবং আরও সাম্প্রতিক সংস্করণগুলিতে নয়।

NLTK এবং পাইথনে স্ট্যানফোর্ড পার্সার ব্যবহারের বিষয়ে বিপদের 89 এর জবাব সম্পর্কে সামান্য আপডেট (বা কেবল বিকল্প)

স্ট্যানফোর্ড-পার্সার-পূর্ণ-২০১৫-০৪-২০১ J, জেআরই ১.৮ এবং এনল্টক 3.0.০.৪ (পাইথন ২.7..6) সহ, এটি উপস্থিত হয় যে আপনাকে আর স্ট্যানফোর্ড-পার্সার-এক্সএক্সএক্সএক্স-মডেলগুলি থেকে ইংরাজীপিসিএফজি.সেসরজেক্ট বের করার দরকার নেই appears .jar বা কোনও os.en वातावरण সেট আপ করুন

from nltk.parse.stanford import StanfordParser

english_parser = StanfordParser('path/stanford-parser.jar', 'path/stanford-parser-3.5.2-models.jar')

s = "The real voyage of discovery consists not in seeking new landscapes, but in having new eyes."

sentences = english_parser.raw_parse_sents((s,))
print sentences #only print <listiterator object> for this version

#draw the tree
for line in sentences:
    for sentence in line:
        sentence.draw()

3

নোট করুন যে এই উত্তরটি NLTK v 3.0 এ প্রযোজ্য, এবং আরও সাম্প্রতিক সংস্করণগুলিতে নয়।

আলবাসের উত্তরের উইন্ডোজ সংস্করণটি এখানে

sentences = ('. '.join(['this is sentence one without a period','this is another foo bar sentence '])+'.').encode('ascii',errors = 'ignore')
catpath =r"YOUR CURRENT FILE PATH"

f = open('stanfordtemp.txt','w')
f.write(sentences)
f.close()

parse_out = os.popen(catpath+r"\nlp_tools\stanford-parser-2010-08-20\lexparser.bat "+catpath+r"\stanfordtemp.txt").readlines()

bracketed_parse = " ".join( [i.strip() for i in parse_out if i.strip() if i.strip()[0] == "("] )
bracketed_parse = "\n(ROOT".join(bracketed_parse.split(" (ROOT")).split('\n')
aa = map(lambda x :ParentedTree.fromstring(x),bracketed_parse)

মন্তব্য:

  • ইন lexparser.bat আপনি যেমন এড়ানোর জাভা ত্রুটি সঠিক পথটি সব পাথ পরিবর্তন করতে হবে "শ্রেণী not found"

  • আমি দৃ strongly়ভাবে আপনাকে এই পদ্ধতিটি উইন্ডোজের নীচে প্রয়োগ করার জন্য সুপারিশ করছি যেহেতু আমি পৃষ্ঠাটিতে বেশ কয়েকটি উত্তর চেষ্টা করেছি এবং সমস্ত পদ্ধতি জাভা ব্যর্থ হওয়ার সাথে অজগরকে যোগাযোগ করে।

  • আপনি উইন্ডোতে সফল হলে আপনার কাছ থেকে শুনতে ইচ্ছুক এবং ইচ্ছে করে আপনি কীভাবে এই সমস্ত সমস্যা কাটিয়ে উঠতে পারেন তা আমাকে বলতে পারেন।

  • পাইথন সংস্করণ পেতে স্ট্যানফোর্ড কোরএনএলপি জন্য পাইথন মোড়ক সন্ধান করুন



2

আমি অনেক ঘন্টা নিয়েছি এবং শেষ পর্যন্ত উইন্ডোজ ব্যবহারকারীদের জন্য একটি সহজ সমাধান খুঁজে পেয়েছি। মূলত এটি আলভাসের দ্বারা বিদ্যমান উত্তরটির সংক্ষিপ্ত সংস্করণ , তবে স্ট্যানফোর্ড এনএলপিতে যারা নতুন এবং উইন্ডো ব্যবহারকারী তাদের পক্ষে অনুসরণ করা সহজ (আশাবাদী) করা সহজ হয়েছে।

1) আপনি যে মডিউলটি ব্যবহার করতে চান তা যেমন NER, POS ইত্যাদি ডাউনলোড করুন আমার ক্ষেত্রে আমি NER ব্যবহার করতে চেয়েছিলাম তাই আমি মডিউলটি http://nlp.stanford.edu/software/stanford-ner-2015- থেকে ডাউনলোড করেছি 04-20.zip

2) ফাইল আনজিপ করুন।

3) আনজিপড ফোল্ডার থেকে পরিবেশের ভেরিয়েবল (ক্লাসপাথ এবং স্ট্যানফোর্ড_মডিউল ) সেট করুন।

import os
os.environ['CLASSPATH'] = "C:/Users/Downloads/stanford-ner-2015-04-20/stanford-ner.jar"
os.environ['STANFORD_MODELS'] = "C:/Users/Downloads/stanford-ner-2015-04-20/classifiers/"

4) জাভা এর জন্য পরিবেশের ভেরিয়েবলগুলি সেট করুন, যেখানে আপনি জাভা ইনস্টল করেছেন। আমার জন্য এটি নীচে ছিল

os.environ['JAVAHOME'] = "C:/Program Files/Java/jdk1.8.0_102/bin/java.exe"

5) আপনি চান মডিউল আমদানি করুন

from nltk.tag import StanfordNERTagger

6) প্রি-ট্রেইন মডেলটিকে কল করুন যা আনজিপড ফোল্ডারে শ্রেণিবদ্ধ ফোল্ডারে উপস্থিত রয়েছে। ফাইল এক্সটেনশনের জন্য শেষে ".gz" যুক্ত করুন। আমার জন্য আমি যে মডেলটি ব্যবহার করতে চেয়েছিলাম সেটি ছিলenglish.all.3class.distsim.crf.ser

st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')

7) এখন পার্সার কার্যকর করুন !! এবং আমরা সম্পন্ন !!

st.tag('Rami Eid is studying at Stony Brook University in NY'.split())


2

অবমানিত উত্তর

নীচের উত্তরটি অবচিত করা হয়েছে, দয়া করে এনএলটিকে ভি 3.3 এবং তার জন্য https://stackoverflow.com/a/51981566/610569 এ সমাধানটি ব্যবহার করুন ।


সম্পাদিত

দ্রষ্টব্য: নিম্নলিখিত উত্তরগুলি কেবলমাত্র এতে কাজ করবে:

  • NLTK সংস্করণ == 3.2.5
  • স্ট্যানফোর্ড সরঞ্জামগুলি ২০১০-১০-৩১ থেকে সংকলিত
  • পাইথন 2.7, 3.5 এবং 3.6

যেহেতু উভয় সরঞ্জাম পরিবর্তে দ্রুত পরিবর্তিত হয় এবং 3-6 মাস পরে এপিআই খুব আলাদা দেখাবে। নীচের উত্তরটি স্থায়ী হিসাবে বিবেচনা করুন এবং চিরস্থায়ী সমাধান নয়।

NLTK ব্যবহার করে স্ট্যানফোর্ড এনএলপি সরঞ্জামগুলিকে কীভাবে ইন্টারফেস করতে হবে তার সর্বশেষ নির্দেশের জন্য সর্বদা https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software দেখুন !!

টিএল; ডিআর

নিম্নলিখিত কোডটি https://github.com/nltk/nltk/pull/1735#issuecomment-306091826 থেকে এসেছে

টার্মিনালে:

wget http://nlp.stanford.edu/software/stanford-corenlp-full-2016-10-31.zip
unzip stanford-corenlp-full-2016-10-31.zip && cd stanford-corenlp-full-2016-10-31

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000

পাইথনে:

>>> from nltk.tag.stanford import CoreNLPPOSTagger, CoreNLPNERTagger
>>> from nltk.parse.corenlp import CoreNLPParser

>>> stpos, stner = CoreNLPPOSTagger(), CoreNLPNERTagger()

>>> stpos.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]

>>> stner.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]


>>> parser = CoreNLPParser(url='http://localhost:9000')

>>> next(
...     parser.raw_parse('The quick brown fox jumps over the lazy dog.')
... ).pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                     ROOT
                      |
                      S
       _______________|__________________________
      |                         VP               |
      |                _________|___             |
      |               |             PP           |
      |               |     ________|___         |
      NP              |    |            NP       |
  ____|__________     |    |     _______|____    |
 DT   JJ    JJ   NN  VBZ   IN   DT      JJ   NN  .
 |    |     |    |    |    |    |       |    |   |
The quick brown fox jumps over the     lazy dog  .

>>> (parse_fox, ), (parse_wolf, ) = parser.raw_parse_sents(
...     [
...         'The quick brown fox jumps over the lazy dog.',
...         'The quick grey wolf jumps over the lazy fox.',
...     ]
... )

>>> parse_fox.pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                     ROOT
                      |
                      S
       _______________|__________________________
      |                         VP               |
      |                _________|___             |
      |               |             PP           |
      |               |     ________|___         |
      NP              |    |            NP       |
  ____|__________     |    |     _______|____    |
 DT   JJ    JJ   NN  VBZ   IN   DT      JJ   NN  .
 |    |     |    |    |    |    |       |    |   |
The quick brown fox jumps over the     lazy dog  .

>>> parse_wolf.pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                     ROOT
                      |
                      S
       _______________|__________________________
      |                         VP               |
      |                _________|___             |
      |               |             PP           |
      |               |     ________|___         |
      NP              |    |            NP       |
  ____|_________      |    |     _______|____    |
 DT   JJ   JJ   NN   VBZ   IN   DT      JJ   NN  .
 |    |    |    |     |    |    |       |    |   |
The quick grey wolf jumps over the     lazy fox  .

>>> (parse_dog, ), (parse_friends, ) = parser.parse_sents(
...     [
...         "I 'm a dog".split(),
...         "This is my friends ' cat ( the tabby )".split(),
...     ]
... )

>>> parse_dog.pretty_print()  # doctest: +NORMALIZE_WHITESPACE
        ROOT
         |
         S
  _______|____
 |            VP
 |    ________|___
 NP  |            NP
 |   |         ___|___
PRP VBP       DT      NN
 |   |        |       |
 I   'm       a      dog

স্ট্যানফোর্ড এপিআই-র আরও তথ্যের জন্য দয়া করে http://www.nltk.org/_modules/nltk/parse/corenlp.html দেখুন । ডকাস্ট্রিংগুলিতে একবার দেখুন!


2

নোট করুন যে এই উত্তরটি NLTK v 3.0 এ প্রযোজ্য, এবং আরও সাম্প্রতিক সংস্করণগুলিতে নয়।

খ্যাতির কারণে আমি এটিকে একটি মন্তব্য হিসাবে রাখতে পারি না, তবে যেহেতু আমি এই সমস্যাটি সমাধান করার জন্য কিছুটা সময় নষ্ট করেছি (নষ্ট?) আমি বরং বরং নিজের সমস্যা / সমাধান ভাগ করে নেব এই পার্সারকে এনএলটিকে কাজ করতে পেতে।

ইন চমৎকার alvas থেকে উত্তর , এটা যে উল্লেখ করা হয়:

যেমন পার্সারের জন্য, কোনও মডেল ডিরেক্টরি থাকবে না।

এটি আমাকে ভুলভাবে পরিচালিত করেছে:

  • আমি যে মূল্য রেখেছি তা সম্পর্কে সতর্কতা অবলম্বন করবেন না STANFORD_MODELS (এবং কেবল আমার প্রতি যত্নশীল CLASSPATH)
  • ../path/tostanford-parser-full-2015-2012-09/models directory* কার্যত খালি * ছেড়ে দিন (বা এমন একটি জার ফাইলের সাথে যার নাম এনলটেক রেজেক্সের সাথে মেলে না)!

যদি ওপি, আমার মতো, কেবল পার্সারটি ব্যবহার করতে চেয়েছিল, তবে এটি বিভ্রান্তিকর হতে পারে যে অন্য কোনও কিছু ডাউনলোড না করার সময় (কোনও পসট্যাগার, কোনও এনইআর নয় ...) এবং এই সমস্ত নির্দেশাবলী অনুসরণ করে, আমরা এখনও একটি ত্রুটি পেয়েছি।

শেষ পর্যন্ত, যে কোনও CLASSPATHপ্রদত্ত (এই থ্রেডের উত্তরে নিম্নলিখিত উদাহরণ এবং ব্যাখ্যা) এর জন্য আমি ত্রুটিটি পেয়ে যাব:

NLTK স্ট্যানফোর্ড-পার্সার - ((\ d +) (। (\ D +))) + - মডেল.জার সন্ধান করতে অক্ষম ছিল! CLASSPATH পরিবেশ পরিবর্তনশীল সেট করুন vari স্ট্যানফোর্ড-পার্সারে আরও তথ্যের জন্য - (\ d +) (। (\ D +)) + - মডেল.জার,

দেখুন: http://nlp.stanford.edu/software/lex-parser.shtml

বা:

স্ট্যানফোর্ড-পার্সার.জার খুঁজে পেতে পারেনি এনএলটিকে! CLASSPATH পরিবেশ পরিবর্তনশীল সেট করুন vari স্ট্যানফোর্ড-পার্সার.জার আরও তথ্যের জন্য দেখুন: http://nlp.stanford.edu/software/lex-parser.shtml

যদিও , গুরুত্বপূর্ণ, আমি পার্সারটি সঠিকভাবে লোড করতে এবং ব্যবহার করতে পারতাম যদি আমি সমস্ত আর্গুমেন্ট এবং পথের সাথে সম্পূর্ণরূপে নির্দিষ্ট করে ফাংশনটি কল করি তবে:

stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanfor-parser-3.5.2-models.jar'    
parser = StanfordParser(path_to_jar=stanford_parser_jar, 
                    path_to_models_jar=stanford_model_jar)

একমাত্র পার্সারের সমাধান:

অতএব ত্রুটিটি এসেছিল NLTKএবং সরবরাহ STANFORD_MODELSএবং CLASSPATHপরিবেশের ভেরিয়েবলগুলি ব্যবহার করে এটি কীভাবে জারগুলি সন্ধান করছে । এটি সমাধানের জন্য *-models.jar, সঠিক বিন্যাসের সাথে ( NLTKকোডে রেজেক্সের সাথে মেলে , সুতরাং কোনও-কোরএনএলপি -২২ জার) অবশ্যই মনোনীত ফোল্ডারে অবস্থিত থাকতে হবে STANFORD_MODELS

যথা, আমি প্রথম তৈরি করেছি:

mkdir stanford-parser-full-2015-12-09/models

তারপরে এতে যুক্ত হয়েছে .bashrc:

export STANFORD_MODELS=/path/to/stanford-parser-full-2015-12-09/models

এবং পরিশেষে, অনুলিপি stanford-parser-3.6.0-models.jar(বা অনুরূপ সংস্করণ) দ্বারা :

path/to/stanford-parser-full-2015-12-09/models/

আমি যে StanfordParserক্লাসিকটি দেখিয়েছি তার সাথে অজগরটি সহজেই লোড করতে পারলাম । প্রকৃতপক্ষে, আপনি কোনও পরামিতি ছাড়াই কল করতে পারেন , ডিফল্টটি কেবলমাত্র কাজ করবে।CLASSPATHstanford-parser.jarStanfordParser


2

আমি nltk সংস্করণ ব্যবহার করছি 3.2.4। এবং নিম্নলিখিত কোডটি আমার পক্ষে কাজ করেছিল।

from nltk.internals import find_jars_within_path
from nltk.tag import StanfordPOSTagger
from nltk import word_tokenize

# Alternatively to setting the CLASSPATH add the jar and model via their 
path:
jar = '/home/ubuntu/stanford-postagger-full-2017-06-09/stanford-postagger.jar'
model = '/home/ubuntu/stanford-postagger-full-2017-06-09/models/english-left3words-distsim.tagger'

pos_tagger = StanfordPOSTagger(model, jar)

# Add other jars from Stanford directory
stanford_dir = pos_tagger._stanford_jar.rpartition('/')[0]
stanford_jars = find_jars_within_path(stanford_dir)
pos_tagger._stanford_jar = ':'.join(stanford_jars)

text = pos_tagger.tag(word_tokenize("Open app and play movie"))
print(text)

আউটপুট:

[('Open', 'VB'), ('app', 'NN'), ('and', 'CC'), ('play', 'VB'), ('movie', 'NN')]

আমি মনে করি এটি ট্যাগ এবং পার্সার নয়
নাদাভ বি

1

টেনসরফ্লো ব্যবহার করে প্রশিক্ষিত নিউরাল মডেলের উপর ভিত্তি করে স্ট্যানফোর্ড পার্সারের একটি নতুন বিকাশ খুব সম্প্রতি পাইথন এপিআই হিসাবে ব্যবহারের জন্য উপলব্ধ করা হয়েছে। এই মডেলটি জাভা-ভিত্তিক শিলের চেয়ে অনেক বেশি নির্ভুল বলে মনে করা হচ্ছে। আপনি অবশ্যই একটি NLTK পাইপলাইনের সাথে সংহত করতে পারেন।

পার্সারের লিঙ্ক থের সংগ্রহস্থলে 53 টি ভাষার জন্য প্রাক প্রশিক্ষিত পার্সার মডেল রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.