|
import os |
|
import sys |
|
|
|
import corenlp |
|
import requests |
|
|
|
class CoreNLP: |
|
def __init__(self): |
|
if not os.environ.get('CORENLP_HOME'): |
|
os.environ['CORENLP_HOME'] = os.path.abspath( |
|
os.path.join( |
|
os.path.dirname(__file__), |
|
'../../third_party/stanford-corenlp-full-2018-10-05')) |
|
if not os.path.exists(os.environ['CORENLP_HOME']): |
|
raise Exception( |
|
'''Please install Stanford CoreNLP and put it at {}. |
|
|
|
Direct URL: http://nlp.stanford.edu/software/stanford-corenlp-full-2018-10-05.zip |
|
Landing page: https://stanfordnlp.github.io/CoreNLP/'''.format(os.environ['CORENLP_HOME'])) |
|
self.client = corenlp.CoreNLPClient(endpoint="http://localhost:8999") |
|
|
|
def __del__(self): |
|
self.client.stop() |
|
|
|
def annotate(self, text, annotators=None, output_format=None, properties=None): |
|
try: |
|
result = self.client.annotate(text, annotators, output_format, properties) |
|
except (corenlp.client.PermanentlyFailedException, |
|
requests.exceptions.ConnectionError) as e: |
|
print('\nWARNING: CoreNLP connection timeout. Recreating the server...', file=sys.stderr) |
|
self.client.stop() |
|
self.client.start() |
|
result = self.client.annotate(text, annotators, output_format, properties) |
|
|
|
return result |
|
|
|
|
|
_singleton = None |
|
|
|
|
|
def annotate(text, annotators=None, output_format=None, properties=None): |
|
global _singleton |
|
if not _singleton: |
|
_singleton = CoreNLP() |
|
return _singleton.annotate(text, annotators, output_format, properties) |
|
|