As you can see, the structure and annotation schema of the response is the same.
This makes it very easy to compare and migrate to different services.
Service interoperability is not only useful for users.
It is also key for other features such as [automated evaluation](http://senpy.readthedocs.io/Evaluation.html).
This is a compelling reason to adapt existing services to use the Senpy API.
In fact, the `sentiment140` senpy service is proxy to the public [Sentiment 140 service](http://www.sentiment140.com/).
%% Cell type:markdown id: tags:
## Emotion analysis
%% Cell type:markdown id: tags:
Senpy uses the `onyx` vocabulary to represent emotions, which incorporates the notion of `EmotionSet`'s, an emotion that is composed of several emotions.
In a nutshell, an `Entry` is linked to one or more `EmotionSet`, which in turn is made up of one or more `Emotion`.
Let's illustrate it with an example, using the `emotion-depechemood` plugin.
Sometimes the model used by a plugin is not right for your application. Senpy ships with emotion conversion capabilities: you can ask for a specific emotion model in your request and the service will try to automatically convert the results.
For example, the `emotion-anew` plugin uses the dimensional `pad` (or VAD, valence-arousal-dominance) model, as we can see here:
%% Cell type:code id: tags:
``` python
query(f'{endpoint}/emotion-anew',
input="Senpy is a wonderful service and I love it")