C/C++?Qt實現(xiàn)文章小說人物關(guān)系分析
更新時間:2023年01月09日 15:51:43 作者:alicema1111
這篇文章主要為大家詳細介紹了C/C++?Qt如何實現(xiàn)文章小說人物關(guān)系分析功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
一、所需工具軟件
1. Visual Stuido
2. C++
二、使用步驟
1.引入庫
代碼如下(示例):
#include "QtGuiApplication1.h" #include<qDebug> #include<QFile> #include <fstream> #include<iostream> using namespace std; #include <sstream> #include <unordered_map>
2.創(chuàng)建元素操作函數(shù)
代碼如下(示例):
//讀取人物名稱
void QtGuiApplication1::readOnButton()
{
//打開關(guān)鍵詞文件
ifstream ifs;
ifs.open("name.txt", ios::in);
if (!ifs.is_open())
{
cout << "打開文件失敗" << endl;
return;
}
//一行一行讀取到數(shù)組中
string buf;
while (getline(ifs, buf))
{
cout << buf << endl;
QString name = QString::buf);
gNameList << name;
}
ifs.close();
ui.textEdit->setPlainText(gNameList);
}
//出現(xiàn)次數(shù)
void QtGuiApplication1::timesOnButton()
{
qDebug() << QString::fromLocal8Bit("人名次數(shù)統(tǒng)計");
//統(tǒng)計歸零
if (gNameList.size() == 0)
{
std::cout << "請倒入人名列表后再試!" << std::endl;
}
gNameCounter.clear();
for (auto name : gNameList)
{
std::string key = name.toLocal8Bit();
gNameCounter[key] = 0;
}
//一行行讀入小說
ifstream ifs;
ifs.open("天龍八部.txt", ios::in);
if (!ifs.is_open())
{
cout << "打開文件失敗" << endl;
return;
}
//清空統(tǒng)計用的TABLE的數(shù)據(jù)
gTable.clear();
//統(tǒng)計結(jié)果顯示到界面
QStringList result;
for (auto name : gNameList)
{
std::string keyword = name.toLocal8Bit();
QString tmp = name + ":" + QString::number(gNameCounter[keyword]);
result << tmp;
std::cout << keyword << " " << gNameCounter[keyword] << std::endl;
}
ui.textEdit_3->setText(result.join("\n"));
}
//篇幅跨度
void QtGuiApplication1::rangeOnButton()
{
ui.textEdit_3->clear();
for (auto name : gNameList)
{
std::string keyword = name.toLocal8Bit();
int firstLineNum = -1;
int lastLineNum = -1;
for (int i = 0; i < gTable.size(); i++)
{
auto& row = gTable.at(i);
//std::cout << "行號:" << i << " ";
int KeyWordCounts = row[keyword];
if (KeyWordCounts > 0)
{
if (firstLineNum == -1)
{
firstLineNum = i;
}
lastLineNum = i;
}
}
ui.textEdit_3->append(QString::number(lastLineNum - firstLineNum));
}
}
//關(guān)系最緊密兩人
void QtGuiApplication1::relationGoodOnButton()
{
ui.textEdit_3->clear();
qDebug() << "test";
//關(guān)系緊密算法,原理每個人名在第幾行出現(xiàn)的行數(shù)集合和另一個人名行數(shù)集合求距離,取最小值為它的精密度
//值越小的那個為此人和另一個人的最精密度,然后同樣的方法計算出此人與其它人的精密度,最終取得
//誰和這個人最緊密
std::map < std::string, std::vector<int>> DataContainer;
//正在對比的兩個選手
std::string player1, player2;
int theMinDistance = 9999999999999999;
for (auto name : gNameList)
{
std::string keyword = name.toLocal8Bit();
std::vector<int> rowNums;
for (int i = 0; i < gTable.size(); i++)
{
auto& row = gTable.at(i);
//std::cout << "行號:" << i << " ";
int KeyWordCounts = row[keyword];
if (KeyWordCounts > 0)
{
rowNums.push_back(i);
}
}
DataContainer[keyword] = rowNums;
}
ui.textEdit_3->append(QString::number(theMinDistance)+ QStringLiteral("行"));
}
三、運行結(jié)果

到此這篇關(guān)于C/C++ Qt實現(xiàn)文章小說人物關(guān)系分析的文章就介紹到這了,更多相關(guān)Qt小說人物關(guān)系分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關(guān)文章
Windows下VScode實現(xiàn)簡單回聲服務的方法
回聲服務端可以將客戶端傳來的信息,再原封不動地發(fā)送給客戶端,因而得名 epoch 服務。接下來通過本文給大家介紹Windows下VScode實現(xiàn)簡單回聲服務的方法,感興趣的朋友一起看看吧2021-08-08

