cnpoems
Version:
中国 唐诗宋词(诗歌,论语,诗经等) (Chinese poems util)
130 lines (121 loc) • 4.38 kB
JavaScript
import songciData from 'chinese-poetry/chinese-poetry/ci/宋词三百首.json';
import tangshiData from 'chinese-poetry/chinese-poetry/json/唐诗三百首.json';
import songAuthorData from 'chinese-poetry/chinese-poetry/json/authors.song.json';
import tangAuthorData from 'chinese-poetry/chinese-poetry/json/authors.tang.json';
// import songciData from 'chinese-poetry/chinese-poetry/ci/宋词三百首.json' assert { type: "json" }; // jest
// import tangshiData from 'chinese-poetry/chinese-poetry/json/唐诗三百首.json' assert { type: "json" }; // jest
// import songAuthorData from 'chinese-poetry/chinese-poetry/json/authors.song.json' assert { type: "json" }; // jest
// import tangAuthorData from 'chinese-poetry/chinese-poetry/json/authors.tang.json' assert { type: "json" }; // jest
import cnchar from 'cnchar';
import trad from 'cnchar-trad';
import { nanoid } from 'nanoid';
import _ from 'loadsh';
cnchar.use(trad);
// cnchar.convert.simpleToTrad(string); // 简体 => 繁体
// cnchar.convert.simpleToSpark(string); // 简体 => 火星文
// cnchar.convert.tradToSimple(string); // 繁体 => 简体
// cnchar.convert.tradToSpark(string); // 繁体 => 火星文
// cnchar.convert.sparkToSimple(string); // 火星文 => 简体
// cnchar.convert.sparkToTrad(string); // 火星文 => 繁体
// string.convertSimpleToTrad();
// string.convertSimpleToSpark();
// string.convertTradToSimple();
// string.convertTradToSpark();
// string.convertSparkToSimple();
// string.convertSparkToTrad();
const songcis = _.cloneDeep(songciData);
const tangshis = _.cloneDeep(tangshiData);
const songciAuthors = _.cloneDeep(songAuthorData);
const tangsiAuthors = _.cloneDeep(tangAuthorData);
const songciList = [...songcis].map(item => {
const author = [...songciAuthors].filter(aItem => aItem.name.convertTradToSimple() === item.author)
item.info = author.length ? author[0]: {
desc: '信息不详,未采集到',
name: item.author,
id: nanoid()
}
const pgIndex = _.random(item.paragraphs.length - 1)
item.daySentence = item.paragraphs.filter((pg, pi) => pgIndex === pi)[0]
return item
})
const tangshiList = [...tangshis].map(item => {
const author = [...tangsiAuthors].filter(aItem => aItem.name.convertTradToSimple() === item.author.convertTradToSimple())
item.info = author.length ? author[0]: {
desc: '信息不详,未采集到',
name: item.author,
id: nanoid()
}
const pgIndex = _.random(item.paragraphs.length - 1)
item.daySentence = item.paragraphs.filter((pg, pi) => pgIndex === pi)[0]
return item
})
const TradToSimpleFn = (data) => {
if (typeof data !== 'object') {
return data.convertTradToSimple()
}
if (!_.isArray(data)) {
for (const key in data) {
const val = data[key];
if (key!=='id') {
data[key] = TradToSimpleFn(val)
}
}
} else {
data = data.map(item => {
return TradToSimpleFn(item)
})
}
return data
}
const SimpleToTradFn = (data) => {
if (typeof data !== 'object') {
return data.convertSimpleToTrad()
}
if (!_.isArray(data)) {
for (const key in data) {
const val = data[key];
if (key!=='id') {
data[key] = SimpleToTradFn(val)
}
}
} else {
data = data.map(item => {
return SimpleToTradFn(item)
})
}
return data
}
const tangshiSimpleList = TradToSimpleFn(_.cloneDeep(tangshiList));
const tangshiTradList = SimpleToTradFn(_.cloneDeep(tangshiList));
const songciTradList = SimpleToTradFn(_.cloneDeep(songciList));
const getRandomItems = (arr, n = 10) => {
const shuffled = _.cloneDeep(arr);
let i = shuffled.length;
const result = [];
while (i-- && n > 0) {
const randomIndex = Math.floor(Math.random() * (i + 1));
[shuffled[i], shuffled[randomIndex]] = [shuffled[randomIndex], shuffled[i]];
result.push(shuffled[i]);
n--;
}
return result;
}
const songciRandomList = (n) => {
return getRandomItems(songciList, n)
}
const tangshiRandomList = (n) => {
return getRandomItems(tangshiSimpleList, n)
}
var info = {
songciAuthors,
tangsiAuthors,
songciList,
songciTradList,
tangshiList,
tangshiSimpleList,
tangshiTradList,
getRandomItems,
songciRandomList,
tangshiRandomList,
}
export { info as default} ;