先利用中科院计算所的ICTCLAS汉语词法分析系统对给定的诗句进展分词。对“铜雀春深锁二乔”分词为“铜雀/春/深/锁/二乔”.
用全唐诗作为语料语料库。
对步骤1分好的词进展训练:在全唐诗语料库中找出消灭词〔如“寒
水”〕的对句。然后再对句中找出该词〔如“愁〕”对句对应位置的词
〔称之为“候选词,”如“梦〕”,并统计消灭了多少次;选出频率最高
的10个〔数量可以换〕候选词。
将步骤1中分好的全部的词,通过步骤3找出的候选词,进展频率统计。及“酒”对应“诗”的概率为250/(250+166+…+56).将全部的候选词及其频率存入HashMap中。
为了提高效率需要缩小训练语料库:再次遍历全唐诗,将含有HashMap中的候选词的并且候选词消灭的位置和给定诗句消灭的位置一样的诗句写入文件“首次选择结果.txt”中。
由于“首次选择结果.txt”中的每句诗都在测试诗句对应位置含有高频候选词,理论上每一句都是有可能,下面的工作就是找到对应最或许率的诗句。
遍历“首次选择结果.txt”全部的诗句,对每一句同样用中科院分词系统进展分词。定义sum变量存储当前诗句被选中概率,将分词每一个词中取HashMap中查找,假设不在sum什么也不做,相当加零,假设在高频词汇中,怎sum加上该词的概率。最终选出概率最大的诗句作为最优诗句,也就是选中的诗句。如“烟霞交隐映”的概率最大对应诗句为“日月不想待。”
将选中的诗句,作为给定诗句,重复步骤1-7直到集句到达要求为止。
但是假设只是不加限制的按概率最大来求解,也不好。由于如“雨”对应候选词“风”的频率远大于其他。“人”甚至只要重复消灭,不管本身多么糟糕,概率都很大而被选中。所以,需要加以限定:看给定的诗句中,重复消灭的词有多少,要是候选诗句重复词和给定的诗句不全都,那么就舍弃。
由于集诗系统要求集多句,而一手诗歌中一般是不会消灭重复的词语的,所以我给将给定的诗句和选定的诗句用中科院分词系统分好词之后参加set集合中,以后连续进展选概率最大的诗句的时候,只要诗句中含有set集合中的词语,就不考虑。
不加set限定的运行结果:
加上set限定之后
候选词也不行越多越好,同样给定“枫叶芦花并客舟,”置为10,运行结果:
将候选词设
比照上面效果其实要差很多。所以本程序需要手工修改候选码参数来调整集诗效果。
运行:在Test.java中运行即可。要修改参数也直接在Test.java中的mian函数中简洁修改便可。生成结果可以在工程名目文件“集诗系统文件”中查看。
候选词数目:10;集句长度:3
候选词数目:10;集句长度:3
候选词数目:3;集句长度:8
环境:jdk:1.70版本
EclipseSDK版本
“GuShiSystem.RAR”是完整的工程,执行的可以在eclipse中直接导入工程,但是要留意的是需要修改包ICTCLAS.AC下面的ICTCLAS.java文件的path(改成工程路径)。如:我的在path=“F:\\WorkSpace\\JAVA\\GuShiSystem“;