5

So I got the "standard" Stanford Parser to work thanks to danger89's answers to this previous post, Stanford Parser and NLTK.

However, I am now trying to get the dependency parser to work and it seems the method highlighted in the previous link no longer works. Here is my code:

import nltk
import os
java_path = "C:\\Program Files\\Java\\jre1.8.0_51\\bin\\java.exe" 
os.environ['JAVAHOME'] = java_path


from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = 'path/jar'
os.environ['STANFORD_MODELS'] = 'path/jar'
parser = stanford.StanfordDependencyParser(model_path="path/jar/englishPCFG.ser.gz")

sentences = parser.raw_parse_sents(nltk.sent_tokenize("The iPod is expensive but pretty."))

I get the following error: 'module' object has no attribute 'StanfordDependencyParser'

The only thing I changed was "StanfordDependencyParser" from "StanfordParser". Any ideas how I can get this to work?

I also tried the Stanford Neural Dependency parser by importing it as shown in the documentation here: http://www.nltk.org/_modules/nltk/parse/stanford.html

This one didn't work either.

Pretty new to NLTK. Thanks in advance for any helpful input.

Community
  • 1
  • 1
Max
  • 71
  • 1
  • 1
  • 6

2 Answers2

6

The StanfordDependencyParser API is a new class object created since NLTK version 3.1.

Ensure that you have the latest NLTK available either through pip

pip install -U nltk

or through your linux package manager, e.g.:

sudo apt-get python-nltk

or in windows, download https://pypi.python.org/pypi/nltk and install and it should overwrite your previous NLTK version.

Then you can use the API as shown in the documentation:

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.")]

[out]:

[Tree('jumps', [Tree('fox', ['The', 'quick', 'brown']), Tree('dog', ['over', 'the', 'lazy'])])]

(Note: Make sure you get your path to jar and os.environ correct, in Windows, it's something\\something\\some\\path, in unix it's something/something/some/path)

See also https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software#stanford-tagger-ner-tokenizer-and-parser and when you need a TL;DR solution, see https://github.com/alvations/nltk_cli

alvas
  • 115,346
  • 109
  • 446
  • 738
  • This worked after I re-installed Spyder and re-installed NLTK. I was running both Python2 and Python3 for some other work and I think the installation was "confused". Thanks! – Max Dec 03 '15 at 17:37
  • 1
    You will note that after you update your NLTK to v3.1, @danger89 code will no longer work. Please see the updated answers to http://stackoverflow.com/questions/13883277/stanford-parser-and-nltk – alvas Dec 06 '15 at 03:09
0

If the only thing you changed was 'StanfordDependencyParser' and the error states: module' object has no attribute 'StanfordDependencyParser' I would assume that StanfordDependencyParser was the wrong thing to change it to. Have you copied all of the code that you linked to verbatim?

beoliver
  • 5,579
  • 5
  • 36
  • 72
  • I was hoping that it was a simple thing too but the documentation from http://www.nltk.org/_modules/nltk/parse/stanford.html seems to indicate that StanfordDependencyParser does exist. I'm wondering if I need to change this import statement: "from nltk.parse import stanford" – Max Dec 02 '15 at 21:41