এনএলটিকে স্ট্যানফোর্ড পার্সার ব্যবহার করা কি সম্ভব? (আমি স্ট্যানফোর্ড পস সম্পর্কে কথা বলছি না।)
এনএলটিকে স্ট্যানফোর্ড পার্সার ব্যবহার করা কি সম্ভব? (আমি স্ট্যানফোর্ড পস সম্পর্কে কথা বলছি না।)
উত্তর:
নোট করুন যে এই উত্তরটি 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
NLTK ভি 3 ডাউনলোড করুন থেকে: https://github.com/nltk/nltk । এবং এনএলটিকে ইনস্টল করুন:
sudo পাইথন সেটআপ.পিপি ইনস্টল করুন
পাইথন ব্যবহার করে স্ট্যানফোর্ড পার্সার পেতে আপনি এনএলটিকে ডাউনলোডার ব্যবহার করতে পারেন:
import nltk
nltk.download()
আমার উদাহরণ চেষ্টা করুন! (জার পাথগুলি পরিবর্তন করতে এবং সেরপজ স্থানে মডেলের পাথ পরিবর্তন করবেন না)
বা:
উপরের মত এনএলটিকে ভি 3 ডাউনলোড এবং ইনস্টল করুন।
সর্বশেষ সংস্করণটি ডাউনলোড করুন ( বর্তমান সংস্করণ ফাইলের নামটি স্ট্যানফোর্ড- পার্সার- পুরো ২০১৫-০১-২৯.জিপ): http://nlp.stanford.edu/software/lex-parser.shtml# ডাউনলোড ডাউনলোড
স্ট্যান্ডফোর্ড-পার্সার- পুরো ২০০০ এক্সএক্সএক্সএক্সএক্সএক্সএক্স.জিপ বের করুন Ext
একটি নতুন ফোল্ডার তৈরি করুন (আমার উদাহরণে 'জারস')। এক্সট্রাক্ট করা ফাইলগুলি এই জার ফোল্ডারে রাখুন: স্ট্যানফোর্ড-পার্সার -৩.এক্সএক্স-মডেলস.জার এবং স্ট্যানফোর্ড-পার্সার.জার jar
উপরে প্রদর্শিত হিসাবে আপনি এই 'জারস' ফোল্ডারে নির্দেশ করতে পরিবেশের ভেরিয়েবলগুলি (STANFORD_PARSER এবং STANFORD_MODELS) ব্যবহার করতে পারেন। আমি লিনাক্স ব্যবহার করছি, সুতরাং আপনি যদি উইন্ডোজ ব্যবহার করেন তবে দয়া করে এমন কিছু ব্যবহার করুন: সি: // ফোল্ডার // জার্স।
সংরক্ষণাগার ব্যবস্থাপক (z জীপ) ব্যবহার করে স্ট্যানফোর্ড-পার্সার -৩.এক্সএক্সএক্স-মডেলস.জার খুলুন।
জার ফাইলের ভিতরে ব্রাউজ করুন; এডু / স্ট্যানফোর্ড / এনএলপি / মডেল / লেপপারসার। আবার, 'ইংলিশপিসিএফজি.সেসর .zz' নামক ফাইলটি বের করুন। আপনি এই ser.gz ফাইলটি যেখানে বের করেছেন সেই স্থানটি মনে রাখবেন।
স্ট্যানফোর্ডপার্সার উদাহরণ তৈরি করার সময়, আপনি প্যারামিটার হিসাবে মডেল পাথ সরবরাহ করতে পারেন। এটি আমাদের ক্ষেত্রে / অবস্থান /of /englishPCFG.ser.gz ক্ষেত্রে মডেলের সম্পূর্ণ পথ।
আমার উদাহরণ চেষ্টা করুন! (জার পাথগুলি পরিবর্তন করতে এবং সেরপজ স্থানে মডেলের পাথ পরিবর্তন করবেন না)
nltk.parse.stanford
? আমার কেবল nltk.tag.stanford
এনএলটিকে আছে 2.0.4
।
AttributeError: 'StanfordParser' object has no attribute 'raw_batch_parse'
raw_parse_sents()
for line in sentences: for sentence in line: sentence.draw()
আপনি কেবলমাত্র একটি বৃক্ষের বস্তুর উপর অঙ্কন () চালাতে পারেন
NLTK official 3rd party tools
ডকুমেন্টেশন থেকে প্রাপ্ত নির্দেশাবলী অনুসরণ করার জন্য এখানে সমস্ত উত্তরে অস্বীকৃতি যুক্ত করা ভাল ।
নীচের উত্তরটি অবচিত করা হয়েছে, দয়া করে এনএলটিকে ভি 3.3 এবং তার জন্য https://stackoverflow.com/a/51981566/610569 এ সমাধানটি ব্যবহার করুন ।
দ্রষ্টব্য: নিম্নলিখিত উত্তরগুলি কেবলমাত্র এতে কাজ করবে:
যেহেতু উভয় সরঞ্জাম পরিবর্তে দ্রুত পরিবর্তিত হয় এবং 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
ভেরিয়েবলগুলি হ্রাস করা হয় এবং কোনও দীর্ঘ ব্যবহার করা হয় না
ধরে নিই যে আপনি আপনার ওএসে যথাযথভাবে জাভা ইনস্টল করেছেন।
এখন, আপনার NLTK সংস্করণ ইনস্টল / আপডেট করুন (দেখুন http://www.nltk.org/install.html ):
sudo pip install -U nltk
sudo apt-get install python-nltk
উইন্ডোজের জন্য (32-বিট বাইনারি ইনস্টলেশন ব্যবহার করুন):
( কেন 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
উইন্ডোজ / ম্যাকে:
এনভায়রনমেন্ট ভেরিয়েবল সেটআপ করুন যেমন এনএলটিকি প্রাসঙ্গিক ফাইল পাথ স্বয়ংক্রিয়ভাবে খুঁজে পেতে পারে। আপনাকে নিম্নলিখিত ভেরিয়েবলগুলি সেট করতে হবে:
পরিবেশগত পরিবর্তনশীলটিতে উপযুক্ত স্ট্যানফোর্ড এনএলপি .jar
ফাইল যুক্ত করুন CLASSPATH
।
stanford-ner-2015-04-20/stanford-ner.jar
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
ভেরিয়েবলের জন্য উপযুক্ত মডেল ডিরেক্টরি যুক্ত করুন (উদাহরণস্বরূপ ডিরেক্টরিটি যেখানে আপনি প্রাক প্রশিক্ষিত মডেলগুলি সংরক্ষণ করা সন্ধান করতে পারেন)
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)
নীচের উত্তরটি অবচিত করা হয়েছে, দয়া করে এনএলটিকে ভি 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
len(i.strip()) > 0
অন্যথায় আমার একটি ত্রুটি হয়েছে। আমার অনুমান যে আমার পার্সার আউটপুটটিতে কমপক্ষে একটি লাইন ছিল যা খাঁটি সাদা জায়গা ছিল।
'
গুলি থাকে তবে আপনি কিছু অদ্ভুত ত্রুটি পাবেন। সেখানে ভাল উপায় আছে কমান্ড লাইন জিনিষ ডাকতে
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))
। উদাহরণটি সংশোধন করেছেন;)
স্ট্যানফোর্ড পার্সারের জন্য পাইথন ইন্টারফেস রয়েছে
স্ট্যানফোর্ড কোর এনএলপি সফ্টওয়্যার পৃষ্ঠায় পাইথন মোড়কের একটি তালিকা রয়েছে:
যদি আমি ভাল করে মনে করি তবে স্ট্যানফোর্ড পার্সারটি জাভা গ্রন্থাগার, সুতরাং আপনার সার্ভার / কম্পিউটারে আপনার অবশ্যই একটি জাভা ইন্টারপ্রেটার চালু থাকতে হবে।
আমি এটি পিএইচপি স্ক্রিপ্টের সাথে মিলিয়ে একবার সার্ভার ব্যবহার করেছি। স্ক্রিপ্টটি পার্সারে যেমন কমান্ড-লাইন কল করতে পিএইচপি এর এক্সিকিউটিউট () ফাংশন ব্যবহার করেছিল:
<?php
exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );
?>
আমি এই কমান্ডের সমস্ত বিবরণ মনে রাখিনা, এটি মূলত ফাইলটোপ্সেটি খুলল, এটি বিশ্লেষণ করে ফলাফল ফাইলে আউটপুট লিখেছিল। পিএইচপি তারপরে আরও ব্যবহারের জন্য ফলাফল ফাইলটি খুলবে।
কমান্ডের সমাপ্তি স্ক্রিপ্টটিকে অপ্রয়োজনীয় থেকে কমান্ড কমান্ড লাইনের তথ্য রোধ করতে পার্সারের ক্রিয়াপুস্তকে NUL তে নির্দেশ দেয়।
পাইথন সম্পর্কে আমি বেশি কিছু জানি না, তবে কমান্ড লাইন কল করার কোনও উপায় থাকতে পারে।
এটি আপনি যে সঠিক পথের জন্য প্রত্যাশা করেছিলেন তা নাও হতে পারে তবে আশা করি এটি আপনাকে কিছুটা অনুপ্রেরণা দেবে। ভাগ্য সুপ্রসন্ন হোক.
নোট করুন যে এই উত্তরটি 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 এ উত্স কোড দেখুন) এবং আপনাকে জাভাহোম ভেরিয়েবল সংজ্ঞায়িত করতে হবে। আমি ব্যাকরণ ফাইলটি পাত্রে সিটারুতে পড়ার চেষ্টা করেছি, তবে এখনও পর্যন্ত এটি করতে ব্যর্থ হয়েছি।
আপনি 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)
নোট করুন যে এই উত্তরটি 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)
এইভাবে, আপনাকে আর পথের জিনিস নিয়ে চিন্তা করার দরকার নেই।
যারা উবুন্টুতে এটি সঠিকভাবে ব্যবহার করতে পারবেন না বা একটিলিপসে কোডটি চালাতে পারবেন না।
আমি একটি উইন্ডোজ মেশিনে আছি এবং আপনি সাধারণভাবে পার্সারটি চালাতে পারেন আপনি যেমন কমান্ড থেকে পছন্দ করেন ঠিক তেমনই কিন্তু কোনও ভিন্ন ডিরেক্টরিতেও যাতে আপনার লেক্সপারসার.বাট ফাইলটি সম্পাদনা করার প্রয়োজন হয় না। শুধু পুরো পথে রাখুন।
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()
আমার জন্য কৌতূহলোদ্দীপক অংশটি বুঝতে পারছিল যে কীভাবে কোনও জাভা প্রোগ্রামটি অন্য কোনও পথ থেকে চালানো যায়। আরও ভাল উপায় থাকতে হবে তবে এটি কাজ করে।
নোট করুন যে এই উত্তরটি 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()
নোট করুন যে এই উত্তরটি 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়ভাবে আপনাকে এই পদ্ধতিটি উইন্ডোজের নীচে প্রয়োগ করার জন্য সুপারিশ করছি যেহেতু আমি পৃষ্ঠাটিতে বেশ কয়েকটি উত্তর চেষ্টা করেছি এবং সমস্ত পদ্ধতি জাভা ব্যর্থ হওয়ার সাথে অজগরকে যোগাযোগ করে।
আপনি উইন্ডোতে সফল হলে আপনার কাছ থেকে শুনতে ইচ্ছুক এবং ইচ্ছে করে আপনি কীভাবে এই সমস্ত সমস্যা কাটিয়ে উঠতে পারেন তা আমাকে বলতে পারেন।
পাইথন সংস্করণ পেতে স্ট্যানফোর্ড কোরএনএলপি জন্য পাইথন মোড়ক সন্ধান করুন
আমি অনেক ঘন্টা নিয়েছি এবং শেষ পর্যন্ত উইন্ডোজ ব্যবহারকারীদের জন্য একটি সহজ সমাধান খুঁজে পেয়েছি। মূলত এটি আলভাসের দ্বারা বিদ্যমান উত্তরটির সংক্ষিপ্ত সংস্করণ , তবে স্ট্যানফোর্ড এনএলপিতে যারা নতুন এবং উইন্ডো ব্যবহারকারী তাদের পক্ষে অনুসরণ করা সহজ (আশাবাদী) করা সহজ হয়েছে।
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())
নীচের উত্তরটি অবচিত করা হয়েছে, দয়া করে এনএলটিকে ভি 3.3 এবং তার জন্য https://stackoverflow.com/a/51981566/610569 এ সমাধানটি ব্যবহার করুন ।
দ্রষ্টব্য: নিম্নলিখিত উত্তরগুলি কেবলমাত্র এতে কাজ করবে:
যেহেতু উভয় সরঞ্জাম পরিবর্তে দ্রুত পরিবর্তিত হয় এবং 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 দেখুন । ডকাস্ট্রিংগুলিতে একবার দেখুন!
নোট করুন যে এই উত্তরটি 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
ক্লাসিকটি দেখিয়েছি তার সাথে অজগরটি সহজেই লোড করতে পারলাম । প্রকৃতপক্ষে, আপনি কোনও পরামিতি ছাড়াই কল করতে পারেন , ডিফল্টটি কেবলমাত্র কাজ করবে।CLASSPATH
stanford-parser.jar
StanfordParser
আমি 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')]
টেনসরফ্লো ব্যবহার করে প্রশিক্ষিত নিউরাল মডেলের উপর ভিত্তি করে স্ট্যানফোর্ড পার্সারের একটি নতুন বিকাশ খুব সম্প্রতি পাইথন এপিআই হিসাবে ব্যবহারের জন্য উপলব্ধ করা হয়েছে। এই মডেলটি জাভা-ভিত্তিক শিলের চেয়ে অনেক বেশি নির্ভুল বলে মনে করা হচ্ছে। আপনি অবশ্যই একটি NLTK পাইপলাইনের সাথে সংহত করতে পারেন।
পার্সারের লিঙ্ক থের সংগ্রহস্থলে 53 টি ভাষার জন্য প্রাক প্রশিক্ষিত পার্সার মডেল রয়েছে।