Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容

  • 一、介绍
  • 二、Android studio连接、操作和查看sqlite数据库
  • 三、在数据库中查找相关内容
  • 四、运行结果

一、介绍

Android studio中调用科大讯飞的语音转文字功能,并对识别出的关键词进行了提取,可以查看我前面的两篇博客:
Android studio调用科大讯飞的语音转文字功能
Android studio调用科大讯飞的关键词提取功能
在此基础上,向数据库中查找并显示相关内容。

二、Android studio连接、操作和查看sqlite数据库

新建一个Java类:MySqlhelp,代码如下:

package com.example.myapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;public class MySqlhelp extends SQLiteOpenHelper {public MySqlhelp(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

在MainActivity.java中添加如下代码:

//相当于建立连接MySqlhelp mySqlhelp = new MySqlhelp(this,"database.db",null,1);//打开 相当于数据库创建完成readableDatabase = mySqlhelp.getReadableDatabase();//创建things表String sql = "create table  if not exists things(name varchar(50) primary key ,content varchar(500))";readableDatabase.execSQL(sql);//插入几条数据sql = "insert into things values('水杯','水杯在客厅的桌子上')";readableDatabase.execSQL(sql);sql = "insert into things values('钥匙','钥匙在客厅的桌子上')";readableDatabase.execSQL(sql);sql = "insert into things values('鼠标','鼠标在卧室的桌子上')";readableDatabase.execSQL(sql);


数据库的详细操作可以参考这篇博客:Android studio的数据库的创建以及增删改查
按照如下步骤可以查看生成的db文件的具体信息:


将生成的db文件保存到本地,然后用sqlite数据库可视化工具打开,我用的是SQLite Expert Professional 5 - 64bit,从下图可以看出数据库database中新建了一个things表,并成功插入了3条数据:

三、在数据库中查找相关内容

由于调用科大讯飞的关键词提取API接口返回的是如下的json字符串,因此需要提取出里面的关键词。

{“code”:“0”,“data”:{“ke”:[{“score”:“0.909”,“word”:“汉皇”},{“score”:“0.889”,“word”:“重色”},{“score”:“0.882”,“word”:“思倾国”}]},“desc”:“success”,“sid”:“ltp000dd932@dx1c39157bf0b0000100”}

修改python代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import urllib.request
import urllib.parse
import json
import hashlib
import base64
#接口地址
url ="http://ltpapi.xfyun.cn/v1/ke"
#开放平台应用ID
x_appid = "自己的apiid"
#开放平台应用接口秘钥
api_key = "自己的apikey"
#语言文本
#TEXT="汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。"def main(TEXT):body = urllib.parse.urlencode({'text': TEXT}).encode('utf-8')param = {"type": "dependent"}x_param = base64.b64encode(json.dumps(param).replace(' ', '').encode('utf-8'))x_time = str(int(time.time()))x_checksum = hashlib.md5(api_key.encode('utf-8') + str(x_time).encode('utf-8') + x_param).hexdigest()x_header = {'X-Appid': x_appid,'X-CurTime': x_time,'X-Param': x_param,'X-CheckSum': x_checksum}req = urllib.request.Request(url, body, x_header)result = urllib.request.urlopen(req)result = result.read().decode('utf-8')#将响应内容转换为json对象result2 = json.loads(result)#从json对象内取出需要的内容toCntPercent = result2['data']['ke']list=[]for i in toCntPercent:list.append(i['word'])print(list)return listif __name__ == '__main__':TEXT="汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。"main(TEXT)

将关键词都放入了list中,并作为返回值返回,修改MainActivity.java中的代码如下:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;import com.chaquo.python.PyObject;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;
import com.iflytek.cloud.RecognizerResult;
import static com.example.myapplication.XunFeiUtil.parseIatResult;
import static com.example.myapplication.XunFeiUtil.*;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private Button btn_click;private EditText mResultText;private SQLiteDatabase readableDatabase;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//相当于建立连接MySqlhelp mySqlhelp = new MySqlhelp(this,"database.db",null,1);//打开 相当于数据库创建完成readableDatabase = mySqlhelp.getReadableDatabase();//创建things表String sql = "create table  if not exists things(name varchar(50) primary key ,content varchar(500))";readableDatabase.execSQL(sql);//插入几条数据
//        sql = "insert into things values('水杯','水杯在客厅的桌子上')";
//        readableDatabase.execSQL(sql);
//        sql = "insert into things values('钥匙','钥匙在客厅的桌子上')";
//        readableDatabase.execSQL(sql);
//        sql = "insert into things values('鼠标','鼠标在卧室的桌子上')";
//        readableDatabase.execSQL(sql);//调用语音识别函数initXunFei(this);btn_click = (Button) findViewById(R.id.btn_click);mResultText = ((EditText) findViewById(R.id.result));//点击按钮进行识别btn_click.setOnClickListener(this);}@Overridepublic void onClick(View v) {startVoice(this, new XunFeiCallbackListener() {@Overridepublic void onFinish(RecognizerResult results) {String text = parseIatResult(results.getResultString());// 获取语音转换成的文字mResultText.append(text);//调用python代码initPython();// 初始化Python环境Python py = Python.getInstance();PyObject pyObject=py.getModule("tiquguanjianci").callAttr("main",text);List returnList =pyObject.asList();//python代码返回的是listint size = returnList.size();String resultcontent="";//记录数据库查找结果for (int i = 0; i < size; i++) {String name= returnList.get(i).toString();//遍历每一个关键词Log.d("res",name);//查询数据库String[] selectionArgs = new  String[]{ name };Cursor cursor = readableDatabase.query("things", null, "name=?", selectionArgs, null, null, null);if (cursor!=null){while (cursor.moveToNext()){String content= cursor.getString(cursor.getColumnIndex("content"));//得到查询结果resultcontent+=content;}cursor.close();}}if(resultcontent==""){Log.d("res1","没有找到");}else{Log.d("res1",resultcontent);}}});}// 初始化Python环境public void initPython(){if (! Python.isStarted()) {Python.start(new AndroidPlatform(this));}}
}

四、运行结果

当语音输入“水杯和钥匙在哪”时,返回的信息如下图所示:

当语音输入“你好”时,返回的信息如下图所示:

Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容相关推荐

  1. Android 第十五课 如何使用LitePal从SQLite数据库中删除数据(十四课用来保留讲解如何向SQLite数据库中存入数据)

    使用LitePal删除数据的方式主要有两种,第一种就是直接调用已存对象的delete()方法,所谓已存储对象就是调用过save()方法的对象,或者说是通过LitePal提供的查询API查出来的对象,都 ...

  2. Android Studio 使用jdbc远程连接阿里云主机web数据库(逃坑)

    Android Studio 使用jdbc远程连接阿里云主机web数据库(逃坑) Tip1:主线程不能访问网络需要再写一个线程,访问web数据库. Test 1 : 接下来开始配置一些东西: < ...

  3. android sqlite删除表中所有数据,对于Sqlite,删除Sqlite数据库中的所有表,删除sqlite数据库...

    对于Sqlite,删除Sqlite数据库中的所有表,删除sqlite数据库 SQLite数据库中一个特殊的名叫SQLITE_MASTER上执行一个SELECT查询以获得所有表的索引.每一个SQLite ...

  4. android sqlite更改数据,更新现有的sqlite数据库中的列,但没有任何更改android

    对不起,但我没有在网上找到任何东西.我在我的目录"资产"中使用现有的数据库.当我想更新一列时,函数返回该列已经改变,但实际上并没有发生.我试着用execSQL,但没有再次.更新现有 ...

  5. Android读出Excel报表数据然后导出写入到SQLite数据库

    Android读出Excel报表数据然后导出写入到SQLite数据库 假设现在有一个excel.xls位于Android手机外部存储器的根目录下,数据报表为: 需要把excel.xls的数据导出,写入 ...

  6. android studio菜单自动弹出,Android实现微博菜单弹出效果

    先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下. 说一下实现思路: 1.截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片: 2 ...

  7. android开发课程表app数据库,基于Android studio 的课程表增删查改功能(基于sqlite)

    [实例简介]Android studio 用SQLite实现课程表的增删查改功能,:实现详情浏览.编辑.及新增功能.课程编号可以实现正则检查(编号规则XX00000,XX表示两位大写的字母,00000 ...

  8. 【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )

    文章目录 一.从 Android 应用数据目录中拷贝 SQlite3 数据库文件 二.使用 DB Browser 工具打开 SQlite3 数据库文件 一.从 Android 应用数据目录中拷贝 SQ ...

  9. android 数据库表格数据库数据库中,Android SQLite数据库中的表详解

    Android SQLite数据库 前言 以前写PHP的时候,内置了print_r()和var_dump()两个函数用于打印输出任意类型的数据内部结构,现在做Android的开发,发现并没有这种类似的 ...

最新文章

  1. 2022-2028年中国柴油行业市场研究及前瞻分析报告
  2. 研究揭示大脑在工作记忆中存储信息的神经机制
  3. Html做弹出式菜单,JavaScript制作的可折叠弹出式菜单示例
  4. SDCC 2015架构专场札记:一线互联网公司的架构实践
  5. 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
  6. 做机器人,必过的一道坎!
  7. mysql数据库表名批量改为小写,MySQL 批量修改表名
  8. 三角函数公式【转载】
  9. 使用JSSDK分享页面
  10. 【生活相关】实验室专题研讨PPT模板说明备忘
  11. [Acm] 开始你的ACM-ICPC之旅(转)
  12. 工作中vue项目common方法
  13. ArcGIS根据矢量图层范围裁剪影像
  14. Kettle Carte集群关闭问题
  15. (转)前端开发面试题搜集大全–刷完能进bat
  16. 第2次作业:微信案例分析
  17. 机器学习概述和特征工程
  18. python画残差图_seaborn回归图---回归模型图Implot、线性回归图regplot、线性回归残差图residplot...
  19. 【Spring Cloud 2】软件架构设计,Java游戏合集百度云盘
  20. java io 阻塞io_Java 阻塞IO-Java BIO-嗨客网

热门文章

  1. 酒店订房系统怎么做_酒店民宿预订系统有哪些功能
  2. html5,jQuery 实现贴吧,论坛分页样式,可无缝组合Ajax
  3. Cesium 实现一个 飞机漫游 飞行效果
  4. fortran open使用
  5. php70w mysql.x8664_悠久防伪防窜货追溯系统php+mysql版.zip
  6. How to Install JAVA 8 (JDK 8u91) on Ubuntu LinuxMint via PPA
  7. 快速搜索插件之quicksearch
  8. HDU 6158 笛卡尔定理 + 韦达定理
  9. hapi入门简介----净土小沙弥学hapi.js_第一篇
  10. Linux用户与组管理、权限管理、管理命令