【问题标题】:Translator Bot using Google Translate API使用 Google 翻译 API 的翻译机器人
【发布时间】:2019-02-27 13:02:21
【问题描述】:

嘿 Stackoverflow 社区,

我是 Ruby 新手,正在为一个课程作业做一个小项目。我必须创建一个使用 Google Translate API 并返回翻译文本的移动机器人。

我一直在试图弄清楚如何为机器人编写代码以获取输入的文本并输出翻译。

有人可以看看吗?真的很感激

def transl8 (input,lang)     #method to translate incoming text
  # Translates some text into Russian
  # Instantiates a client
 translate = Google::Cloud::Translate.new project: project-217401

  puts input + "Looks like you're speak in #{detection.language}"
  puts "Confidence: #{detection.confidence}"

translation = translate.translate input, to: lang 

 return "In #{lang} that's" + translation
end

def transl8 (input,lang)     #method to translate incoming text
detection = $translate.detect input
puts input + "Looks like you're speak in #{detection.language}"
puts "Confidence: #{detection.confidence}"
translation = $translate.translate input, to: lang
return "In #{lang} that's" + translation
end


def listlang #method to show language code
language_code = "en"
languages = $translate.languages
puts "Supported languages:"
languages.each do |language|
 puts "#{language.code} #{language.name}"
 end
end

configure :development do
require 'dotenv'
Dotenv.load
end

#Translate End-point 
https://translation.googleapis.com/language/translate/v2 endpoint

get "/incoming/sms/" do

"Hey! I'm AllSpeak, a translator bot. The list of supported languages are 
below. Just ask by typing (TEXT) (space) (Language Code)"

 incoming_text = params['Body']
 text_to_translate = incoming_text.split(' ')[0]
 lang_requested = incoming_text.split(' ')[1]
 twiml_body = transl8(text_to_translate, lang_requested)
  #return twiml here with twiml_body
 end

#Look into Including method to set default language for commonly used 
 phrases

puts listlang

transl8 (text)

# Build a twilio response object 
twiml = Twilio::TwiML::MessagingResponse.new do |r|
 r.message do |m|
  end 
 end

【问题讨论】:

    标签: ruby google-api sinatra google-translation-api


    【解决方案1】:

    关于翻译API代码:

    对于listlang

    • 您在 do 循环中缺少 end 并且您没有设置 project_id 变量

    对于transl8

    • 您没有初始化 detection 变量

    示例代码:

    #!/usr/bin/ruby
    require "google/cloud/translate"
    $translate = Google::Cloud::Translate.new project: "slatebot-217401"
    
    def transl8 (input,lang)     #method to translate incoming text
        detection = $translate.detect input
        puts input + "Looks like you're speak in #{detection.language}"
        puts "Confidence: #{detection.confidence}"
        translation = $translate.translate input, to: lang
        return "In #{lang} that's" + translation
    end
    
    
    def listlang #method to show language code
        language_code = "en"
        languages = $translate.languages
        puts "Supported languages:"
        languages.each do |language|
                puts "#{language.code} #{language.name}"
        end
    end
    

    【讨论】:

    • 非常感谢!我对如何编写一个接收用户输入的端点感到困惑。注意:我们必须使用 Twilio - 它基本上是一个 SMS 机器人
    【解决方案2】:

    来自 Twilio 的 Jarod。我注意到您的问题,并想建议您解析将传入您的“传入/短信”的用户短信。一旦您配置了您的电话号码以向“传入/短信”发出 GET 请求,Twilio 将开始将传入的短信发送到该 URL。当 Twilio 执行此操作时,它还会在 http 请求中向您传递一堆信息。传入的 SMS 正文在请求中作为 Body 传递。所以你可以做这样的事情

    get '/incoming/sms' do
      incoming_text = params['Body']
      text_to_translate = incoming_text.split(' ')[0]
      lang_requested = incoming_text.split(' ')[1]
      twiml_body = transl8(text_to_translate, lang_requested)
      #return twiml here with twiml_body
    end
    

    这有意义吗?看起来您的 twiml 方法已基本准备就绪,因此只需在您的回复末尾插入它,您应该一切顺利!有趣的应用程序。很高兴看到它完成了!

    【讨论】:

    • 谢谢贾罗德。这是我感到困惑的部分 - Ruby 如何知道传入的短信与“Body”相同。它没有明确定义。还是 Body 是默认变量?
    猜你喜欢
    • 2014-07-14
    • 2018-11-02
    • 2014-12-06
    • 2011-06-06
    • 2021-08-11
    • 1970-01-01
    • 2016-11-18
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多