当前位置:   article > 正文

百度智能云——自然语言处理_aipnlp

aipnlp

39.1 目标

  • 通过百度智能云的API调度写一首指定主题的诗

39.2 网址

  • https://ai.baidu.com/sdk#asr下载SDK并查看接口相关说明

39.3 开发步骤(Ubuntu开发)

  1. 下载对应SDK

    ├── base
    │  ├── base.h                   // 请求客户端基类
    │  ├── base64.h                 // base64加密相关类
    │  ├── http.h                   // http请求封装类
    │  └── utils.h                  // 工具类
    └── nlp.h                       // 自然语言处理 交互类
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  2. 安装依赖库libcurl(需要支持https) openssl jsoncpp(>1.6.2版本)

  3. 编译工程时添加 C++11 支持 (gcc/clang 添加编译参数 -std=c++11), 添加第三方库链接参数 lcurl, lcrypto, ljsoncpp。

  4. 在源码中include"nlp.h" ,引入压缩包中的头文件以使用aip命名空间下的类和方法。

  5. 程序框架搭建

    nlp/
    ├── base
    │   ├── base64.h
    │   ├── base.h
    │   ├── http.h
    │   └── utils.h
    ├── body_analysis.h
    ├── content_censor.h
    ├── face.h
    ├── image_censor.h
    ├── image_classify.h
    ├── image_process.h
    ├── image_search.h
    ├── kg.h
    ├── machine_translation.h
    ├── nlp.h
    ├── ocr.h
    ├── README.md
    ├── speech.h
    ├── src
    │   └── main.cpp
    ├── video_censor.h
    └── voice_censor.h
    
    2 directories, 21 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 执行编译指令gcc main.cpp -o main -std=c++11

    • 提示././base/http.h:18:23: fatal error: curl/curl.h: 没有那个文件或目录

    • 找到安装的curl的位置,找到include目录位置

  6. 再次编译gcc main.cpp -o main -std=c++11 -I /usr/local/curl/include

    • 提示.././base/http.h:23:23: fatal error: json/json.h: 没有那个文件或目录
    • 查看是否安装josncpp, dpkg -l | grep jsoncpp-dev
      • 没有安装则执行安装sudo apt-get install libjsoncpp-dev
    • 查看安装位置dpkg -L libjsoncpp-dev
    • 添加安装包含的头文件路径
  7. 再次编译gcc main.cpp -o main -std=c++11 -I /usr/local/curl/include -I/usr/include/jsoncpp

    • 无头文件路径错误
  8. 加入例程

    #include <iostream>
    #include "../nlp.h"
    #include "../base/base.h"
    
    #include "/usr/include/jsoncpp/json/json.h"
    
    // 设置APPID/AK/SK
    std::string app_id = "你的 App ID";
    std::string api_key = "你的 Api key";
    std::string secret_key = "你的 Secret Key";
    
    aip::Nlp client(app_id, api_key, secret_key);
        
    int main(int argc, char const *argv[])
    {
        Json::Value result;
    
        std::string text = "百度是一家高科技公司";
    
        // 调用词法分析
        result = client.lexer(text, aip::null);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  9. 加入库文件,再次编译gcc main.cpp -o main -std=c++11 -I /usr/local/curl/include -I/usr/include/jsoncpp -lcurl -lcrypto -ljsoncpp

    • 提示/usr/bin/ld: 找不到 -lcurl
  10. 加入头文件路径,再次编译gcc main.cpp -o main -std=c++11 -I /usr/local/curl/include -I/usr/include/jsoncpp -L /usr/lib/x86_64-linux-gnu -lcurl -lcrypto -ljsoncpp -L /usr/local/curl/lib

    • 提示/usr/bin/ld: /tmp/cctz4Ibz.o: undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc@@GLIBCXX_3.4.21' //usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
  11. 用g++,再次编译g++ main.cpp -o main -std=c++11 -I /usr/local/curl/include -I/usr/include/jsoncpp -L /usr/lib/x86_64-linux-gnu -lcurl -lcrypto -ljsoncpp -L /usr/local/curl/lib

  12. 编译成功

  13. 加入设置的设备相关参数,并加入打印信息

    #include <iostream>
    #include "../nlp.h"
    #include "../base/base.h"
    
    #include "/usr/include/jsoncpp/json/json.h"
    
    // 设置APPID/AK/SK
    std::string app_id = "34215401";
    std::string api_key = "fjNddzHij8swD23qDtgRrmv5";
    std::string secret_key = "2R02CforwL4qtD4rGGlbegzaooTG9HS0";
    
    aip::Nlp client(app_id, api_key, secret_key);
        
    int main(int argc, char const *argv[])
    {
        Json::Value result;
        std::string jsonData;
        Json::FastWriter write;
    
        #if 1
        std::string text = "百度是一家高科技公司";
    
        // 调用词法分析
        //result = client.lexer(text, aip::null);
        //调用语言生成——写诗
        result = client.poem("离愁",aip::null);
        #else
    
        std::string text = "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三";
        result = client.address_v1(text, aip::null);
    
        #endif
    
        jsonData = write.write(result);
        printf("%s\r\n",jsonData.c_str());
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  •     {"log_id":1664820259893206066,"poem":[{"content":"一曲离愁对月弹\t千般别绪向谁言\t相思梦里随风去\t欲语还休泪已干","title":"离愁"}]}
    
    • 1

39.4 移植到开发板

  1. 交叉编译curl,参考99.3.2

  2. 交叉编译openssl,参考99.5.1

  3. 交叉编译jsoncpp,参考99.7.1

  4. 创建arm编译脚本

    arm-linux-gnueabihf-g++ main.cpp -o main \
            -std=c++11 \
            -I /home/lux/Downloads/Curl/Arm/curl-8.1.2/include/ \
            -I /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/include/ \
            -I /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/include/ \
            -L /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib/ \
            -L /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/_install_forArm/lib/ \
            -L /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/_install_forArm/lib/ \
            -lcurl -lcrypto -ljsoncpp \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 提示

      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_CTX_set_srp_password@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_CTX_use_certificate_chain_file@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘OPENSSL_init_ssl@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_set0_wbio@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_CTX_use_PrivateKey@OPENSSL_1_1_0’未定义的引用
      ...
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_CTX_set_ciphersuites@OPENSSL_1_1_1’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_CTX_set_cipher_list@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_get_peer_certificate@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_CTX_set_verify@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_shutdown@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_get_privatekey@OPENSSL_1_1_0’未定义的引用
      /home/lux/Downloads/Curl/Arm/curl-8.1.2/_install_Forarm/lib//libcurl.so:对‘SSL_get0_alpn_selected@OPENSSL_1_1_0’未定义的引用
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    • 说是ssl和curl的版本不匹配

    • 降低curl为7.38.0版本

    • 重新交叉编译一个curl版本

  5. 修改arm的编译脚本

    arm-linux-gnueabihf-g++ main.cpp -o main \
            -std=c++11 \
            -I /home/lux/Downloads/Curl/Arm/curl-7.38.0/include/ \
            -I /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/include/ \
            -I /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/include/ \
            -L /home/lux/Downloads/Curl/Arm/curl-7.38.0/_install_Forarm/lib/ \
            -L /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/_install_forArm/lib/ \
            -L /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/_install_forArm/lib/ \
            -lcurl -lcrypto -ljsoncpp \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  6. 编译成功

  7. 将main放到根文件系统中,在开发板上执行./main

    • 提示./main: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
    • 把交叉编译的curl的文件放到根文件系统的中
    ├── bin
    │   ├── curl
    │   └── curl-config
    ├── include
    │   └── curl
    │       ├── curlbuild.h
    │       ├── curl.h
    │       ├── curlrules.h
    │       ├── curlver.h
    │       ├── easy.h
    │       ├── mprintf.h
    │       ├── multi.h
    │       ├── stdcheaders.h
    │       └── typecheck-gcc.h
    ├── lib
    │   ├── libcurl.a
    │   ├── libcurl.la
    │   ├── libcurl.so -> libcurl.so.4.3.0
    │   ├── libcurl.so.4 -> libcurl.so.4.3.0
    │   ├── libcurl.so.4.3.0
    │   └── pkgconfig
    │       └── libcurl.pc
    └── share
        ├── aclocal
        │   └── libcurl.m4
        └── man
            ├── man1
            └── man3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    sudo cp bin/* ~/Linux/nfs/buildrootfs2019/usr/bin/ -rfa
    sudo cp include/* ~/Linux/nfs/buildrootfs2019/usr/include/ -rfa
    sudo cp lib/* ~/Linux/nfs/buildrootfs2019/usr/lib/ -rfa
    sudo cp share/* ~/Linux/nfs/buildrootfs2019/usr/share/ -rfa
    
    • 1
    • 2
    • 3
    • 4
  8. 在开发板上再次执行./main

    • 提示./main: error while loading shared libraries: libjsoncpp.so.25: cannot open shared object file: No such file or directory
    • 把交叉编译的jsoncpp的文件放到根文件系统的中
    sudo cp lib/* ~/Linux/nfs/buildrootfs2019/usr/lib/ -rfa
    
    • 1
  9. 在开发板上再次执行./main

    • 提示{"curl_error_code":1}
    • 看来是能成功运行了
  10. 提示的错误信息意思是指curl不支持协议,从百度智能云的访问情况来看应该是https协议,通过在开发板上执行curl -V查看,确实不支持

  11. curl-7.38.0移植配置的时候就能看到不支持https协议,没想到在这里出问题了,搞了一天半,各种版本配合测试,都不行,curl-8.1.2支持https协议,但是程序检查编译的时候不行,于是就想了一个不是办法的办法。编译的时候,用指定的7.38.0的路径,但是,开发板的文件系统的库用curl-8.1.2的文件。这样就可以交叉编译了,同时开发板也支持https协议了。我试过是可以的。一个人独自研究是太慢了,搜了好多文章还是没解决,看来Linux学习是应该找同伴一起。

  12. 执行交叉编译

    arm-linux-gnueabihf-g++ main.cpp -o main \
            -std=c++11 \
            -I /home/lux/Downloads/Curl/Arm/curl-7.38.0/include/ \
            -I /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/include/ \
            -I /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/include/ \
            -L /home/lux/Downloads/Curl/Arm/curl-7.38.0/_install_Forarm/lib \
            -L /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/_install_forArm/lib/ \
            -L /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/_install_forArm/lib/ \
            -lcurl -lcrypto -ljsoncpp \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  13. 在开发板上运行

    {"log_id":1665275110318083458,"poem":[{"content":"一曲离愁对月弹\t千般别绪向谁言\t相思梦里随风去\t欲语还休泪已干","title":"离愁"}]}
    
    • 1

    成功

39.5 移植Qt上(Ubuntu上)

  1. 创建工程文档

  2. 工程添加SDK文档

    NLP
    ├── base
    │   ├── base64.h
    │   ├── base.h
    │   ├── http.h
    │   └── utils.h
    ├── body_analysis.h
    ├── content_censor.h
    ├── face.h
    ├── image_censor.h
    ├── image_classify.h
    ├── image_process.h
    ├── image_search.h
    ├── kg.h
    ├── machine_translation.h
    ├── main.cpp
    ├── mainwindow.cpp
    ├── mainwindow.h
    ├── mainwindow.ui
    ├── nlp.h
    ├── NLP.pro
    ├── NLP.pro.user
    ├── ocr.h
    ├── speech.h
    ├── video_censor.h
    └── voice_censor.h
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  3. Qt界面工程中添加现有文件nlp.h以及base文件夹下的所有文件

  4. Ui界面搞一个按钮触发

  5. mianwindow.cpp写程序

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include <qdebug.h>
    
    #include "nlp.h"
    #include "base/base.h"
    #include "/usr/include/jsoncpp/json/json.h"
    
    // 设置APPID/AK/SK
    std::string app_id = "34215401";
    std::string api_key = "fjNddzHij8swD23qDtgRrmv5";
    std::string secret_key = "2R02CforwL4qtD4rGGlbegzaooTG9HS0";
    
    aip::Nlp client(app_id, api_key, secret_key);
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        //connect(ui->pushButton,&QPushButton::clicked,&MainWindow::GreatPoem);
        connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::GreatPoem);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    int MainWindow::GreatPoem()
    {
        Json::Value result;
        std::string jsonData;
        Json::FastWriter write;
        #if 1
        std::string text = "百度是一家高科技公司";
    
        // 调用词法分析
        //result = client.lexer(text, aip::null);
        //调用语言生成——写诗
        result = client.poem("离愁",aip::null);
        #else
    
        std::string text = "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三";
        result = client.address_v1(text, aip::null);
    
        #endif
    
        jsonData = write.write(result);
        qDebug() << jsonData.c_str();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
  6. NLP.pro中添加头文件路径以及库文件路径(根据自己的实际情况修改)

    INCLUDEPATH += /usr/local/curl/include \
                   /usr/include/jsoncpp \
    
    LIBS    +=  /usr/lib/x86_64-linux-gnu/libjsoncpp.so \
                /usr/lib/x86_64-linux-gnu/libcrypto.so \
                /usr/local/curl/lib/libcurl.so \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

39.6 移植Qt开发板上

  1. 其他步骤不变,将pro文件中的头文件路径修改下,编程自己交叉编译的路径即可

    INCLUDEPATH += /home/lux/Downloads/Curl/Arm/curl-7.38.0/include/ \
                   /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/include/ \
                   /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/include/ \
    
    LIBS    +=  /home/lux/Downloads/Jsoncpp/jsoncpp_Arm/_install_forArm/lib/libjsoncpp.so \
                /home/lux/Downloads/OpenSSL/ForArm/openssl-1.1.1d/_install_forArm/lib/libcrypto.so \
                /home/lux/Downloads/Curl/Arm/curl-7.38.0/_install_Forarm/lib/libcurl.so \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  2. 编译,我的编译是在工程目录下执行qmake

  3. 然后执行make,即可生成目标文件

  4. 移植到根文件系统中去即可

  5. 执行,LCD屏幕显示 {\"log_id\":1669504523329624528,\"poem\":[{\"content\":\"\\u4e00\\u66f2\\u79bb\\u6101\\u5bf9\\u6708\\u5f39\t\\u5343\\u822c\\u522b\\u7eea\\u5411\\u8c01\\u8a00\t\\u76f8\\u601d\\u68a6\\u91cc\\u968f\\u98ce\\u53bb\t\\u6b32\\u8bed\\u8fd8\\u4f11\\u6cea\\u5df2\\u5e72\",\"title\":\"\\u79bb\\u6101\"}]}";

  6. 有显示,但是时Unicode编码格式的,后续需要转换格式

39.7 后续优化()

  1. 现在难点基本实现完成了,剩余的优化工作包括:
    • 根文件系统的中文显示
    • 界面的优化
39.8中文显示(参考)
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <qdebug.h>

#include "nlp.h"
#include "base/base.h"
#include "/usr/include/jsoncpp/json/json.h"

// 设置APPID/AK/SK
std::string app_id = "34215401";
std::string api_key = "fjNddzHij8swD23qDtgRrmv4";
std::string secret_key = "2R02CforwL4qtD4rGGlbegzaooTG9HS5";

aip::Nlp client(app_id, api_key, secret_key);

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::GreatPoem);
    connect(ui->pushButton1,&QPushButton::clicked,this,&MainWindow::DisplayChniese);
}

MainWindow::~MainWindow()
{
    delete ui;
}
/*******************************************************************
*@function   :  unicodeToUTF8
*@description:  将unicode编码字符串转换成utf8格式
*@input para :
*@returnValue:
*@auther     :
*@time       :
*@note       :
********************************************************************/
std::string unicodeToUTF8(const std::string& str)
{
    std::string result;

    for (size_t i = 0; i < str.length(); i++) {
        if (str[i] == '\\') {
            if (i + 5 < str.length() && str[i+1] == 'u') {
                unsigned int codepoint = 0;
                for (size_t j = 0; j < 4; j++) {
                    char c = str[i+2+j];
                    codepoint <<= 4;
                    if (c >= '0' && c <= '9')
                        codepoint += c - '0';
                    else if (c >= 'a' && c <= 'f')
                        codepoint += c - 'a' + 10;
                    else if (c >= 'A' && c <= 'F')
                        codepoint += c - 'A' + 10;
                    else
                        return ""; // invalid Unicode escape sequence
                }
                i += 5; // skip over the Unicode escape sequence
                if (codepoint <= 0x7F) {
                    result += (char)(codepoint & 0xFF);
                } else if (codepoint <= 0x7FF) {
                    result += (char)(((codepoint >> 6) & 0x1F) | 0xC0);
                    result += (char)((codepoint & 0x3F) | 0x80);
                } else if (codepoint <= 0xFFFF) {
                    result += (char)(((codepoint >> 12) & 0x0F) | 0xE0);
                    result += (char)(((codepoint >> 6) & 0x3F) | 0x80);
                    result += (char)((codepoint & 0x3F) | 0x80);
                } else if (codepoint <= 0x10FFFF) {
                    result += (char)(((codepoint >> 18) & 0x07) | 0xF0);
                    result += (char)(((codepoint >> 12) & 0x3F) | 0x80);
                    result += (char)(((codepoint >> 6) & 0x3F) | 0x80);
                    result += (char)((codepoint & 0x3F) | 0x80);
                } else
                    return ""; // invalid Unicode codepoint
            } else
                return ""; // invalid escape sequence
        } else
            result += str[i];
    }

    return result;
}

/*******************************************************************
*@function   :  GreatPoem
*@description:  生成写诗
*@input para :
*@returnValue:
*@auther     :
*@time       :
*@note       :
********************************************************************/
int MainWindow::GreatPoem()
{
    Json::Value result;
    std::string jsonData;
    Json::FastWriter write;
#if 0
    #if 1
    // 调用词法分析
    //std::string text = "百度是一家高科技公司";
    //result = client.lexer(text, aip::null);

    //调用语言生成——写诗
    result = client.poem("离愁",aip::null);

    #else

    std::string text = "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三";
    result = client.address_v1(text, aip::null);

    #endif

    jsonData = write.write(result);
    qDebug() << jsonData.c_str();
#endif
    std::string json_str_src = "{\"log_id\":1669504523329624528,\"poem\":[{\"content\":\"\\u4e00\\u66f2\\u79bb\\u6101\\u5bf9\\u6708\\u5f39\t\\u5343\\u822c\\u522b\\u7eea\\u5411\\u8c01\\u8a00\t\\u76f8\\u601d\\u68a6\\u91cc\\u968f\\u98ce\\u53bb\t\\u6b32\\u8bed\\u8fd8\\u4f11\\u6cea\\u5df2\\u5e72\",\"title\":\"\\u79bb\\u6101\"}]}";

    //std::string str = json_str.replace("\t","\n");

    QString temp_str = QString::fromStdString(json_str_src);
    temp_str = temp_str.replace("\t","\n");
    std::string json_str = temp_str.toStdString();

    Json::Reader reader;
    Json::Value root;

    //解析json字符串数据
    if (!reader.parse(json_str, root)) {
        std::cerr << "failed to parse JSON" << std::endl;
        return -1;
    }

    std::string chinese = root["poem"][0]["content"].asString();
    std::string tit = root["poem"][0]["title"].asString();

    //使用了QString类的fromUtf8()方法将转换后的UTF-8字符串转换为QString对象
    QString content = QString::fromUtf8(chinese.c_str());
    QString title = QString::fromUtf8(tit.c_str());

    //ui->plainTextEdit->setWordWrapMode(QTextOption::ManualWrap);    //设置手动换行

    ui->plainTextEdit->appendPlainText(title);      //标题
    ui->plainTextEdit->insertPlainText("\n");       //插入换行符
    ui->plainTextEdit->appendPlainText(content);    //内容

    return 0;
}

void MainWindow::DisplayChniese()
{

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/710476
推荐阅读
相关标签
  

闽ICP备14008679号