أهلا،
أحاول تشغيل مثال محلل ستانفورد. على سبيل المثال
from nltk.parse.stanford import *
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
[parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]
تنفيذ آخر أمر يؤدي إلى ظهور خطأ:
OSError: Java command failed : [u'/usr/bin/java', u'-mx1000m', '-cp', ....
عندما أقوم بإعادة إنتاج نفس الأمر في سطر الأوامر ، يظهر لي الخطأ Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
لذلك ، بعد إضافة slf4j-api.jar
إلى classpath _ على سطر الأوامر_ ، يكون التحليل ناجحًا.
كيف يمكن إضافة slf4j-api.jar
إلى nltk classpath ، لذا سيكون التحليل ناجحًا؟
شكرا لك!
اجازة سعيدة
yuvval فقط للتأكد من أنك تستخدم إصدار Stanford Parser 2015-12-09؟ إذا كان الأمر كذلك ، يحدث هذا الخطأ بسبب استخدام StanfordNLP الجديد تبعيات أكثر من ذي قبل. هذا مشابه للرقم 1237
سوف تضطر إلى الانتظار لفترة من الوقت قبل إصلاح # 1237 وتلتحق NLTK بأدوات Standford.
حل الإصلاح السريع هو إما:
from nltk.internals import find_jars_within_path
from nltk.parse.stanford import StanfordDependencyParser
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
stanford_dir = st._stanford_jar.rpartition('/')[0]
# or in windows comment the line above and uncomment the one below:
#stanford_dir = st._stanford_jar.rpartition("\\")[0]
stanford_jars = find_jars_within_path(stanford_dir)
st.stanford_jar = ':'.join(stanford_jars)
[parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]
شكرا لك! يعمل مع إصدار 2015-04-20.
هل نجح الاختراق في Classpath أيضًا؟
لم أحاول - لقد قمت للتو بحذف أحدث إصدار وقمت بتنزيل الإصدار 2015-04-20.
أهلا! لقد حاولت متابعة الاختراق الخاص بك ولكن بالنسبة لي لا يوجد برنامج `` StanfordDependencyParser '':
print(nltk.__version__)
from nltk.tag import StanfordDependencyParser
3.1
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-7-67bb74c3494a> in <module>()
----> 1 from nltk.tag import StanfordDependencyParser
ImportError: cannot import name 'StanfordDependencyParser'
أي فكرة عن كيفية حل هذا؟ أود حقًا استخدام أحدث إصدار من ستانفورد.
methodds عفواً عن الخطأ المطبعي ، إنه from nltk.parse.stanford import StanfordDependencyParser
. يرجى الاطلاع على https://gist.github.com/alvations/e1df0ba227e542955a8a للحصول على تفسيرات مفصلة.
شكرا لك على الرابط. لسوء الحظ ، لا يمكنني الحصول على متغيرات البيئة للعمل على نظام التشغيل Linux mint الخاص بي.
يبدو bashrc
كما يلي:
export JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH="/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$CLASSPATH"
export CLASSPATH="/home/cs/stanford_nlp/stanford-ner-2015-04-20/stanford-ner.jar:$CLASSPATH"
export STANFORD_MODELS="/home/cs/stanford_nlp/stanford-ner-2015-04-20/classifiers:$STANFORD_MODELS"
export STANFORD_MODELS="/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/models:$STANFORD_MODELS"
يبدو ترديد المتغيرات صحيحًا:
echo $CLASSPATH
/home/cs/stanford_nlp/stanford-ner-2015-04-20/stanford-ner.jar:/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/stanford-postagger.jar
echo $STANFORD_MODELS
/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/models:/home/cs/stanford_nlp/stanford-ner-2015-04-20/classifiers
ومع ذلك (حتى بعد إعادة التشغيل) لا يزال NLTK لا يجد الوسم:
from nltk.tag.stanford import StanfordPOSTagger
st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
st.tag('What is the airspeed of an unladen swallow ?'.split())
NLTK was unable to find stanford-postagger.jar! Set the CLASSPATH
environment variable.
افعل source .bashrc
وسيعمل في غضون ذلك ، ألق نظرة على http://apple.stackexchange.com/questions/12993/why-doesnt-bashrc-run-automatically لمعرفة كيفية عمل bashrc.
شكرا لك على نصيحتك ، لكنني قمت بمصدر .bashrc مسبقا ولم تنجح. لقد حاولت مرة أخرى ولسوء الحظ ما زالت لا تعمل.
ما هو توزيع Linux الخاص بك وإصداره؟ هل يمكنك عمل lsb_release -a
؟ أم أنك تعمل مع جهاز Mac؟
شكرا لك على التحقيق. إرجاع ` lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 17.3 Rosa
Release: 17.3
Codename: rosa
export
؟ أي دليل؟انتقل إلى المكان الذي تريد تشغيل نص Python فيه ، افعل هذا: import os; print os.environ
.
ثم انتقل إلى الدليل الرئيسي الخاص بك ، وابدأ بايثون وافعل الشيء نفسه: import os; print os.environ
هل ترى اختلاف مجموعتي متغيرات البيئة؟
أعتقد أنك أردت مني استخدام import os; print(os.environ)
، والذي لم يكشف عن متغيرات البيئة التي قمت بتصديرها في .bashrc
. بعد ذلك قمت بنسخ المحتوى الذي قمت بلصقه في .profile
(في مجلد منزلي) وهو الآن يعمل بشكل مثالي. ليس لدي أي فكرة لماذا على الرغم من = D.
سعيد لأن .profile
يعمل ، أعتقد أنها مشكلة في توزيع نظام التشغيل. لا أوصي بتخزين متغيرات البيئة على أنها ثابتة ، شخصيًا ، أعيد تشغيلها في كل مرة أبدأ فيها نصوص بايثون ، حتى أتمكن من التأكد من عدم وجود تعارض. استمتع مع NLTK API وأدوات ستانفورد!
شكرا لك :)
ما هو 'st' في الأمر 'stanford_dir = st._stanford_jar.rpartition (' / ') [0]'
لدي نفس السؤال مثل hansen7
بالنسبة لعدد قليل من الذين كانوا يبحثون عن شارع ،
st = StanfordNERTagger(os.environ.get('STANFORD_MODELS'))
المرجع: https://gist.github.com/manashmndl/810db10809cbc1209b34c7d25efe95d5#file -stanfordnertagger-py
التعليق الأكثر فائدة
ما هو 'st' في الأمر 'stanford_dir = st._stanford_jar.rpartition (' / ') [0]'