mirror of
https://github.com/gsi-upm/senpy
synced 2024-11-14 04:32:29 +00:00
Add new taiger plugin
This commit is contained in:
parent
675a905ab4
commit
d5f9ef88b2
@ -1,6 +1,9 @@
|
||||
# Senpy Plugin Taiger
|
||||
|
||||
Service that analyzes sentiments from social posts written in Spanish or English.
|
||||
Proxy for two of Taiger's sentiment analysis services for social media posts:
|
||||
|
||||
* taiger-plugin: proxy for a service that normalizes the text, and gives both a polarity and a polarity value for the text. It works for Spanish and English text.
|
||||
* taiger3c-plugin: it uses a simpler service that only returns a polarity (positive, negative or none). It only works for Spanish.
|
||||
|
||||
|
||||
## Usage
|
||||
@ -8,18 +11,19 @@ Service that analyzes sentiments from social posts written in Spanish or English
|
||||
To use this plugin, you should use a GET Requests with the following possible params:
|
||||
Params:
|
||||
- Input: text to analyse.(required)
|
||||
- Endpoint: Enpoint to the Taiger service.
|
||||
|
||||
## Example of Usage
|
||||
|
||||
Example request:
|
||||
```
|
||||
http://senpy.cluster.gsi.dit.upm.es/api/?algo=sentiment-taiger&inputText=This%20is%20amazing
|
||||
curl http://senpy.cluster.gsi.dit.upm.es/api/?algo=sentiment-taiger&inputText=This%20is%20amazing
|
||||
|
||||
#Or, for the taiger3c plugin:
|
||||
curl http://senpy.cluster.gsi.dit.upm.es/api/?algo=sentiment-taiger3c&inputText=Me%20encanta
|
||||
```
|
||||
|
||||
Example respond: This plugin follows the standard for the senpy plugin response. For more information, please visit [senpy documentation](http://senpy.readthedocs.io). Specifically, NIF API section.
|
||||
|
||||
For example, this would be the example respond for the request done.
|
||||
This plugin follows the senpy schema and vocabularies, please visit [senpy documentation](http://senpy.readthedocs.io). Specifically, the NIF API section.
|
||||
It should look like this:
|
||||
|
||||
```
|
||||
{
|
||||
@ -53,7 +57,8 @@ For example, this would be the example respond for the request done.
|
||||
}
|
||||
```
|
||||
|
||||
As it can be seen, this plugin analyzes sentiment givin three categories or tags: `marl:Positive`, `marl:Neutral` or `marl:Negative`, that will be held in the `marl:hasPolarity` field. Moreover, the plugin retrieves a `marl:polarityValue`.
|
||||
As can be seen, this plugin analyzes sentiment giving three categories or tags: `marl:Positive`, `marl:Neutral` or `marl:Negative`, that will be held in the `marl:hasPolarity` field.
|
||||
Moreover, the plugin retrieves a `marl:polarityValue` (a value between -1 and 1).
|
||||
This plugin supports **python2.7** and **python3**.
|
||||
|
||||
![alt GSI Logo][logoGSI]
|
||||
|
@ -8,4 +8,4 @@ services:
|
||||
volumes:
|
||||
- ".:/senpy-plugins"
|
||||
environment:
|
||||
TAIGER_ENDPOINT: 'http://34.244.91.7:8080/sentiment/classifyPositivity'
|
||||
TAIGER_ENDPOINT: "${TAIGER_ENDPOINT:-http://somedi-taiger.hopto.org:5406/es_sentiment_analyzer_3classes}"
|
||||
|
164
sentiment-taiger/taiger3c_plugin.py
Normal file
164
sentiment-taiger/taiger3c_plugin.py
Normal file
@ -0,0 +1,164 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import time
|
||||
import requests
|
||||
import json
|
||||
import string
|
||||
import os
|
||||
from os import path
|
||||
import time
|
||||
from senpy.plugins import SentimentPlugin
|
||||
from senpy.models import Results, Entry, Entity, Topic, Sentiment, Error
|
||||
|
||||
|
||||
TAIGER_ENDPOINT = os.environ.get("TAIGER3C_ENDPOINT", 'http://somedi-taiger.hopto.org:5406/es_sentiment_analyzer_3classes')
|
||||
|
||||
|
||||
class TaigerPlugin3cats(SentimentPlugin):
|
||||
'''
|
||||
Service that analyzes sentiments from social posts written in Spanish or English.
|
||||
|
||||
Example request:
|
||||
|
||||
http://senpy.cluster.gsi.dit.upm.es/api/?algo=sentiment-taiger3c&inputText=This%20is%20amazing
|
||||
'''
|
||||
name = 'sentiment-taiger3c'
|
||||
author = 'GSI UPM'
|
||||
version = "0.1"
|
||||
maxPolarityValue = -1
|
||||
minPolarityValue = 1
|
||||
|
||||
def _polarity(self, value):
|
||||
|
||||
if 'NONE' == value:
|
||||
polarity = 'marl:Neutral'
|
||||
value = 0
|
||||
elif 'N' == value:
|
||||
polarity = 'marl:Negative'
|
||||
value = -1
|
||||
elif 'P' == value:
|
||||
polarity = 'marl:Positive'
|
||||
value = 1
|
||||
else:
|
||||
raise ValueError('unknown polarity: {}'.format(value))
|
||||
print(value, 'whatsup')
|
||||
return polarity, value
|
||||
|
||||
def analyse_entry(self, entry, params):
|
||||
|
||||
txt = entry['nif:isString']
|
||||
api = TAIGER_ENDPOINT
|
||||
parameters = {
|
||||
'text': txt
|
||||
}
|
||||
try:
|
||||
r = requests.get(
|
||||
api, params=parameters, timeout=3)
|
||||
agg_polarity, value = self._polarity(r.text.strip())
|
||||
except requests.exceptions.Timeout:
|
||||
raise Error("No response from the API")
|
||||
except Exception as ex:
|
||||
raise Error("There was a problem with the endpoint: {}".format(ex))
|
||||
if not agg_polarity:
|
||||
raise Error('No category in response: {}'.format(ar.text))
|
||||
self.log.debug(agg_polarity)
|
||||
agg_opinion = Sentiment(
|
||||
id="Opinion0",
|
||||
marl__hasPolarity=agg_polarity,
|
||||
marl__polarityValue=value,
|
||||
)
|
||||
agg_opinion.prov(self)
|
||||
entry.sentiments.append(agg_opinion)
|
||||
|
||||
yield entry
|
||||
|
||||
test_cases = [
|
||||
{
|
||||
'params': {
|
||||
'algo': 'sentiment-taiger',
|
||||
'intype': 'direct',
|
||||
'expanded-jsonld': 0,
|
||||
'informat': 'text',
|
||||
'prefix': '',
|
||||
'plugin_type': 'analysisPlugin',
|
||||
'urischeme': 'RFC5147String',
|
||||
'outformat': 'json-ld',
|
||||
'conversion': 'full',
|
||||
'language': 'en',
|
||||
'apikey': '00000',
|
||||
'algorithm': 'sentiment-taiger'
|
||||
},
|
||||
'input': 'I hate to say this',
|
||||
'expected': {
|
||||
'sentiments': [
|
||||
{'marl:hasPolarity': 'marl:Negative'}],
|
||||
},
|
||||
'responses': [
|
||||
{
|
||||
'url': TAIGER_ENDPOINT,
|
||||
'body': 'N',
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'params': {
|
||||
'algo': 'sentiment-taiger',
|
||||
'intype': 'direct',
|
||||
'expanded-jsonld': 0,
|
||||
'informat': 'text',
|
||||
'prefix': '',
|
||||
'plugin_type': 'analysisPlugin',
|
||||
'urischeme': 'RFC5147String',
|
||||
'outformat': 'json-ld',
|
||||
'conversion': 'full',
|
||||
'language': 'en',
|
||||
'apikey': '00000',
|
||||
'algorithm': 'sentiment-taiger'
|
||||
},
|
||||
'input': 'This is amazing',
|
||||
'expected': {
|
||||
'sentiments': [
|
||||
{'marl:hasPolarity': 'marl:Positive'}],
|
||||
},
|
||||
'responses': [
|
||||
{
|
||||
'url': TAIGER_ENDPOINT,
|
||||
'body': 'P',
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'params': {
|
||||
'algo': 'sentiment-taiger',
|
||||
'intype': 'direct',
|
||||
'expanded-jsonld': 0,
|
||||
'informat': 'text',
|
||||
'prefix': '',
|
||||
'plugin_type': 'analysisPlugin',
|
||||
'urischeme': 'RFC5147String',
|
||||
'outformat': 'json-ld',
|
||||
'conversion': 'full',
|
||||
'language': 'en',
|
||||
'apikey': '00000',
|
||||
'algorithm': 'sentiment-taiger'
|
||||
},
|
||||
'input': 'The pillow is in the wardrobe',
|
||||
'expected': {
|
||||
'sentiments': [
|
||||
{'marl:hasPolarity': 'marl:Neutral'}],
|
||||
},
|
||||
'responses': [
|
||||
{
|
||||
'url': TAIGER_ENDPOINT,
|
||||
'body': 'NONE',
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from senpy import easy_test
|
||||
easy_test(debug=False)
|
@ -25,8 +25,8 @@ class TaigerPlugin(SentimentPlugin):
|
||||
name = 'sentiment-taiger'
|
||||
author = 'GSI UPM'
|
||||
version = "0.1"
|
||||
maxPolarityValue = 0
|
||||
minPolarityValue = -10
|
||||
maxPolarityValue = -1
|
||||
minPolarityValue = 1
|
||||
|
||||
def _polarity(self, value):
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user