陈一文478 2026-03-01 03:07 采纳率: 91.7%
浏览 7
已结题

调用组词,成语的js有现成的吗?

我想在网页调用组词和成语的数据库,请问哪里有现成的?要稳定的,速度快的

  • 写回答

2条回答 默认 最新

  • 极客车云 2026-03-01 07:00
    关注

    在网页中实现组词、成语查询功能,有几种成熟稳定的方案,从免费API到自建服务都有,我会按「易用性/稳定性」排序推荐,附完整调用代码和优缺点分析:


    一、方案1:免费公开API(快速上手,零成本)

    适合快速原型开发,无需自己维护数据库,但有调用次数限制

    1. 百度汉语API(推荐)

    百度汉语提供了稳定的成语、组词查询接口,支持HTTPS,速度快

    // 成语查询示例
    async function searchIdiom(word) {
      try {
        // 百度汉语成语接口(需自己抓包确认最新接口格式)
        const response = await fetch(`https://hanyu.baidu.com/s?wd=${encodeURIComponent(word)}&ptype=idiom`);
        const html = await response.text();
        
        // 解析HTML提取成语信息(可使用DOMParser或cheerio)
        const parser = new DOMParser();
        const doc = parser.parseFromString(html, 'text/html');
        const idiomInfo = doc.querySelector('.idiom-detail').innerText;
        return idiomInfo;
      } catch (error) {
        console.error('查询失败:', error);
        return '暂无成语信息';
      }
    }
    
    // 组词查询示例
    async function searchWords(word) {
      const response = await fetch(`https://hanyu.baidu.com/zici/s?wd=${encodeURIComponent(word)}`);
      const html = await response.text();
      const doc = new DOMParser().parseFromString(html, 'text/html');
      const words = Array.from(doc.querySelectorAll('.word-list li')).map(item => item.innerText);
      return words;
    }
    
    // 调用示例
    searchIdiom('一心一意').then(console.log);
    searchWords('山').then(console.log);
    

    2. 聚合数据API(需要申请Key)

    有免费额度,接口规范,适合小型项目

    // 成语查询(需先去聚合数据申请免费API Key)
    async function searchIdiomByJuhe(word) {
      const API_KEY = '你的API_KEY';
      const response = await fetch(`http://v.juhe.cn/chengyu/query?key=${API_KEY}&word=${encodeURIComponent(word)}`);
      const data = await response.json();
      if (data.error_code === 0) {
        return data.result;
      } else {
        return '查询失败: ' + data.reason;
      }
    }
    

    二、方案2:开源本地数据库(完全可控,无调用限制)

    适合需要高稳定性、无调用限制的场景,需自己部署数据库

    1. 开源成语/汉字数据库

    推荐使用 GitHub 上的开源数据集:

    • 成语数据库:chinese-idioms(包含10万+成语,带解释、拼音)
    • 汉字组词数据库:chinese-xinhua(包含3万+汉字的组词)

    2. 本地部署示例(使用IndexedDB或JSON文件)

    // 1. 先将开源数据库转为JSON文件(比如idioms.json)
    // 2. 加载本地JSON文件查询
    let idiomsData = [];
    
    // 预加载成语数据
    async function loadIdiomsData() {
      const response = await fetch('/data/idioms.json');
      idiomsData = await response.json();
      console.log('成语数据加载完成,共', idiomsData.length, '条');
    }
    
    // 成语查询
    function searchIdiomLocal(word) {
      return idiomsData.filter(idiom => 
        idiom.word.includes(word) || idiom.pinyin.includes(word)
      );
    }
    
    // 组词查询(假设有words.json数据库)
    let wordsData = [];
    async function loadWordsData() {
      wordsData = await (await fetch('/data/words.json')).json();
    }
    
    function searchWordsLocal(char) {
      return wordsData.filter(item => item.char === char).map(item => item.words);
    }
    
    // 页面加载时预加载数据
    window.onload = async () => {
      await Promise.all([loadIdiomsData(), loadWordsData()]);
      // 测试查询
      console.log(searchIdiomLocal('心'));
      console.log(searchWordsLocal('山'));
    };
    

    三、方案3:商业API(企业级稳定)

    适合生产环境,SLA保障,无调用限制

    调用示例(阿里云):

    // 阿里云成语查询(需申请AccessKey)
    const CryptoJS = require('crypto-js'); // 需引入crypto-js库
    
    async function searchIdiomAliyun(word) {
      const accessKeyId = '你的AccessKeyId';
      const accessKeySecret = '你的AccessKeySecret';
      const url = 'https://nlp.cn-shanghai.aliyuncs.com';
      
      // 生成签名(阿里云签名逻辑复杂,建议使用官方SDK)
      // 推荐直接使用官方JavaScript SDK:https://github.com/aliyun/openapi-core-nodejs-sdk
      const result = await aliyunNlpClient.callApi({
        Action: 'GetIdiom',
        Version: '2021-04-15',
        Word: word
      });
      return result;
    }
    

    四、各方案对比

    方案类型优点缺点适用场景
    免费公开API零成本、快速上手有调用限制、可能被封IP原型开发、小型项目
    本地开源数据库完全可控、无调用限制、速度极快需要自己维护数据、占用服务器资源中大型项目、对稳定性要求高
    商业API稳定可靠、SLA保障、专业技术支持付费、成本较高企业级应用、生产环境

    五、注意事项

    1. 跨域问题:如果使用第三方API,需要配置CORS或使用代理,本地开发可以用:
      # 使用Node.js代理
      npm install -g http-proxy-middleware
      
    2. 性能优化:本地数据库建议使用IndexedDB或WebAssembly加速查询
    3. 数据更新:开源数据库需要定期同步最新版本,商业API会自动维护
    4. 法律合规:使用商业API需遵守服务商的使用条款,开源数据需注意版权

    如果只是做小型应用,推荐先使用百度汉语API快速验证需求,后期再考虑迁移到本地数据库或商业API。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 3月1日