cogcomp-nlpy icon indicating copy to clipboard operation
cogcomp-nlpy copied to clipboard

text_annotation = self.pipeline.createBasicTextAnnotation("", "", text) AttributeError: 'NoneType' object has no attribute 'createBasicTextAnnotation'

Open monajalal opened this issue 7 years ago • 9 comments

What is the minimum working example of a code that I feed in a string and gives me the named entities?

from ccg_nlpy import local_pipeline

pipeline = local_pipeline.LocalPipeline()

d = "RT @HuffingtonPost BREAKING: Hillary Clinton wins #NVCaucus https://t.co/ZVCgIDvrX1"

doc = pipeline.doc(d)

if doc is not None:
    # do sth with it
    ner_view = doc.get_ner_conll

For above code, I get the following error:

$ python ccg_ner.py
WARNING:ccg_nlpy.pipeline_config:Models not found. To use pipeline locally, please refer the documentation for downloading models.
INFO:ccg_nlpy.pipeline_config:Using local pipeline
ERROR:ccg_nlpy.local_pipeline:Fail to load models, please check if your Java version is up to date.
Traceback (most recent call last):
  File "ccg_ner.py", line 7, in <module>
    doc = pipeline.doc(d)
  File "/scratch/sjn/anaconda/lib/python3.6/site-packages/ccg_nlpy/pipeline_base.py", line 36, in doc
    response = self.call_server(text, "TOKENS")
  File "/scratch/sjn/anaconda/lib/python3.6/site-packages/ccg_nlpy/local_pipeline.py", line 63, in call_server
    text_annotation = self.pipeline.createBasicTextAnnotation("", "", text)
AttributeError: 'NoneType' object has no attribute 'createBasicTextAnnotation'

My server is running on 02:13:57 INFO LabeledChuLiuEdmondsDecoder:72 - Loading cached PoS-to-dep dictionary from deprels.dict Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [1.4 sec]. Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [0.7 sec]. 02:14:01 INFO MainServer:67 - Done with loading the pipeline . . . 02:14:01 INFO MainServer:227 - ##### Used Memory[MB]:1532 02:14:01 INFO MainServer:230 - / Free Memory[MB]:1027 02:14:01 INFO MainServer:233 - / Total Memory[MB]:2560 02:14:01 INFO MainServer:236 - / Max Memory[MB]:31858 02:14:01 INFO log:186 - Logging initialized @120702ms 02:14:01 INFO EmbeddedJettyServer:126 - == Spark has ignited ... 02:14:01 INFO EmbeddedJettyServer:127 - >> Listening on 0.0.0.0:8080 02:14:01 INFO Server:345 - jetty-9.3.6.v20151106 02:14:01 INFO ServerConnector:270 - Started ServerConnector@67e0a155{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 02:14:01 INFO Server:397 - Started @120785ms

monajalal avatar May 15 '18 06:05 monajalal

Seems like you're missing the model files. Did you run python -m ccg_nlpy download before running your code?

danyaljj avatar May 15 '18 06:05 danyaljj

@danyaljj I have downloaded it but I still get the same error:

$ ls -ltra ~/.ccg_nlpy/
total 36
drwx-----x. 45 jalal cs-grad 12288 May 15 02:21 ..
-rw-r--r--.  1 jalal cs-grad   903 May 15 02:21 pom.xml
drwxr-xr-x.  2 jalal cs-grad 12288 May 15 02:22 model_3.1.15
drwxr-xr-x.  3 jalal cs-grad  4096 May 15 02:22 .
-rw-r--r--.  1 jalal cs-grad   103 May 15 02:22 config.cfg
$ python ccg_ner.py 
INFO:ccg_nlpy.pipeline_config:Using local pipeline
ERROR:ccg_nlpy.local_pipeline:Fail to load models, please check if your Java version is up to date.
Traceback (most recent call last):
  File "ccg_ner.py", line 6, in <module>
    pipeline.call_server(d, "NER_ONTONOTES")
  File "/scratch/sjn/anaconda/lib/python3.6/site-packages/ccg_nlpy/local_pipeline.py", line 63, in call_server
    text_annotation = self.pipeline.createBasicTextAnnotation("", "", text)
AttributeError: 'NoneType' object has no attribute 'createBasicTextAnnotation'

monajalal avatar May 15 '18 06:05 monajalal

Any idea what could be fixed?

$ java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)
$ python ccg_test.py 
INFO:ccg_nlpy.pipeline_config:Using local pipeline
ERROR:ccg_nlpy.local_pipeline:Fail to load models, please check if your Java version is up to date.
Traceback (most recent call last):
  File "ccg_test.py", line 7, in <module>
    doc = pipeline.doc(d)
  File "/scratch/sjn/anaconda/lib/python3.6/site-packages/ccg_nlpy/pipeline_base.py", line 36, in doc
    response = self.call_server(text, "TOKENS")
  File "/scratch/sjn/anaconda/lib/python3.6/site-packages/ccg_nlpy/local_pipeline.py", line 63, in call_server
    text_annotation = self.pipeline.createBasicTextAnnotation("", "", text)
AttributeError: 'NoneType' object has no attribute 'createBasicTextAnnotation'
$ cat ccg_test.py 
from ccg_nlpy import local_pipeline

pipeline = local_pipeline.LocalPipeline()

d = "RT @HuffingtonPost BREAKING: Hillary Clinton wins #NVCaucus https://t.co/ZVCgIDvrX1"

doc = pipeline.doc(d)

if doc is not None:
    # do sth with it
    ner_view = doc.get_ner_conll

$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.5.1804 (Core) 
Release:	7.5.1804
Codename:	Core

monajalal avatar May 15 '18 06:05 monajalal

@GHLgh any thoughts on this?

danyaljj avatar May 15 '18 14:05 danyaljj

@danyaljj @monajalal The actual error message was omitted in the code and on my side, the error message is the following:

dlopen(/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/jre/lib/server/libjvm.dylib, 10): image not found

The JDK 9 Release remove the sub-directory "jre" and I believe that pyjnius still searching files in "jre" directory. You should check if this is the case here. A workaround is to create a symbolic link (to pretend there is "jre" directory):

cd $JAVA_HOME
sudo ln -s ./ jre

After using the workaround, another issue came out:

jnius.JavaException: JVM exception occurred: View 'å' cannot be provided by this AnnotatorService.

It seems like the Python string doesn't get converted to Java string properly, as suggested in the issue, this can be fixed by converting the string explicitly before passing it to APIs on Java side:

# In local_pipeline.py

# import Java String class along with other imported autoclasses
self.JString = autoclass('java.lang.String') 
# Convert the string into Java String before calling APIs on Java side, example:
self.pipeline.addView(text_annotation, self.JString(view.strip()))
# Previous implementation: self.pipeline.addView(text_annotation,view.strip())

After that, the example can be run properly:

python -i test.py
...
>>> print(ner_view)
NER_CONLL view: (PER Hillary Clinton) (ORG NVCaucus)

GHLgh avatar May 15 '18 16:05 GHLgh

@monajalal does this resolve your problem?

danyaljj avatar May 15 '18 22:05 danyaljj

Thanks for looking into this. At the moment, I don't have enough permission and our site admin will look into this. I will notify if it will help us or what further bugs we might get.

monajalal avatar May 16 '18 00:05 monajalal

that didn't work out so I opted out to remote server:

$ cat ccg_test_remote.py 
from ccg_nlpy import remote_pipeline

pipeline = remote_pipeline.RemotePipeline()

d = "RT @HuffingtonPost BREAKING: Hillary Clinton wins #NVCaucus https://t.co/ZVCgIDvrX1"

doc = pipeline.doc(d)

if doc is not None:
    # do sth with it
    ner_view = doc.get_ner_conll
    print(ner_view)

$ python ccg_test_remote.py 
INFO:ccg_nlpy.pipeline_config:Using pipeline web server with API: http://austen.cs.illinois.edu:8080
INFO:ccg_nlpy.remote_pipeline:pipeline has been set up
NER_CONLL view: (PER Hillary Clinton) 

btw why in here @HuffingtonPost is not considered as an entity?

monajalal avatar May 16 '18 18:05 monajalal

Hi, check the https://github.com/kivy/pyjnius/issues/300 and the newest pyjnius release again whether it fixed the issues for you. If not, open a new issue with detailed description and reproducible steps. :dango:

KeyWeeUsr avatar Nov 29 '18 20:11 KeyWeeUsr