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);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public 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代码如下:
import time
import urllib.request
import urllib.parse
import json
import hashlib
import base64
url ="http://ltpapi.xfyun.cn/v1/ke"
x_appid = "自己的apiid"
api_key = "自己的apikey"
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')
result2 = json.loads(result)
toCntPercent = result2['data']['ke']
list=[]
for i in toCntPercent:
list.append(i['word'])
print(list)
return list
if __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;
@Override
protected 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);
}
@Override
public void onClick(View v) {
startVoice(this, new XunFeiCallbackListener() {
@Override
public 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代码返回的是list
int 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));
}
}
}
四、运行结果
当语音输入”水杯和钥匙在哪”时,返回的信息如下图所示:
当语音输入”你好”时,返回的信息如下图所示:
Original: https://blog.csdn.net/m0_47121562/article/details/123260401
Author: ,, ,
Title: Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815634/
转载文章受原作者版权保护。转载请注明原作者出处!