在Freenom注册了几个免费域名,域名必须正常使用状态才可以免费使用,否则有可能被官方强制收回。所以就用Scala写了这个小项目,用来生成符合Hexo标准的Markdown文章,使用Hexo渲染层HTML后,把网站文件上传到Github并绑定域名,这样就算域名是正常使用了。
首先从网上找了一个词典的文件,可以看到这个词典文件每一行是一个词,有三列,分别是词语,拼音,编号。我们需要的仅仅是词,拼音和编号可以抛弃不用。
实际思路是,把每一行放在作为一个元素放在一个List中,然后单个元素按照’\t’分隔,取第一个元素,其他的丢弃。这样就组成了一个List词典,只需要随机取用即可。实现代码如下:
1 2 3 4 5 6 7 8
| val stream = TitleMock.getClass.getResourceAsStream("/1.txt")
val list: List[String] = Source.fromInputStream(stream)("UTF8").getLines.toList.map { f => { f.split("\t").toList.head } }
|
既然是文言文那肯定离不开之乎者也这类的虚词,找了一些虚词放到数组中:
1
| val array: Array[String] = Array("而", "何", "乎", "乃", "其", "且", "然", "若", "所", "为", "焉", "也", "以", "矣", "于", "之", "则", "者", "与", "欤", "因", "兮")
|
把实词和虚词拼接,组成句子,句子组成段落,段落组成文章。关键实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| for (j <- 1 to para) { var article: String = "" for (i <- 1 to 100) {
article += list(math.abs(Random.nextInt) % shiSize) + array(math.abs(Random.nextInt) % xuSize) if (i != 100 && math.abs(Random.nextInt) % 2 == 0) { if (math.abs(Random.nextInt) % 3 == 0) article += "," else article += "。" } } article = prefix + article + suffix + "\n\n" cont += article }
|
生成文章的标题:
1 2 3 4 5 6 7 8 9 10
| val array: Array[String] = Array("论", "行", "说", "颂", "学", "经", "序", "辞", "铭", "记", "赋")
val xuSize = array.length
var title: String = "" while (title.length == 0 || title.length >= 3) { title = list(math.abs(Random.nextInt) % shiSize) } title + array(math.abs(Random.nextInt) % xuSize)
|
标题和文章都有了,那么拼接在一起写入一个文本文件中即可,引入Java的IO的三个类,java.io.{File, FileOutputStream, OutputStreamWriter},关键实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| val ran = Random.nextInt() val year = 1980 + math.abs(ran % 39) val month = 1 + math.abs(ran % 12) val day = 1 + math.abs(ran % 28)
val now = LocalDate.of(year, month, day) + " " + LocalTime.now().toString.dropRight(4)
val pre = "---\n" + "title: " + title + "\ndate: " + now + "\ntags: \n" + "---\n\n"
val myPath: File = new File("./output") if (!myPath.exists()){ myPath.mkdir() }
val fos : FileOutputStream = new FileOutputStream(s"./$myPath/$title.md") val osw : OutputStreamWriter = new OutputStreamWriter(fos, "UTF-8")
osw.write(pre + totalArticle) osw.close() fos.close()
|
具体生成文章效果:
使用Hexo渲染后(具体实现查考Hexo官网),网站代码放到Github并开启gh-pages服务,预览文章 https://impn.github.io/ClassicalChineseGenerator/
到此为止,一个完整的文言文网站已经生成。
项目已经开源,完整代码放在Github,项目地址 ,可以直接下载在Release页面下载Jar包使用。
具体使用方法:
1
| javr -jar ClassicalChineseGenerator-0.1.1.jar 10
|
后面的数值参数是生成10篇文章,如果不加参数默认是生成1篇。