Я пытаюсь реализовать фильтр, который отправляет документ на сервер StanfordNLP. Однако я не уверен, как должны выглядеть данные, которые должны быть переданы. На данный момент я делаю это так:Как построить запрос в Python для сервера StanfordNLP?
values = {
paragraph: "true",
"tokenize.whitespace": "true",
"annotators": "tokenize,ssplit,pos",
"outputFormat": "json"
}
data = urllib.urlencode(values)
req = urllib2.Request(self.url, data)
response = urllib2.urlopen(req)
result = response.read()
Для ввода документа:
u'I own a dog but bought this fun and helpful book for two of my favorite people that own a cat for a gift. What a perrrrrfect gift item it is and both my friends just loved it. Hoping to have It\\'s a Dog\\'s LIfe soon.Linda Hannawalt'
Выходной сервер отладки (data
) выглядит следующим образом:
[/127.0.0.1:36926] API call w/annotators tokenize,ssplit,pos,depparse,lemma,ner,mention,coref,natlog,openie
outputFormat=json&This+remote%2C+for+whatever+reason%2C+was+chosen+by+Time+Warner+to+replace+their+previous+silver+remote%2C+the+Time+Warner+Synergy+V+RC-U62CP-1.12S.++The+actual+function+of+this+CLIKR-5+is+OK%2C+but+the+ergonomic+design+sets+back+remotes+by+20+years.++The+buttons+are+all+the+same%2C+there%27s+no+separation+of+the+number+buttons%2C+the+volume+and+channel+buttons+are+the+same+shape+as+the+other+buttons+on+the+remote%2C+and+it+all+adds+up+to+a+crappy+user+experience.++Why+would+TWC+accept+this+as+a+replacement%3F++This+remote+is+virtually+impossible+to+pick+up+and+use+without+staring+at+it+to+make+sure+where+your+fingers+are.++Heck%2C+you+have+to+feel+around+just+to+figure+out+if+you%27ve+grabbed+it+by+the+top+or+bottom%2C+since+there%27s+no+articulation+in+the+body+of+the+thing+to+tell+you+which+end+is+up.++Horrible%2C+just+horrible+design.++I%27m+skipping+this+and+paying+double+for+a+refurbished+Synergy+V.=true&annotators=tokenize%2Cssplit%2Cpos&tokenize.whitespace=true
Но это выход, который я получаю:
<type 'list'>: [{'lemma': u'outputformat', 'originalText': u'outputFormat'}, {'lemma': u'json', 'originalText': u'json'}, {'lemma': u'annotator', 'originalText': u'annotators'}, {'lemma': u'%', 'originalText': u'%'}, {'lemma': u'%', 'originalText': u'%'}, {'lemma': u'2cpos', 'originalText': u'2Cpos'}, {'lemma': u'dog', 'originalText': u'dog'}, {'lemma': u'fun', 'originalText': u'fun'}, {'lemma': u'book', 'originalText': u'book'}, {'lemma': u'people', 'originalText': u'people'}, {'lemma': u'cat', 'originalText': u'cat'}, {'lemma': u'gift', 'originalText': u'gift'}, {'lemma': u'perrrrrfect', 'originalText': u'perrrrrfect'}, {'lemma': u'gift', 'originalText': u'gift'}, {'lemma': u'item', 'originalText': u'item'}, {'lemma': u'friend', 'originalText': u'friends'}, {'lemma': u'%', 'originalText': u'%'}, {'lemma': u'dog', 'originalText': u'Dog'}, {'lemma': u'%', 'originalText': u'%'}, {'lemma': u'life', 'originalText': u'LIfe'}, {'lemma': u'soon.linda', 'originalText': u'soon.Linda'}, {'lemma': u'hannawalt', 'originalText': u'Hannawalt'}, {'lemma': u'tokenize.whitespace', 'originalText': u'tokenize.whitespace'}]
Таким образом, фактический текст находится там, но {'lemma': u'outputformat', 'originalText': u'outputFormat'}
явно ошибочен. Как бы выглядела правильная строка запроса?
код моего фильтра:
def filter(self, paragraph):
values = {
paragraph: "true",
"tokenize.whitespace": "true",
"annotators": "tokenize,ssplit,pos",
"outputFormat": "json"
}
data = urllib.urlencode(values)
req = urllib2.Request(self.url, data)
response = urllib2.urlopen(req)
result = response.read()
result = json.loads(result)
filtered_tokens = list()
for sentence in result["sentences"]:
for token in sentence["tokens"]:
pos = token["pos"]
if pos in self.whitelist:
filtered_tokens.append({
"originalText": token["originalText"],
"lemma": token["lemma"]
})
if self.debug is True:
print "Filtered Tokens: "
print filtered_tokens
return filtered_tokens
Здесь есть документация, которая показывает правильный формат: http://stanfordnlp.github.io/CoreNLP/corenlp-server.html. Также существует полезная оболочка Python: https://github.com/smilli/py-corenlp – StanfordNLPHelp
Эта оболочка Python полезна: github.com/smilli/py-corenlp, и вы можете посмотреть ее исходный код, чтобы увидеть как он делает запросы. Например, этот файл имеет код, который делает запрос: https://github.com/smilli/py-corenlp/blob/master/pycorenlp/corenlp.py – StanfordNLPHelp
В этом вопросе есть пример того, кто использует оболочку Python: http://stackoverflow.com/questions/37375137/stanford-corenlp-openie-annotator – StanfordNLPHelp