मैं स्टैनफोर्ड एनईआर टैगर चलाने के लिए दोनों पायथन और जावा का उपयोग कर रहा हूं लेकिन मुझे परिणामों में अंतर दिखाई दे रहा है।स्टैनफोर्ड एनईआर टैगर एनएलटीके (पायथन) बनाम जावा में परिणाम अंतर
उदाहरण के लिए, जब मैं इनपुट वाक्य "इरविन इस के लिए प्राथमिक सॉफ्टवेयर के रूप में उपयोग करते हुए डेटा मॉडलिंग के सभी पहलुओं में शामिल किया गया।",
जावा परिणाम:
"ERwin": "PERSON"
अजगर परिणाम:
In [6]: NERTagger.tag("Involved in all aspects of data modeling using ERwin as the primary software for this.".split())
Out [6]:[(u'Involved', u'O'),
(u'in', u'O'),
(u'all', u'O'),
(u'aspects', u'O'),
(u'of', u'O'),
(u'data', u'O'),
(u'modeling', u'O'),
(u'using', u'O'),
(u'ERwin', u'O'),
(u'as', u'O'),
(u'the', u'O'),
(u'primary', u'O'),
(u'software', u'O'),
(u'for', u'O'),
(u'this.', u'O')]
पायथन एनएनटीके रैपर व्यक्ति के रूप में "ईरविन" नहीं पकड़ सकता है।
यहां क्या दिलचस्प है पाइथन और जावा दोनों ही प्रशिक्षित डेटा (english.all.3class.caseless.distsim.crf.ser.gz) का उपयोग 2015-04-20 में जारी किए गए हैं।
मेरा अंतिम लक्ष्य जावा के समान तरीके से पाइथन काम करना है।
मैं nltk.tag में स्टैनफोर्ड एनईआरटीगर को देख रहा हूं यह देखने के लिए कि क्या कुछ भी मैं संशोधित कर सकता हूं। नीचे आवरण कोड है:
class StanfordNERTagger(StanfordTagger):
"""
A class for Named-Entity Tagging with Stanford Tagger. The input is the paths to:
- a model trained on training data
- (optionally) the path to the stanford tagger jar file. If not specified here,
then this jar file must be specified in the CLASSPATH envinroment variable.
- (optionally) the encoding of the training data (default: UTF-8)
Example:
>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') # doctest: +SKIP
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split()) # doctest: +SKIP
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'),
('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'),
('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'LOCATION')]
"""
_SEPARATOR = '/'
_JAR = 'stanford-ner.jar'
_FORMAT = 'slashTags'
def __init__(self, *args, **kwargs):
super(StanfordNERTagger, self).__init__(*args, **kwargs)
@property
def _cmd(self):
# Adding -tokenizerFactory edu.stanford.nlp.process.WhitespaceTokenizer -tokenizerOptions tokenizeNLs=false for not using stanford Tokenizer
return ['edu.stanford.nlp.ie.crf.CRFClassifier',
'-loadClassifier', self._stanford_model, '-textFile',
self._input_file_path, '-outputFormat', self._FORMAT, '-tokenizerFactory', 'edu.stanford.nlp.process.WhitespaceTokenizer', '-tokenizerOptions','\"tokenizeNLs=false\"']
def parse_output(self, text, sentences):
if self._FORMAT == 'slashTags':
# Joint together to a big list
tagged_sentences = []
for tagged_sentence in text.strip().split("\n"):
for tagged_word in tagged_sentence.strip().split():
word_tags = tagged_word.strip().split(self._SEPARATOR)
tagged_sentences.append((''.join(word_tags[:-1]), word_tags[-1]))
# Separate it according to the input
result = []
start = 0
for sent in sentences:
result.append(tagged_sentences[start:start + len(sent)])
start += len(sent);
return result
raise NotImplementedError
, या अगर यह क्योंकि विभिन्न वर्गीकरणकर्ता का उपयोग करने का है (जावा कोड में, यह AbstractSequenceClassifier उपयोग करने के लिए लगता है, दूसरे हाथ पर, अजगर nltk आवरण CRFClassifier उपयोग करता है।) वहाँ एक रास्ता है कि मैं अजगर wrapper में सार SequenceClassifier का उपयोग कर सकते हैं?
कोरनएलपी का उपयोग करना स्टैनफोर्ड उपकरणों के लिक्विड इंटरफेस के साथ लचीली उपयोग के लिए जाने का तरीका है। लेकिन मुझे कोशिश करें कि क्या मैं नाश्ते के बाद, इस में अपना रास्ता निकाल सकता हूं;) – alvas
आपके द्वारा चलाए गए जावा कमांड क्या हैं? क्या आपने इसे कमांड लाइन पर चलाया था? – alvas
क्या गैबर एंजेली का समाधान वास्तव में काम करता था या नहीं? – user1412066