Unity人工智能处理语言对话:第一章、第二章、第三章、第四章.docx
Unity人工智能处理语言对话(第一章到第四章)这仅是前四以,以后我还会继续写。我只学了两个月的Unity.开发水平很低。而且我不想和人说话,我不想理睬任何人,你们不要和我说话.在夸克网盘;含各种词库的sqite数据库(garden.dbbhttps:/pan.quark.en/s/783565b1.6790前三章实测:第四垄实测:项目目控制台清除VHI也谈M停EditofQQQQQQQQQQQQQ1940:31第1句:KQEMUnityEngine.Debug1.og(object)19:40:31句型:主amUnityEngineDebug1.og(object)19:40:31主语:SUrwtyEngineDebug1.og(object)(1940:31M:«UrutyEngmeDebug1.og(object)(1940.311R:MUnityEngineDebugr1.og(object)(19.40:31毓:钠UmtyEngmeDebug1.o(object)1940:31动词发生也事,定UnityEngine.Debug1.og(object)194031M2<D:吃草UrvtyEngineDeb1.og(object)19:40:31句型:主谭庆UnityEngmeDebug1.og(object)1940:31)主通:«UrvtyEngmeDebug1.og(object)(19:40:31iM:电UfwtyEngineDebug1.og(object)1940:31RS:军UnityEngineDebug1.og(object)194031®«:王动UmtyEngineDebug1.og(object)19:40:31动幽性SVW三UrwtyEngineDebug1.og(object)地目目控制台清除折通识*停Editor-Q(19:49:43第1句:M色的,吃白色的萼Unityngne.Debg1.og(object)QI1.9:49:43)句量主直UnityEngtne.Debug1.og(object)Q【19:49:43)主遇:狼Unityfngine.Debug1.og(object)0194943AiB吃UnityEngine.Debug.1.og(object)g(19:49:43XU:隼UnrtyEngIne.Debug:1.Og(object)Q1.1.9:49:43语态主动UnityfngineDebug1.og(object)Qn9:49:43动词发生概率:梅定Unityngne.Debug1.og(object)Q194943JiWWEWf1.霸色的UnityEngtne.Debug:1.og(object)Q(19:49:43反送的形宫词:白色的UnityfngmeDebug1.og(object)此外UnityTextMeshProC用完整汉字字符集:https:/pan.quark.en/s/5fdc8e1.807d6第章的动词只能是一个字的动词,否则可能出错,从第:章开始,动词可以是多个字的。第二球还不能用姐合名词,例如足球学校,值可以用单个名词:足球、学校。第三维可以用组合名诃、组合动词.并修更有时候动词只显示一部分的情况.第四欧.一次可以输入多句话,但只能用逗号或句号隔开,不能用问号和感叹号分隔句子.对主调宾结构的句型,可以分析出定语(形容词、数词、名词所行格),但双宾语句里和宾语补足语句型,还没有做定语分析程序,而且数词只能用阿拉伯数字,也就是1、2.3这类数字,还不能用汉字型数字。第四章还有些实测:吸目折,岬管件EdM”。195028)整1句:2RSC3RM¼yUnrtyE9Debug1.og(obye<0QII9:5628)句51:£««Urwty9>eDebug1.og(object)A(195028)1¾<UnrtyEngineDcbug1.og(object)4119S028a:电Urvty(gnDebug1.09(ob)<t)A(19S028M:WUnrtyin9nOebug1.09(obyct)At1SftM1.¾:1Un1.tyCng1.neDebug1.og(ob>ect>195028)MRS*:WSUratyCngineObug.1.og(object)Q19:50:28主谖的IjtB)2UnttyEngineDebug1.og(object)G195028JKiB的财3¾<UntygeDebug1.og(obect)酬目日改制占清除折怏曲适停Editor*(19.S1.12J第1句:*三n*eH389UnttyEngmeDebug1.og(object)C(195112句去主WfUnrtyEngmeDebug1.og(object)Q(1951:121$9:UnrtyEngme.Debugr1.og(object)Q(19:51:12iW电UmtyEgme.Debug1.og(ObXCt)Q1951:12na:HUmtyEngineObug1.og(object)Q(1951:12ifi主动UnityEngineObug1.og(ObjeCUQ1951:12动国次生5ItSUrvtyEngmeDebug1.og(object)C(1951:12)主港的名册帏格张三Un<tyEngeDebug1.09(object)A(1951:123四¾<UnrtyEngmeDebug1.og(object)前三维概述:第一章的主要内誉判断输入的句子中,是否包含名词。找出句子的主语、谓语、宾语。解决三个基本问题前面的方法,靠句子包含的词直接与词座的词对比,来找主语(名词)、谓语(动词、宾潘(名词),会有问题:第一个何越:焦猫吃竹子这句话里你感觉有礴觉有两个名词:熊猫.竹子但是电脑会找出四个名词:掳猫、焦、猫、竹子,对于第一个向SS的解决方法:新找到的长词熊猫)樱盖己找到的短词(搞、猫)。已找到的长词熊猫)吸收新找到的短词(焦、痛).所以创建一个函数:WordCover<¾).词语檎(WordBox)存放这些找到词,以实现甩芾和吸收。第二个问起:熊猫喜欢森林的竹子,这句话动词右边句有两个名词,竹子是宾谱.而森林不毡宾语,因为森林后边有个“的”字,是名词所盯格.对于第二个向翘的解决方法:找到的名词右边的第一个字符,看它是不足"的”字,如果是"的"字,那么这个名词就不是宾谱.找主语也是同理.所以创建一个de函数.第三个问题:"学*字是动词,但是在“学生"这个词里,“学”字就变成名词了,还当动词理解,就会错.对于第三个问题的解决方法:建立词性辨析去:verbJudge,词性辨析衣在数据库里,已经做好了,第二亲的主要内容基本单句有六种句型:只有性质状态(表语);也漂亮、对啊、太好了.句子里没有词语动词,其余五种句型里,都有谓语动词.主语(动作执行者)-谓i科(动作):张三摔倒.主语(动作执行者)-谓语(动作)宾语(动作对象):狒吃旗.主语-谓语是-表语(表明主语的身份和性质状态):张三是老师,太阳是美丽的。双宾语句型:主语(传输的人调语(传输动作间接宾语(传输对象)直接宾语(传输的事物):张三给李四苹果,张三救李四数学.宾语补足语句型:主语-调用(例如把、使、让)-宾语-宾语补足语做什么):张三让李四跳舞,张三把房间弄脏了。前面只说了主谓实句型,还要处理其它句型.双宾语句型:双宾语句型的丽语动词后面有两个名词,例如张三给李四斗果,李四是间接宾语(名词,革果是包接宾语名词。但是有两个名诃的就是双宾谙句型吗?不是的.例如张三喜欢足球学校.谓语动词后面行两个名词:足球、学校,但显然足球学校是一个整体名词,也就是主调真句型,而不是女宾语句型。因此判断双宾语句型,还要行谓语动词是不是适合双宾语句型的。双宾语句型的谓语动词主要是传输事物的动词:给、送给、教,那么请i告动词是双宾i杏句型的动词(例如给、敦),且谓谱动词后面有两个名词(体现为谓语动词右边的语句处理忖,名词槽NounBox有两个名诃,NounBox1.和Nouno×2都育值),就可以判断为双宾语句型.还有,像“足球学校”这样两个名词连在一起,就要合并成一个名词,作为主语或宾语。仅从双宾语句型的标志动词“教”判断双宾谱句型.不一定准确,例如1"他教我数学”是双食语句型,但"他教书”就不是双宾语句型,所以还要根据宾语名词的数上来判断到底是不是双宾语句型,如果动词右边只有一个名词,例如"他.教书"的“书",句子就不是双宾语句型。所以通过谓语动词判断一个句子是双宾语句型后,根据找到的名词数用,例如只有一个宾语名词那么就要把双宾错句型,修正回主谓宾句型.名词次序:间接宾语在直接宾语之前,所以找到两个名词.次序在曲面的那个名词,是间接宾语,次序在后面的加个名词是I1.接宾语。宾谙补足语句型:和主谓真句型不同,宾语补足语句型含有主调真句型的部分,但宾语后面还有个动作(动词),也就是宾语补足语.因此看宾语后面是否还有动词,是判断宾语补足语句型的方法。但是有两个动诃就越烦1.如何判断这个动词是谓语动词还是宾谙补足谙动词呢?那就需要先把所有动词找出来,如果是宾语补足语动诃,覆么这个动词在谓语动诃的后面,如果是消语动词,则在前面,既然整存放多个动词进行判断,就要有动词楸'VerbBox)O动词次序:调谱动词在宾语补足语动词之前.所以找到两个动词.词谱次序在前面的是谓语动词,词再次序在后面的是宾语补足语动词.宾语补足语动词后面还有个名词,宾语补足语动词和这个名词合并在一起,作为宾语补足语。例如他让我打扫教室如果宾语补足语只是“打扫”话就说不清斑了.但是有的宾语补足语,就只有动词,后面没有名诃.例加“他让我跳舞“就只有"跳舞”这一个动词,"跳舞"这个词后面没有名词,因为嘴舞是不及物动词.双宾语句型和宾语补足语句型,都是由主谓宾句型拓展而成的.双宾语句型在主刑宾句型的基础上.多加了一个食谱.我谱补足i?5句型在主谓真句型的基础上,多加广一个动词(其语补足宿).所以先完成主调宾句型,再根据是否有拓展,来判断是不是双宾语句型或宾语补足语句里。第三章的主要内容省略主i?t有两种情况:一种是主动语态省略主语,例如"跳过去",全句指"你跳过去,另一种是被动语态省略主语,例如"张三故打了",没说谁打了张三,这里张三是宾语,如果说“李四打了张三李四就是主语.被动语态的标志是呻Q字,如果没有"被"字,而且省略了主谱,就是主动谱态省略主语的情况.那么这种情况下,主语应该填什么呢?例如“过来”,一般指“你过来但"走吧股指"我们走吧”所以程序要根据具体的动词来判断省略的主语应该填什么。但是动词太多,好个动词都要设置省略的主语判断,太麻烦。所以省略主语,按最通常情况,就默认埴"你"字,作为主语.如果主谓是“我的”而不足“你”字,就不该省略主语.被动i杵态应该还原为主动语态去埋解.但被动语态往往没有主语,那么默认主语应该以什么呢?毕竟不知道主语,那就填"犷物这个词作为主语。程序分析句子时,被动语态的主语位置的词,是宾语。例如“李四被打了",李四在W语动词左边句.程序会把李四当成主语,但在被动语态句里,李四不是主语,所以有“被”字的时候.主语要梆动到宾语位置,然后在主语位置补充“事物”这个词,作为主语.但是有些时候,被动语态的主语是说明了的,例如"李四被张三打了.就还原为主动语态“张三打了李四张三做主语,而不是埴“事物”做主语.简而言之.被动谙态里,主谱放到了宾谱位置.其语放到了主语位置.所以变为主动谱态时.要把宾语拂回主语位说,主语掳问宾语位捏.如果被动语态有主语,例如“李四被张三打了“,那么主语(张三)位于“被"字与谓语动词之IH).那么谓语动词左边句中,又分为"被"字左边句和"被"字右边句.技字左边句里的名词是宾谙.被字右边句里的名词是主诏.名词合并:名词合并:例如“足球学校"这个词.会被当成两个名词"足球"和"学校但实际中.要把它们合并成一个组合名词,作为主语读宾语.合并方法:如果两个字符(词语是连续的,那么这两个词语之间的内容为空。动词合并:例如“应该爱”是两个动词:情态动词"应该”和普通动词“爱J应该合并成一个动词.动词前面是否有否定词,也很重要。例如"他爱猫"和"他不爱猗虽然谓语动词都是“爱”字.但前面加个"不”字.意义就相反了.所以看谓i?J动词前面她否有否定词,是很更要的事.谓语动词前面的否定词,一般有不、不要、不可以、不应该、不能、别。还有不确定肯定还是否定动词,例如“他不一定去","去"字是动词,但是动词前的“不一定党并不像是"不”字那样对动诃进行否定,而是对动诃既不像是肯定,也不愎是否定.而是不确定”因此对好句话的谓语动词,都要加一个性质;肯定、否定、不确定,但不确定,有时候偏向于肯定,例如“他可能去有时候不确定偏向于否定,例如“他不太可能去"以及“他或许不去、那么动词发生概率分为五种:肯定、偏向肯定、不确定、偏向否定、否定.这其实就是在分析M情(谓语动词发生的概率,这在概率分析上有用。第一章人工智能处理语言的意义假如你是认长.带着两个NPC队友张三和李四,路上遇到一条蛇.你下令张三打蛇,李四保护张。这就需要先分析出句子的主语、请语、宾语,程序才能操作命令.单机数据库的意义这个程序用的是总机数据除Sq1.ite,单机游戏一般郴用单机数据库SqIite.因为一方面,单机数据库不联网,在用户电脑的游戏义件里,而不是在服务涔上。另一方面,单机数据昨不用安装服务,不用做配置,用户哈都不用管,H接就能用.需要的插件说明有词库的SqIite数据库garden.db.其中名词表noun,名词列Word_co1.动词去Verb,动词列wcxd_co1.还行诃性辨析表Verb_jUdge“把garden.db放到ASSetS文件夹的上一级文件夹,也就是程序漏码的根目录,就可以在嫔我器环境下运行了.生成游戏后,8arden.db还要现利到生成游戏的文件夹电。将C盘-ProgramFi1.es-Unity-Hub-Editor-2022.3.38-*Editor-Data-MoonBIeedingEdge1.ib-mono-net_4_x-win32文件夹里的Mono.data.sq1.ite.d1.1.和system.data.d1.1.放到P1.ugins文件夹里(在ASSetS文件夹里,自己创建一个PIUginS文件夹,字母P大写,系统自动认为那是个存放插件的文件夹八在sq1.ite官网卜戢sq1.ite3.d1.1.也放到PIUginS文件夹里。Mono.data.sq1.ite.d1.1.ssystem.data.dkSq1.ite3.d1.1.是SqHte数据库运行所需的:.个插件“判断输入的句子中,是否包含名词usingSystem.Co1.1.ections;usingSystem.Co1.1.ections.Generic;usingUnityEngine;usingUnItyEngme.UI;usingTMPro;usingMoo.Data.Sq1.ite;pub1.icc1.asssq1.iten:MonoBehavIourpub1.icTMPJeXttmp1.xt;输出框对stringShOWTeX输出框的内容StringQnoun=newstring(7128);名词数组,名词数法7128string)verb=newString(S886);/动时数组.动词数Q5886inti=。/数组用的循环变量pub1.icTMPJnputFieIdinputFied;输入框对象/Startisca1.1.edbeforethefirstframeupdatevoidStart()/ZinputFieId=GetCOmPonentVTMP_1.nputFie1.d。;/输入枢获取组件inputFie1.d.onEndEdit.Add1.istener(OnInputEndEdit);/输入完成后,对回车键的响应连接数据座stringconnectionstring="DataSOUrCe=garden.db;VerSiOn=3;"SqIiteConnectiondbCon11ection;dbConnection=newSq1.iteconnection(ConnectionString);dbConnecton.Open();填充名词数组第一步:Sq1.指令stringSqIQuery="SE1.ECTword_co1.FROMnoun"第二步:执行指令SqIiteCommanddbComma11d;dbCommand=dbConnection.CreateCommand();dbCommand.CommandTe×t=SqQUery;dbCommand.EecuteNonQuery();第三步:填充名词数组SqIiteDataReaderdbReader;dbReader=dbCommand.EecuteReader();whi1.e(dbReader.Read()nouni=dbReader.GetVa1.ue(0).ToString()GetVa1.ue(0)表示结果展的第列,因为只查询了一列,所以返回的结果集就一列ii;)dbReader.C1.oseO;UnItyEngine.Debug.1.og(0>j<i<4>填充动词数组第一步:SqI指令SqIQuery="SE1.ECTword-coFROMverb"sq1.指令第二步:执行指令/ZdbCommand=dbConnection.CreateCommand();dbComma11d.CommandText=SqIQuery;dbCommand.ExecuteNonQuerv();第三步:埴充动词数现dbReader三dbCommand.ExecuteReader();i=0;whi1.e(dbReader.Read()verb(i=dbReader.GetVaIue(O).ToStringC;i*;dbReader.C1.ose(;UnityEngine.Debug.1.og(i);显示动诃数壮)/Updateisca1.1.edonceperframevoidUpdatedvoidOnInputEndEdit(StringvaIue)stringshur=MputFieIdtext;输入根的值Stringjiegu。*不包含”;费认值是不包含intm=noun.1.ength;名词数组的长度,也就是有多少个名词for(intn=0;n<m;n+)/'Contains函数用于判断包含关系.例如句子和名词的包含关系就是用句子和名词数组的名词,一一比肘,来判断是否包含名词n的侑从0逐渐增K到名词数祖的名词数法伯,这样数祖也就经历了所有名词7if(shuru.Contains(nou11n)tiJ1.egUo=I包含";)tmpTe×t.text=jieguo;U示结果)On1.nputEndEdIt稍微改变一下,也可以用于找动词。找出句子的主语、谓语、宾语例如输入:白色的猫吃黑色的夙,主语显示:猫,谓语动词显示:吃,宾语显示;制。基本原理:对于主谓宾句型,先找出动词,然后以动词为分割符号,分割句子.动词左边分割印的句子的名词就是主谙.动同右边分割出的句子的名词就是宾谙.usingSVStem.Co1.1.ections;usingSystem.Co1.1.ections.Generic;usingUnityEngine;usingUnityEngine.UI;USingTMPro;usingMono.Data.Sq1.ite;pub1.icc1.asssq1.itecon:MonoBehaviourpub1.icTMP-TexttmpText;输出机对象stringShOWText;输出框的内容stringnoun=newString7128;名词数组,名诃数fit7128StrIn8口verb=newstr1.n8586;/动词数组,动词数吊5886inti=O”数组用的循环变埴pub1.icTMPJnputFietdinputFie1.d;纳入框对软stringshuru=输入他的内容stringFindSubject=心找到的主语stringFindVerb»吗找到的调谱动词stringFindObject=找到的宾语/Startisca1.1.edbeforethefirstframeupdatevoidStart()InPUtFIe1.dQnEndEd1.t.Add1.JStener(On1.nPUtEndEdit)J输入完成后,对回车键的响应连接数据库stringconnectionstring=”DataSource=garden.db;Version=3;w;SqIiteConnectiondbConnecton;db<onnection=newSq1.iteconnection(ConnectionString);dbConnection.Open();填充名词数组第一步:Sq1.指令stringSqIQuery"SE1.ECTword-co1.FROMnoun*;第二步:执行指令SqIiteCommandAbCommand;dbCommand=dbConnection.CreateCommand();dbComma11d.CommandText=SqIQuery;dbCommand.ExecuteNonQuerv();第三步;填充名词数组SqhteDataReaderdbReader;dbReader=dbCommand.ExecuteReaderO;whi1.e(dbReader.Read()noun(i)=dbReader.GetVa1.ue(0).ToString();GetVa1.Ue(O)表示结果集的第列.W为只查询了一列,所以返回的结果集就一列i*;dbReader.C1.ose(;/UnityEngine.Debug.1.og(i);/W.zj;名词数也填充动词数组第一步:SqI指令SqtQuery»"SE1.ECTword_co1.FROMverb"sq1.指令第二步:执行指令/dbCommand=dbConnection.CreateCommand();dbCommand.CommandText=Sq1.QUery;dbComma11d.ExecuteNonQuery();第三步:填充动词数组dbReader=dbCommand.E×ecuteReader();1=0;whi1.e(dbReader.Read()verb(i1.=dbReader.GetVa1.ue(0.ToStr1.ng();I+;)dbReader.C1.ose();UnityEngIneQebugJog(I);/显示动词数示/Updateisca1.1.edonceperframevoidUpdatedvoidOn1.nputEndEdit(stringva1.ue)(shuru=inputFie1.d.text;输入框的伯找iff语动词Stringjieguo不包含”;X认值是不包含intm=Verb.1.ength;动词数组的长度,也就是有多少个动i11Jfor(intn=O;n<m;n+)/Contains函数用于判断包含关系.例如句子和动词的包含关系就是用句子和动词数组的动词,一一比对,来判断是否包含动词n的值从0逐渐增K到动词数祖的动词数法值,这样数殂也就经历了所有动词7if(shuru.ContainS(vern)包含(JIegUO=包含";FindVerb=Verb(n);找到了动词)if(j<eguo="包含")SpIrtSentence(FindVerb);/tmpText.text=jiegu。;显示结果voidSp1.itSentence(stri11gfind-verb)/.对于主谓宾句型,先找出动词,然后以动词为分割符号,分割句子。动词左边分割出的句子的名诃就是主谱.动词右边分割出的句子的名词就是宾讲先举个例子简总说明一下字符串分割的基本原理:stringstr="臼色的猫吃果色的秋;全句stringword="吃指1定词stringres结果intChang=0;全句长度MtindeX=0;指定词的位冏(索引)inti=O;ft1时变量intj=0;临时变量计能全句长度chang=SE1.ength;显示字符个数,从1开始计总UnityEngine.Debug1.4(Chang);显示9计算指定字符在全句中的位置index=StrJndeXof(Word);从0计算,例如笫2个字符.显示为1,而不是2UnityEngine.Debug.1.<½(index);/显示4收取笫3个字符右边的1个字符SUbstr1.ng(开始位置,向右裁取长度),从1开始计算,不是0res=str.Substring(3,1.);从笫3个字符开始.向灯截取1个字符UnityEngine.Debug.1.吨(res);显示:猫截取指定字符右边的全部字符iindex+1;指定字符的位置.由于index是从0开始计算的,所以要加1,变为从1开始计算的方式,所以是index+1j=ChangYmdex+”;彼取长度=全句长度-指定字符的位置长度UnityEngine.Debug.1.og(i上显示5UnityEngine.Debug.1.og(chang);/Wzj»9UnityEngine.Debug.1.og(j);/i'<4res=StcSubstring(IJ);UnityEngine.Debug.1.og(res);显示:黑色的以res=str.Substring(index+1,chang-(index1);变化形式UnityEngine.Debug.1.og(res);显示:见色的W/index变为StrJndexOf(Word).chang变为Str1.engthres=str.Substring(str.1.ndexOf(word)+1,Str1.ength-(str.1.ndexf(word)1);变化形式UnityEngine.Debug1.og(res)fi?s黑色的取或取指定字符左边的全部字符res=StnSubstring(Ojndex);从句子开始的0位置,截取长度是指定字符的位£长度res=sufUbString(0,StrJndeXOf(Word);/变化形式UnItyEngine.Debug.1.og(res):白色的猫限取两个指定字符之间的全部字符i=StrJndexOfCJW");J=StrJndexOf(W);res=str.Substring(i+1.j(i+1.);UnityEngine.Debug.1.og(res上显示:吃黑色的把i变为str.1.ndexOf('JAV').j变为StrJndeXOf("Kt")res=str.Sbstr1.ng(str.1.nde×Of(a")+1,str.ndeOf("W")"(str.1.ndexf("")+1)¾化形式UnityEngine.Debug.1.og(res);显示:吃黑色的数组形式能取字符前面定义了:Str="白色的猫吃黑色的网"word="吃";StringJjshuzu=str.Sp1.it(word);按指定分割符分割字符串,并存入数组中UnityEngine.Debug.1.c(shuzuOJ);/4'?b:白色的猫UnItyEngine.Debug.1.og(shzu(1.);/W示:黑色的献或逐一履示数俎全部foreach(stringpartinshuzu)UnityEngine.Debug1.og(Part);以上内容是注择掉的解择.不是下面程序的内容.下面开始,才是程序运行的内容.*/string1.eftPart=训语动词的左边句stringRightPart=谓语动诃的右边句1.eftPart=shuru.Substring(O,shuru.nde×Of(find-ve<b);RightPart=shuru.Substring(shuru.1.ndexOf(find-vcrb)+1,shuru.1.ength(shuru.1.ndexf(find-verb)+1);/.例如句子<Shuru)是白色的猫吃黑色的眼find_word:吃1.eftPart:臼色的猫RightPan:黑色的尺UnityEngine.Debug.1.og(find_verb);UnityEngine-Debug.1.og(1.eftPart);UnityEngine-Debug.1.og(RightPart);*/if(find-verb!«*")FindVerb=fnd-verb;if(1.eftPart(="")FindSubject=SearChNoUn(1.eftPart>找2词if(RightPartI="")FindObjectSearChNOUn(RightPart);找名山JUnityEngine1Debug1.og(FindSubject);UnityEngine.Debug.1.og(FindVerb);UnityEngine.Debug1.og(FindObject);stringSearchNoun(stringPartSentence)找名词StringjiegUoE"不包含数认(ft是不包含stringFindNoun=要找的名词Intm=noun.1.ength;名词数祖的长度,也就是有多少个名词for(intn=O;n<m;n+)(/eContains函数用于判断包含关系,例如句子和名词的包含关系就是用句子和名词数组的名词,一一比对,来判断是否包含名词n的值从。逐渐增长到名词数如的名词数状假,这样数祖也就经历了所有名词Tif(PartSentence.ContainSmoUnmD)包含(jiegu。="包含";FindNoun=nounn);/找到/名诃)if(jieguo=三"(<1.-)returnFindNoun;)e1.sereturn""解决三个基本问题前面的方法,前句子包含的词句接与词库的词对比,来找主语(名词句喟语动词JJ宾语(名词),会有问逊:第一个何趣:狼猫吃竹子,这句话里你感觉有礴觉有两个名词:熊猫、竹子,但是电肺会找出四个名词:熊猫、熊、猫、竹子.对于第一个问即的解决方法:新找到的长词熊猫)趣靛已找到的短词(熊、猫)°已找到的长词熊猫)吸收新找到的短词(搞、猫)。所以创建一个函数:WordCover<ffi).词语楙(WordBOX)存放这些找到词,以实现海靛和吸收,第二个问题:摊猫科欢森林的竹子,这句话动词抬边句有两个名词,竹子是宾语,而森林不是宾语,因为森林后边有个“的”字.是名词所有格.对于第二个问Sfi的解决方法:找到的名词右边的第一个字符,看它是不是“的”字,如果是"的”字,那么这个名词就不是宾语,找主语也是同理。所以创建一个de函数.第三个问题:“学”字是动词,但是在“学生”这个词里,“学”字就变成名词了,还当动词理解,就会祐,对于第三个问题的解决方法:建立词性辨析表:verbjudge.何性研析表在数据库里,已羟做好了,Iword-co1.Itype-co1.content-co1.|I学IC1.生I*wI压I11I气Iword_co1.type_co1.ContenJCO1.学r1.生压U-rword.co1.:判断这个字是动词还是名词.type_co1.:r1.衣示right1,就是指COntent_co1.的字是WOrd_CO1.的那个字的右边那1个字,也就是“学生”的“生”字。I1.表示Ieft1.,就是指content.co1.的字是word.co1.的那个字的左边僚1个字,也就是“气压”的“气”字.“压”是本身是动词,但左边那个字是“气”字时,“压”字就变为名词了,也就是名词“气压”的“压二I是字母I的小耳,不是数字IoI1.是两个不同的字符。所以创建一个VerbJUdge函数.usingSystem.Co1.1.ect1.ons;usingSystem.Co1.1.ections.Ge11eric;usingUnityEngine;usingUnityEngine.UI;usingTMPro;usingMono.Data.Sq1.ite;pub1.icc1.asssq1.iten:MonoBehaviour(