Android 带日期的语音识别

Android 带日期的语音识别,android,date,nlp,speech-recognition,google-glass,Android,Date,Nlp,Speech Recognition,Google Glass,我正在为谷歌眼镜实现一种日历。在这个日历中,我希望能够使用语音识别来选择一个日历槽。例如,说“八月的第一周”应该很好,android应该能够识别日期。 我肯定我已经在Android上看到了,但我再也找不到了。 你能帮我吗? 多谢各位 正如Blacksad所评论的,Wit.AI API是一个非常好的解决方案。它执行一些很好的自然语言处理。 我建议您不要使用.jar,而是直接使用其中的代码。 下面是一个结合Wit.API的Glass语音识别示例 主要活动: @Override protected

我正在为谷歌眼镜实现一种日历。在这个日历中,我希望能够使用语音识别来选择一个日历槽。例如,说“八月的第一周”应该很好,android应该能够识别日期。 我肯定我已经在Android上看到了,但我再也找不到了。 你能帮我吗?
多谢各位

正如Blacksad所评论的,Wit.AI API是一个非常好的解决方案。它执行一些很好的自然语言处理。 我建议您不要使用.jar,而是直接使用其中的代码。 下面是一个结合Wit.API的Glass语音识别示例

主要活动:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    displaySpeechRecognizer();
}

private static final int SPEECH_REQUEST = 0;

private void displaySpeechRecognizer() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    startActivityForResult(intent, SPEECH_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SPEECH_REQUEST && resultCode == RESULT_OK) {
        List<String> results = data
                .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        String spokenText = results.get(0);
        Card c=new Card(getApplicationContext());
        c.setText("requesting wit api...");
        setContentView(c.getView());
        process(spokenText);

    }
    super.onActivityResult(requestCode, resultCode, data);
}

public void process(String text) {
    ConnexionTask c = new ConnexionTask() {
        protected void onPostExecute(String result) {
            try {
                WitResponse response = null;
                Gson gson = new Gson();
                response = (WitResponse) gson.fromJson(result,
                        WitResponse.class);
                //process the response here
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    };
    c.execute(new String[] { text });
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
DisplaySpeechRecognitor();
}
专用静态最终int语音_请求=0;
私有void displaySpeechRecognizer(){
意向意向=新意向(识别意向、行动、识别言语);
startActivityForResult(意图、言语和请求);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==SPEECH\u REQUEST&&resultCode==RESULT\u OK){
列出结果=数据
.getStringArrayListExtra(识别器意图.额外结果);
字符串spokenText=results.get(0);
卡c=新卡(getApplicationContext());
c、 setText(“请求wit api…”);
setContentView(c.getView());
过程(spokenText);
}
super.onActivityResult(请求代码、结果代码、数据);
}
公共作废处理(字符串文本){
ConnexionTask c=新的ConnexionTask(){
受保护的void onPostExecute(字符串结果){
试一试{
WitResponse=null;
Gson Gson=新的Gson();
response=(WitResponse)gson.fromJson(result,
(三),;
//在这里处理响应
}捕获(例外e){
系统输出打印ln(e);
}
}
};
c、 执行(新字符串[]{text});
}
这里是AsyncTask ConnexionTask的id:

public class connexion extends AsyncTask<String, String, String> {

    private String _accessToken = "YOUR TOKEN HERE";

    protected String doInBackground(String... text) {
        // TODO Auto-generated method stub
        String response = null;
        try {
            System.out.println("Requesting ...." + text[0]);
            String getUrl = String.format(
                    "%s%s",
                    new Object[] { "https://api.wit.ai/message?q=",
                            URLEncoder.encode(text[0], "utf-8") });
            System.out.println(getUrl);
            URL url = new URL(getUrl);
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();
            urlConnection.addRequestProperty("Authorization", String.format(
                    "Bearer %s", new Object[] { this._accessToken }));
            try {
                InputStream in = new BufferedInputStream(
                        urlConnection.getInputStream());
                response = IOUtils.toString(in);
                in.close();
            } finally {
                urlConnection.disconnect();
            }
        } catch (Exception e) {
            System.out.println(e);
            System.out
                    .println("An error occurred during the request, did you set your token correctly?");
        }
        return response;
    }

    protected void onPostExecute(String result) {
    }

}
公共类连接扩展了异步任务{
私有字符串\u accessToken=“您的令牌在此”;
受保护的字符串doInBackground(字符串…文本){
//TODO自动生成的方法存根
字符串响应=null;
试一试{
System.out.println(“请求…”+文本[0]);
String getUrl=String.format(
“%s%s”,
新对象[]{”https://api.wit.ai/message?q=",
encode(文本[0],“utf-8”)});
System.out.println(getUrl);
URL=新URL(getUrl);
HttpURLConnection urlConnection=(HttpURLConnection)url
.openConnection();
urlConnection.addRequestProperty(“授权”,String.format(
“承载%s”,新对象[]{this.\u accessToken});
试一试{
InputStream in=新的BufferedInputStream(
urlConnection.getInputStream());
响应=IOUtils.toString(in);
in.close();
}最后{
urlConnection.disconnect();
}
}捕获(例外e){
系统输出打印ln(e);
系统输出
.println(“请求过程中发生错误,您是否正确设置了令牌?”);
}
返回响应;
}
受保护的void onPostExecute(字符串结果){
}
}

我希望它能帮助你

Wit.AI API可以做到这一点(检查
Wit/datetime
实体)谢谢!这很有趣,我想我能用它解决我的问题!