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);
    }

    @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根据文本提取出的关键词在sqlite数据库中查找相关内容
数据库的详细操作可以参考这篇博客:Android studio的数据库的创建以及增删改查
按照如下步骤可以查看生成的db文件的具体信息:
Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容
Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容
将生成的db文件保存到本地,然后用sqlite数据库可视化工具打开,我用的是SQLite Expert Professional 5 – 64bit,从下图可以看出数据库database中新建了一个things表,并成功插入了3条数据:
Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容

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

由于调用科大讯飞的关键词提取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));
        }
    }
}

四、运行结果

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

Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容
当语音输入”你好”时,返回的信息如下图所示:
Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容

Original: https://blog.csdn.net/m0_47121562/article/details/123260401
Author: ,, ,
Title: Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815634/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球