12 from ros_google_cloud_language.msg
import AnalyzeTextAction
13 from ros_google_cloud_language.msg
import AnalyzeTextResult
14 from ros_google_cloud_language.msg
import AnalyzeTextFeedback
15 from ros_google_cloud_language.msg
import TextEntity
16 from ros_google_cloud_language.msg
import TextSyntax
17 from diagnostic_msgs.msg
import KeyValue
20 from google.cloud
import language_v1
as language
24 credentials_path = rospy.get_param(
"~google_cloud_credentials_json",
None)
26 if not os.path.exists(credentials_path):
27 raise Exception(
"file {} is not found, please specify existing google cloud credentials json file path".format(credentials_path))
28 os.environ[
'GOOGLE_APPLICATION_CREDENTIALS'] = credentials_path
30 self.
_client = language.LanguageServiceClient()
32 self.
_as = actionlib.SimpleActionServer(
33 '~text', AnalyzeTextAction,
38 feedback = AnalyzeTextFeedback()
39 result = AnalyzeTextResult()
43 document = language.types.Document(
48 response = self.
_client.analyze_entities(
50 encoding_type=
'UTF32',
52 for entity
in response.entities:
53 result.entities.append(TextEntity(
54 name=entity.name.encode(
'utf-8'),
56 metadata=map(
lambda kv: KeyValue(kv[0], kv[1]),
57 entity.metadata.items()),
58 salience=entity.salience))
61 sentiment = self.
_client.analyze_sentiment(
66 result.sentiment_score = sentiment.score
67 result.sentiment_magnitude = sentiment.magnitude
70 syntax = self.
_client.analyze_syntax(
75 for token
in syntax.tokens:
77 result.syntaxes.append(TextSyntax(
78 name=token.text.content.encode(
'utf-8'),
79 lemma=token.lemma.encode(
'utf-8'),
80 dependency_edge=token.dependency_edge.head_token_index,
81 part_of_speech=token.part_of_speech.tag,
82 parse_label=token.dependency_edge.label
85 except Exception
as e:
86 rospy.logerr(
"Fail to analyze syntax ... {}".format(str(e)))
87 feedback.status = str(e)
90 self.
_as.publish_feedback(feedback)
91 self.
_as.set_succeeded(result)
93 if __name__ ==
'__main__':
94 rospy.init_node(
"ros_google_cloud_language")
def execute_cb(self, goal)