Skip to content

Commit 44d9faa

Browse files
committed
Adding Token.from_api_repr() in language.
Also fixing two small docstring typos.
1 parent edbffef commit 44d9faa

3 files changed

Lines changed: 55 additions & 3 deletions

File tree

gcloud/language/sentiment.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ class Sentiment(object):
2828
2929
See `Sentiment message`_ and `Sentiment basics`_.
3030
31-
3231
:type polarity: float
3332
:param polarity: Polarity of the sentiment in the ``[-1.0, 1.0]`` range.
3433
Larger numbers represent more positive sentiments.
@@ -45,7 +44,7 @@ def __init__(self, polarity, magnitude):
4544

4645
@classmethod
4746
def from_api_repr(cls, payload):
48-
"""Convert an Sentiment from the JSON API into a :class:`Sentiment`.
47+
"""Convert a Sentiment from the JSON API into a :class:`Sentiment`.
4948
5049
:param payload: dict
5150
:type payload: The value from the backend.

gcloud/language/test_token.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_constructor(self):
5050
part_of_speech = PartOfSpeech.DETERMINER
5151
edge_index = 3
5252
edge_label = 'PREDET'
53-
lemma = 'All'
53+
lemma = text_content
5454
token = self._makeOne(text_content, text_begin, part_of_speech,
5555
edge_index, edge_label, lemma)
5656
self.assertEqual(token.text_content, text_content)
@@ -59,3 +59,35 @@ def test_constructor(self):
5959
self.assertEqual(token.edge_index, edge_index)
6060
self.assertEqual(token.edge_label, edge_label)
6161
self.assertEqual(token.lemma, lemma)
62+
63+
def test_from_api_repr(self):
64+
from gcloud.language.token import PartOfSpeech
65+
66+
klass = self._getTargetClass()
67+
text_content = 'pretty'
68+
text_begin = -1
69+
part_of_speech = PartOfSpeech.ADJECTIVE
70+
edge_index = 3
71+
edge_label = 'AMOD'
72+
lemma = text_content
73+
payload = {
74+
'text': {
75+
'content': text_content,
76+
'beginOffset': text_begin,
77+
},
78+
'partOfSpeech': {
79+
'tag': part_of_speech,
80+
},
81+
'dependencyEdge': {
82+
'headTokenIndex': edge_index,
83+
'label': edge_label,
84+
},
85+
'lemma': lemma,
86+
}
87+
token = klass.from_api_repr(payload)
88+
self.assertEqual(token.text_content, text_content)
89+
self.assertEqual(token.text_begin, text_begin)
90+
self.assertEqual(token.part_of_speech, part_of_speech)
91+
self.assertEqual(token.edge_index, edge_index)
92+
self.assertEqual(token.edge_label, edge_label)
93+
self.assertEqual(token.lemma, lemma)

gcloud/language/token.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,24 @@ def __init__(self, text_content, text_begin, part_of_speech,
145145
self.edge_index = edge_index
146146
self.edge_label = edge_label
147147
self.lemma = lemma
148+
149+
@classmethod
150+
def from_api_repr(cls, payload):
151+
"""Convert a token from the JSON API into a :class:`Sentiment`.
152+
153+
:param payload: dict
154+
:type payload: The value from the backend.
155+
156+
:rtype: :class:`Token`
157+
:returns: The token parsed from the API representation.
158+
"""
159+
text_span = payload['text']
160+
text_content = text_span['content']
161+
text_begin = text_span['beginOffset']
162+
part_of_speech = payload['partOfSpeech']['tag']
163+
edge = payload['dependencyEdge']
164+
edge_index = edge['headTokenIndex']
165+
edge_label = edge['label']
166+
lemma = payload['lemma']
167+
return cls(text_content, text_begin, part_of_speech,
168+
edge_index, edge_label, lemma)

0 commit comments

Comments
 (0)