改变你对文本生成程序的误解!用C++标准库,MinGW情况下,写一个文本生成器(一种AI)

声明:我这个不是那种“文本生成器”

我之前见过那种“自动写作文”的程序,无非就是这样的文章:

在这里插入图片描述

文章写的只有主题,没有内容

我曾多次向我的朋友提问他们看没看过那种AI写作的代码,而给我的回复很简单:你弄那玩楞干哈?装*?那玩楞我见过,写的文章空有其表,没有其实;你别在上面浪费时间!咱学的是C++,写不出来真正的AI !

我起先认为他们错了,因为当时我在脑子里已经有了一个AI的构思,然后我到处查资料,却发现,C++标准库貌似确实无法支撑一个AI正常地诞生,那…我用第三方库可以吗?

貌似不太可行,我用的是MinGW编译器,而目前的硬盘空间不足以支持我安装VSC++

在这里插入图片描述
在这里插入图片描述

难道,我要就此放弃了吗?

不!

第三方库也是人写出来的呀,我可以自己手搓啊!

然后,我就开始了编写

首先,我寻思这能够跟GPT媲美的AI我肯定是写不出来

那可以退而求其次,做一个文本生成器呀

其次,我想这AI开发出来之后也不一定能用,——没有数据库

我首先想到的是:“装一个数据库”

but,我当时貌似忘记了我MinGW的事情

然后,我想:数据库也是人写的,我没法跟人家写的一样好,照葫芦画瓢总该会吧?

然后我就着手进入这个项目了

我用了3个库文件,分别是:

  1. scentences_templete.h
  2. word_classes.h
  3. 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在罗列单词前必须给出有多少单词

所以请各位

自觉留下

点赞&关注

关注和点赞对于各位来说是免费的
但对我来说,是无价的

这是对我这些时间努力的肯定!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值