声明:我这个不是那种“文本生成器”
我之前见过那种“自动写作文”的程序,无非就是这样的文章:
文章写的只有主题,没有内容
我曾多次向我的朋友提问他们看没看过那种AI写作的代码,而给我的回复很简单:你弄那玩楞干哈?装*?那玩楞我见过,写的文章空有其表,没有其实;你别在上面浪费时间!咱学的是C++,写不出来真正的AI !
我起先认为他们错了,因为当时我在脑子里已经有了一个AI的构思,然后我到处查资料,却发现,C++标准库貌似确实无法支撑一个AI正常地诞生,那…我用第三方库可以吗?
貌似不太可行,我用的是MinGW编译器,而目前的硬盘空间不足以支持我安装VSC++
难道,我要就此放弃了吗?
不!
第三方库也是人写出来的呀,我可以自己手搓啊!
然后,我就开始了编写
首先,我寻思这能够跟GPT媲美的AI我肯定是写不出来
那可以退而求其次,做一个文本生成器呀
其次,我想这AI开发出来之后也不一定能用,——没有数据库
我首先想到的是:“装一个数据库”
but,我当时貌似忘记了我MinGW的事情
然后,我想:数据库也是人写的,我没法跟人家写的一样好,照葫芦画瓢总该会吧?
然后我就着手进入这个项目了
我用了3个库文件,分别是:
- scentences_templete.h
- word_classes.h
- word_read.h
我并没有写主程序,我只是把库文件写出来了,大家一读就知道怎么用了
现在,到了喜闻乐见的开源时间
word_classes.h
#include<iostream>
#include<cstring>
#include<map>
#define __REAL__ 1
#define __XI__ 2
#define __COUNTABLE__ 3
#define __UNCOUNTABLE__ 4
#define __SIZE_BIG__ 5
#define __SIZE_SMALL__ 6
#define __TIME_MONTH__ 7
#define __TIME_DAY__ 8
#define __TIME_SPECIAL_DAY__ 9
#define __TIME_CLEAR_TIME__ 10
#define __OBJECT_HUMAN__ 11
#define __OBJECT_HUMAN_THING__ 13
#define __OBJECT_THING__ 12
#define __commendatory__ 13
#define __derogatory__ 14
#define __medium__ 15
#define __TYPE_1__ 15
#define __TYPE_2__ 16
#define __TYPE_3__ 17
#define __TYPE_4__ 28
#define __LONELY__ 18
#define __PL_ 19
#define __WHAT_WHAT__ 20
#define __WHAT_WHO__ 21
#define __WHAT_HOW__ 22
#define __WHAT_WHICH__ 23
#define __WHAT_HOWMUCH__ 24
#define __WHAT_HOWLONG__ 25
#define __WHAT_WHATTIME__ 26
#define __WHAT_WHY__ 27
#define __writer__ "YZX,CSDN-蒟蒻&大佬"
using namespace std;
class V;
class N;
class PL;
class TM;
class ADJ;
class ADV;
class PRON;
class PREP;
class WORDS;
class V{
public:
string shap;
int type;//实义/系动词
string TPSF;//三单
string ED;//过去
string ING;//进行
string DONE;//过去分词
};
class N{
public:
string shap;
string pl;//复数
int C_UC;//是否可数
};
class PL{//地点
public:
string shap;
int _size_type;
};
class TM{//时间
public:
string shap;
int time_type;
};
class ADJ{
public:
string shap;
int object;
int YN_commendatory;//褒贬
};
class ADV{
public:
// ADJ*adj;//对应的形容词***指针问题无法解决
string shap;
};
class PRON{
public:
string Main;//主格
string Accusative;//宾格
string n_Pos_pron;//名词性物主代词
string adj_Pos_pron;//形容词性物主代词
int type;//第几人称
bool num;//单数复数
};
class PREP{//介词
public:
string shap;
int _size_type;//所形容地点的种类
int time_type;//所形容时间的种类
};
class CON{//连词
public:
string shap;
};
class WORDS{
public:
string WRITER="YZX,CSDN-蒟蒻&大佬";
int adj_num;
int adv_num;
int verb_num;
int nouns_num;
int pls_num;
int tm_num;
int pron_num;
int prep_num;
int what_num;
int con_num;
string VERBS[1000];//
map<string,V>verbs;//
string NOUNS[1000];//
map<string,N>nouns;//
string PLS[1000];//
map<string,PL>pls;//
string TMS[1000];//
map<string,TM>times;//
string ADJS[1000];//
map<string,ADJ>adjs;//
string ADVS[1000];//
map<string,ADV>advs;//
string PRONS[100];//
map<string,PRON>prons;//
string PREPS[1000];//
map<string,PREP>preps;//
string WHATS[100];//
string CONS[100];//
};
scentences_templete.h
#include"word_classes.h"
#include<time.h>
#include<random>
#define __SCENTENCES_1__ 1
#define __SCENTENCES_2__ 2
#define __SCENTENCES_3__ 3
#define __STM_ED__ 1
#define __STM_WILL__ 1
#define __STM_NOW__ 2
#define __STM_ING__ 3
#define NUM 9
using namespace std;
random_device rnd;
mt19937 generator(rnd());
string templates(WORDS word){
string ret;
PRON subject;
int subject_type=rand()%5+1;
if(subject_type==1){
subject_type=__TYPE_1__;
if(rand()%2==1){
subject=word.prons["I"];
}
else{
subject=word.prons["we"];
}
}
else if(subject_type==2){
subject_type=__TYPE_2__;
if(rand()%2==1){
subject=word.prons["you"];
}
else{
subject=word.prons["you"];
}
}
else if(subject_type==3){
subject_type=__TYPE_3__;
if(rand()%2==0){
subject=word.prons["they"];
}
else{
int kz=rand()%3+1;
switch(kz){
case 1:
subject=word.prons["he"];
break;
case 2:
subject=word.prons["she"];
break;
case 3:
subject=word.prons["it"];
break;
}
}
}
else if(subject_type==4){
subject_type=__TYPE_4__;
int kz=rand()%(word.pron_num-7)+7;
subject=word.prons[word.PRONS[kz]];
}
else if(subject_type==5){
subject_type=__TYPE_4__;
subject.type=__TYPE_4__;
if(rand()%2==1){
if(rand()%2==1){
int kz=rand()%(word.pron_num-7)+7;
subject.Main=word.prons[word.PRONS[kz]].Main+"'s "+word.NOUNS[rand()%word.nouns_num];
subject.Accusative=subject.Main;
subject.adj_Pos_pron=subject.Main+"'s";
subject.n_Pos_pron=subject.Main+"'s";
subject.num=__LONELY__;
}
else{
int kz=rand()%(word.pron_num-7)+7;
subject.Main=word.NOUNS[rand()%word.nouns_num]+" of "+word.NOUNS[rand()%word.nouns_num];
subject.Accusative=subject.Main;
subject.adj_Pos_pron=subject.Main+"'s";
subject.n_Pos_pron=subject.Main+"'s";
subject.num=__LONELY__;
}
}
else{
if(rand()%2==1){
int kz=rand()%(word.pron_num-7)+7;
subject.Main=word.prons[word.PRONS[kz]].Main+"'s "+word.nouns[word.NOUNS[rand()%word.nouns_num]].pl;
subject.Accusative=subject.Main;
subject.adj_Pos_pron=subject.Main+"'s";
subject.n_Pos_pron=subject.Main+"'s";
subject.num=__PL_;
}
else{
int kz=rand()%(word.pron_num-7)+7;
subject.Main=word.NOUNS[rand()%word.nouns_num]+" of "+word.nouns[word.NOUNS[rand()%word.nouns_num]].pl;
subject.Accusative=subject.Main;
subject.adj_Pos_pron=subject.Main+"'s";
subject.n_Pos_pron=subject.Main+"'s";
subject.num=__PL_;
}
}
}
int scentences_type=rand()%3+1;
if(scentences_type==__SCENTENCES_1__){//感叹句
int kz=rand()%2+1;//how or what
string what;
if(kz==1){
what="how";
}
else if(kz==2){
what="what";
}
ret+=what;
if(ret[0]<'A'){
ret[0]+=32;
}
ret+=" ";
if(kz==1){//how
ret+=word.ADJS[rand()%word.adj_num];
ret+=" ";
ret+=subject.Main;
ret+=" ";
if(subject.num==__PL_){
ret+="are";
}
else{
if(subject_type==__TYPE_1__){
ret+="am";
}
else ret+="is";
}
}
if(kz==2){//what
int temp=rand()%2+1;
if(temp==1){
ret+="a ";
ret+=word.ADJS[rand()%word.adj_num];
ret+=" ";
ret+=word.NOUNS[rand()%(word.nouns_num-7)+7];
ret+=" ";
ret+=subject.Main;
ret+=" ";
if(subject.num==__PL_){
ret+="are";
}
else{
if(subject_type==__TYPE_1__){
ret+="am";
}
else ret+="is";
}
}
}
ret+="!";
return ret;
}
if(scentences_type==__SCENTENCES_2__){//疑问句
//what be main/what be main doing
int kz=rand()%8+20;
switch(kz){//生产疑问句
case __WHAT_WHAT__:
ret+="What ";
if(subject.num==__PL_){
ret+="are ";
}
else{
if(subject_type==__TYPE_1__){
ret+="am ";
}
else ret+="is ";
}
ret+=subject.Main;
return ret;
case __WHAT_HOW__:
ret+="How ";
if(subject.num==__PL_){
ret+="are ";
}
else{
if(subject_type==__TYPE_1__){
ret+="am ";
}
else ret+="is ";
}
ret+=subject.Main;
return ret;
case __WHAT_WHO__:
ret+="Who ";
if(subject.num==__PL_){
ret+="are ";
}
else{
if(subject_type==__TYPE_1__){
ret+="am ";
}
else ret+="is ";
}
ret+=subject.Main;
return ret;
case __WHAT_WHICH__:
ret+="Which ";
if(subject.num==__PL_){
ret+="are ";
}
else{
if(subject_type==__TYPE_1__){
ret+="am ";
}
else ret+="is ";
}
ret+=subject.Main;
return ret;
break;
case __WHAT_HOWLONG__:
ret+="How long ";
if(subject.num==__PL_){
ret+="are ";
}
else{
if(subject_type==__TYPE_1__){
ret+="am ";
}
else ret+="is ";
}
ret+=subject.Main;
return ret;
case __WHAT_HOWMUCH__:
ret+="How much ";
if(subject.num==__PL_){
ret+="are ";
}
else{
if(subject_type==__TYPE_1__){
ret+="am ";
}
else ret+="is ";
}
ret+=subject.Main;
return ret;
case __WHAT_WHATTIME__:
ret="What time is it?";
return ret;
case __WHAT_WHY__:
ret+="Why are you do that?";
return ret;
}
}
else{//陈述句(最难的)
int scentence_type=rand()%NUM+1;
// int scentence_time=rand()%4+1;
int kzz;
// if(scentence_time==__STM_NOW__){
switch(scentence_type){
case 1://be able to do 能够做
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
}
else ret+=" is ";
}
ret+="able to ";
ret+=word.VERBS[rand()%(word.verb_num-5)+5];
ret+=".";
return ret;
case 2://be afraid to do (内心)害怕\不敢做某事
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
}
else ret+=" is ";
}
ret+="afraid to ";
ret+=word.VERBS[rand()%(word.verb_num-5)+5];
ret+=".";
return ret;
case 3://be afraid of doing担心出现状况、结果
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
}
else ret+=" is ";
}
ret+="afraid of ";
ret+=word.verbs[word.VERBS[rand()%(word.verb_num-5)+5]].ING;
ret+=".";
return ret;
case 4://be angry with 对……生气
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
}
else ret+=" is ";
}
ret+="angry with ";
if(rand()%2==1){
ret+=word.verbs[word.VERBS[rand()%(word.verb_num-5)+5]].ING;
}
else{
ret+=word.prons[word.PRONS[rand()%(word.pron_num-7)+7]].Accusative;
}
ret+=".";
return ret;
case 5://be at home 待在家里
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
}
else ret+=" is ";
}
ret+="at home.";
return ret;
case 6://stay at home
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
ret+=word.verbs["stay"].shap;
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
ret+=word.verbs["stay"].shap;
}
else{
ret+=" is ";
ret+=word.verbs["stay"].TPSF;
}
}
ret+=" at home.";
return ret;
case 7://be back/in/out 回来/在家/外出
ret+=subject.Main;
if(subject.num==__PL_){
ret+=" are ";
}
else{
if(subject_type==__TYPE_1__){
ret+=" am ";
}
else ret+=" is ";
}
kzz=rand()%3+1;
if(kzz==1){
ret+="back";
}
else if(kzz==2){
ret+="in";
}
else{
ret+="out";
}
ret+=".";
return ret;
case 8://be bad for 对……有害
return "The writer is YZX,he is the CSDN-蒟蒻&大佬";
case 9://be busy doing/with sth忙于做……(忙于……)
return "The writer is YZX,he is the CSDN-蒟蒻&大佬";
break;
case 10://be careful of 当心,注意,仔细
break;
case 11://be covered with 被……覆盖
break;
case 12://be different from与……不同
break;
case 13://be famous/known as 作为……出名
break;
case 14://be famous/known for 以……而著名
break;
case 15://be free 空闲的,有空
break;
case 16://be friendly/kind to对……友好
break;
case 17://be from = come from 来自…,什么地方人
break;
case 18://be full of/filled with装满……
break;
case 19://be good at= do well in 擅长于…
break;
case 20://be good for对……有好处
break;
case 21://be (ill) in bed 卧病在床
break;
case 22://be interested in 对……感兴趣
break;
case 23://be in trouble 处于困境中
break;
case 24://be late for 迟到
break;
case 25://be mad at 对……生气
break;
case 26://be made from/of 由……制成
break;
case 27://be made in 在……地方制造
break;
case 28://be made up of由……构成
break;
case 29://be on 在进行,在上演,(灯)亮着
break;
case 30://be pleased with对…感到高兴
break;
}
// }
}
}
word_read.h
#include"word_classes.h"
#include<fstream>
using namespace std;
void read_nouns(WORDS&ret){
ifstream file("nouns_shap.txt");
int num;
file>>num;
for(int i=0;i<num;i++){
getline(file,ret.NOUNS[i]);
ret.nouns[ret.NOUNS[i]].shap=ret.NOUNS[i];
}
ret.nouns_num=num;
file.close();
ifstream file2("nouns_pl.txt");
for(int i=0;i<num;i++){
getline(file2,ret.nouns[ret.NOUNS[i]].pl);
}
file2.close();
ifstream file3("nouns_C_UC.txt");
for(int i=0;i<num;i++){
file3>>ret.nouns[ret.NOUNS[i]].C_UC;
}
file3.close();
ifstream file4("verbs_shap.txt");
file4>>num;
for(int i=8;i<8+num;i++){
getline(file4,ret.NOUNS[i]);
ret.verbs[ret.VERBS[i]].shap=ret.VERBS[i];
}
ret.verb_num=num;
file4.close();
ifstream file5("verbs_type.txt");
for(int i=8;i<8+num;i++){
file5>>ret.verbs[ret.VERBS[i]].type;
}
file5.close();
ifstream file6("verbs_TPSF.txt");
for(int i=0;i<8+num;i++){
file6>>ret.verbs[ret.VERBS[i]].TPSF;
}
file6.close();
ifstream file7("verbs_ED.txt");
for(int i=0;i<8+num;i++){
file7>>ret.verbs[ret.VERBS[i]].ED;
}
file7.close();
ifstream file8("verbs_ING.txt");
for(int i=0;i<8+num;i++){
file8>>ret.verbs[ret.VERBS[i]].ING;
}
file8.close();
ifstream file9("verbs_DONE.txt");
for(int i=0;i<8+num;i++){
file9>>ret.verbs[ret.VERBS[i]].DONE;
}
file9.close();
ifstream file10("adjs_shap.txt");
file10>>num;
ret.adj_num=num;
for(int i=0;i<num;i++){
getline(file10,ret.ADJS[i]);
ret.adjs[ret.ADJS[i]].shap=ret.ADJS[i];
}
file10.close();
ifstream file11("adjs_object.txt");
for(int i=0;i<num;i++){
file11>>ret.adjs[ret.ADJS[i]].object;
}
file11.close();
ifstream file12("adjs_YN_commendatory.txt");
for(int i=0;i<num;i++){
file12>>ret.adjs[ret.ADJS[i]].YN_commendatory;
}
file12.close();
ifstream file13("advs_shap.txt");
file13>>num;
for(int i=0;i<num;i++){
getline(file13,ret.ADVS[i]);
ret.advs[ret.ADVS[i]].shap=ret.ADVS[i];
}
file13.close();
// ifstream file14("advs_to_adjs.txt");
// string temp;
// for(int i=0;i<num;i++){
// file14>>temp;
// ret.advs[ret.ADVS[i]].*adj=ret.adjs[temp];
// }***指针问题无法解决
// file14.close();
ifstream file15("prons_Main.txt");
file15>>num;
ret.pron_num=num;
for(int i=0;i<num;i++){
getline(file15,ret.PRONS[i]);
ret.prons[ret.PRONS[i]].Main=ret.PRONS[i];
}
file15.close();
ifstream file16("prons_Accusative.txt");
for(int i=0;i<num;i++){
getline(file16,ret.prons[ret.PRONS[i]].Accusative);
}
file16.close();
ifstream file17("prons_n_Pos_pron.txt");
for(int i=0;i<num;i++){
getline(file17,ret.prons[ret.PRONS[i]].n_Pos_pron);
}
file17.close();
ifstream file18("prons_adj_Pos_pron.txt");
for(int i=0;i<num;i++){
getline(file18,ret.prons[ret.PRONS[i]].adj_Pos_pron);
}
file18.close();
ifstream file19("prons_type.txt");
for(int i=0;i<num;i++){
file19>>ret.prons[ret.PRONS[i]].type>>ret.prons[ret.PRONS[i]].num;
}
file19.close();
ifstream file20("pls_shap.txt");
file20>>num;
ret.pls_num=num;
for(int i=0;i<num;i++){
getline(file20,ret.PLS[i]);
ret.pls[ret.PLS[i]].shap=ret.PLS[i];
}
file20.close();
ifstream file21("pls_size_type.txt");
for(int i=0;i<num;i++){
file21>>ret.pls[ret.PLS[i]]._size_type;
}
file21.close();
ifstream file22("tms_shap.txt");
file22>>num;
ret.tm_num=num;
for(int i=0;i<num;i++){
getline(file22,ret.TMS[i]);
ret.times[ret.TMS[i]].shap=ret.TMS[i];
}
file22.close();
ifstream file23("tms_type.txt");
for(int i=0;i<num;i++){
file23>>ret.times[ret.TMS[i]].time_type;
}
file23.close();
ifstream file24("prep_shap");
file24>>num;
ret.prep_num=num;
for(int i=0;i<num;i++){
getline(file24,ret.PREPS[i]);
ret.preps[ret.PREPS[i]].shap=ret.PREPS[i];
}
file24.close();
ifstream file25("preps_timetype.txt");
for(int i=0;i<num;i++){
file25>>ret.preps[ret.PREPS[i]].time_type;
}
file25.close();
ifstream file26("preps_sizetype.txt");
for(int i=0;i<num;i++){
file26>>ret.preps[ret.PREPS[i]]._size_type;
}
file26.close();
ifstream file27("whats_shap");
file27>>num;
ret.what_num=num;
for(int i=0;i<num;i++){
getline(file27,ret.WHATS[i]);
}
file27.close();
ifstream file31("cons_shap");
file31>>num;
ret.con_num=num;
for(int i=0;i<num;i++){
getline(file31,ret.CONS[i]);
}
file31.close();
}
建立以下的文本文档
作为数据库,根据英文意思自己理解含义
所有XX_shap.txt在罗列单词前必须给出有多少单词
所以请各位读者
自觉
留下
点赞
关注
关注和点赞对于各位来说是免费的
但对我来说,是无价的