[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-winkjs--wink-nlp":3,"tool-winkjs--wink-nlp":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",154349,2,"2026-04-13T23:32:16",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":78,"owner_website":79,"owner_url":80,"languages":81,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":94,"env_os":95,"env_gpu":96,"env_ram":97,"env_deps":98,"category_tags":105,"github_topics":108,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":127,"updated_at":128,"faqs":129,"releases":160},7329,"winkjs\u002Fwink-nlp","wink-nlp","Developer friendly Natural Language Processing ✨","wink-nlp 是一款专为开发者设计的 JavaScript 自然语言处理（NLP）库，旨在让文本分析应用的开发变得更简单、高效。它解决了传统 NLP 工具依赖繁重、部署复杂以及在浏览器端运行困难等痛点，帮助开发者轻松构建从词云生成到关键句提取等各类文本应用。\n\n这款工具特别适合前端工程师、Node.js 开发者以及需要在网页或轻量级环境中集成 NLP 功能的技术人员。其核心亮点在于极致的轻量化与高性能：代码库压缩后仅约 10KB，且无任何外部依赖，却能以每秒超过 65 万 token 的速度处理文本，即使在低端手机浏览器上也能流畅运行。此外，wink-nlp 原生支持词嵌入（Word Embedding）技术，可将文本转化为数值向量，显著提升语义相似度和文本分类的准确性。凭借对 TypeScript、Deno 及主流浏览器的全面支持，加上接近 100% 的测试覆盖率，wink-nlp 成为构建高可靠性生产级系统的理想选择。","# winkNLP\n\n### [![Build Status](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Factions\u002Fworkflows\u002Fnode.js.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Factions\u002Fworkflows\u002Fnode.js.yml\u002F) [![Coverage Status](https:\u002F\u002Fcoveralls.io\u002Frepos\u002Fgithub\u002Fwinkjs\u002Fwink-nlp\u002Fbadge.svg?branch=master)](https:\u002F\u002Fcoveralls.io\u002Fgithub\u002Fwinkjs\u002Fwink-nlp?branch=master) [![Known Vulnerabilities](https:\u002F\u002Fsnyk.io\u002Ftest\u002Fgithub\u002Fwinkjs\u002Fwink-nlp\u002Fbadge.svg)](https:\u002F\u002Fsnyk.io\u002Ftest\u002Fgithub\u002Fwinkjs\u002Fwink-nlp) [![CII Best Practices](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_50ccde67b228.png)](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fprojects\u002F6035) [![Gitter](https:\u002F\u002Fimg.shields.io\u002Fgitter\u002Froom\u002Fnwjs\u002Fnw.js.svg)](https:\u002F\u002Fgitter.im\u002Fwinkjs\u002FLobby) [![Follow on Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fwinkjs_org?style=social)](https:\u002F\u002Ftwitter.com\u002Fwinkjs_org)\n\n## Developer friendly Natural Language Processing ✨\n[\u003Cimg align=\"right\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_a7b9dce0558d.png\" width=\"100px\" >](https:\u002F\u002Fwinkjs.org\u002F)\n\nWinkNLP is a JavaScript library for Natural Language Processing (NLP). Designed specifically to make development of NLP applications **easier** and **faster**, winkNLP is optimized for the right balance of performance and accuracy. \n\nIts [word embedding](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-embeddings-sg-100d?tab=readme-ov-file#wink-embeddings-sg-100d) support unlocks deeper text analysis. Represent words and text as numerical vectors with ease, bringing higher accuracy in tasks like semantic similarity, text classification, and beyond – even within a **[browser](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-use-word-embedding-with-winknlp)**.\n\nIt is built ground up with [no external dependency](https:\u002F\u002Fsnyk.io\u002Ftest\u002Fgithub\u002Fwinkjs\u002Fwink-nlp?tab=dependencies) and has a [lean code base of ~10Kb minified & gzipped](https:\u002F\u002Fbundlephobia.com\u002Fpackage\u002Fwink-nlp). A test coverage of [~100%](https:\u002F\u002Fcoveralls.io\u002Fgithub\u002Fwinkjs\u002Fwink-nlp?branch=master) and compliance with the [Open Source Security Foundation best practices](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fen\u002Fprojects\u002F6035) make winkNLP the ideal tool for building production grade systems with confidence.\n\nWinkNLP with full [Typescript support](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fblob\u002Fmaster\u002Ftypes\u002Findex.d.ts), runs on Node.js, [web browsers](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp#how-to-install-for-web-browser) and [Deno](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp#how-to-run-on-deno).\n\n## Build amazing apps quickly\n| [Wikipedia article timeline](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-timeline-of-a-wiki-article) | [Context aware word cloud](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-create-a-context-aware-word-cloud) | [Key sentences detection](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-key-sentences-in-a-document) |\n| --- | --- | --- |\n| [\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_60818675579e.png\">](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-timeline-of-a-wiki-article)| [\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_84d9c6429d82.png\">](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-create-a-context-aware-word-cloud)|[\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_84af3b5a7a7d.png\">](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-key-sentences-in-a-document)|\n\nHead to  [live examples](https:\u002F\u002Fwinkjs.org\u002Fexamples.html) to explore further.\n\n## Blazing fast\nWinkNLP can easily process large amount of raw text at speeds over **650,000 tokens\u002Fsecond**&nbsp; on a M1 Macbook Pro in both browser and Node.js environments. It even runs smoothly on a low-end smartphone's browser.\n\n| Environment | Benchmarking Command |\n|--- | --- |\n| Node.js | [node benchmark\u002Frun](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Ftree\u002Fmaster\u002Fbenchmark) |\n| Browser | [How to measure winkNLP's speed on browsers?](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-measure-winknlps-speed-on-browsers) |\n\n## Features\nWinkNLP has a [comprehensive natural language processing (NLP) pipeline](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fprocessing-pipeline.html) covering tokenization, sentence boundary detection (sbd), negation handling, sentiment analysis, part-of-speech (pos) tagging, named entity recognition (ner), custom entities recognition (cer). It offers a rich feature set:\n\n\u003Ctable>\n\u003Ctr>\u003Ctd width=\"330px;\">🐎 Fast, lossless & multilingual tokenizer \u003C\u002Ftd>\u003Ctd>For example, the multilingual text string \u003Cb>\u003Ccode style=\"font-size: 0.9em\">\"¡Hola! नमस्कार! Hi! Bonjour chéri\"\u003C\u002Fcode>\u003C\u002Fb>  is tokenized as \u003Ccode style=\"font-size: 0.9em\">[\"¡\", \"Hola\", \"!\", \"नमस्कार\", \"!\", \"Hi\", \"!\", \"Bonjour\", \"chéri\"]\u003C\u002Fcode>.  The tokenizer processes text at a speed close to \u003Cb>4 million\u003C\u002Fb> tokens\u002Fsecond on a M1 MBP's browser.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>✨ Developer friendly and intuitive \u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fgetting-started.html\">API\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>With winkNLP, process any text using a simple, declarative syntax; most \u003Ca href=\"https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-build-a-naive-wikification-tool?collection=@winkjs\u002Fwinknlp-recipes\">live examples\u003C\u002Fa> have \u003Cb>30-40\u003C\u002Fb> lines of code.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>🖼 Best-in-class \u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fvisualizing-markup.html\">text visualization\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>Programmatically \u003Cb>\u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fmarkup.html\">mark\u003C\u002Fa>\u003C\u002Fb> tokens, sentences, entities, etc. using HTML mark or any other tag of your choice.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>♻️ Extensive text processing features\u003C\u002Ftd>\u003Ctd>Remove and\u002For retain tokens with specific attributes such as part-of-speech, named entity type, token type, stop word, shape and many more; compute Flesch reading ease score; generate n-grams; normalize, lemmatise or stem. Checkout how with the right kind of text preprocessing, even \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-naive-bayes-text-classifier#readme\">Naive Bayes classifier\u003C\u002Fa> achieves \u003Cb>impressive (≥90%)\u003C\u002Fb> accuracy in sentiment analysis and chatbot intent classification tasks.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>🔠 Pre-trained \u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Flanguage-models.html\">language models\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>Compact sizes starting from \u003Ca href=\"https:\u002F\u002Fbundlephobia.com\u002Fpackage\u002Fwink-eng-lite-web-model\">~1MB (minified & gzipped)\u003C\u002Fa> – reduce model loading time drastically down to ~1 second on a 4G network.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>↗️ \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-embeddings-sg-100d?tab=readme-ov-file#wink-embeddings-sg-100d\">Word vectors\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>100-dimensional English word embeddings for over 350K English words, which are optimized for winkNLP. Allows easy computation of sentence or document embeddings.\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### Utilities & Tools 💼\n- [BM25 Vectorizer](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fbm25-vectorizer.html)\n- [Similarity methods](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fsimilarity.html) – Cosine, Tversky, Sørensen-Dice, Otsuka-Ochiai\n- [its & as helpers](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fits-as-helper.html) to get Bag of Words, Frequency table, Lemma, Stem, Stop word removal, Negation handling and many more.\n\n\n## Documentation\n- [Concepts](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fgetting-started.html) — everything you need to know to get started.\n- [API Reference](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fread-doc.html) — explains usage of APIs with examples.\n- [Change log](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fblob\u002Fmaster\u002FCHANGELOG.md) — version history along with the details of breaking changes, if any.\n- [Examples](https:\u002F\u002Fwinkjs.org\u002Fexamples.html) — live examples with code to give you a head start.\n\n## Installation\n\nUse [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fwink-nlp) install:\n\n```shell\nnpm install wink-nlp --save\n```\n\nIn order to use winkNLP after its installation, you also need to install a language model according to the node version used. The table below outlines the version specific installation command:\n\n| Node.js Version |Installation |\n| --- | --- |\n| 16 or 18 | `npm install wink-eng-lite-web-model --save` |\n| 14 or 12 | `node -e \"require('wink-nlp\u002Fmodels\u002Finstall')\"` |\n\nThe [wink-eng-lite-web-model](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-eng-lite-web-model) is designed to work with Node.js version 16 or 18. It can also work on browsers as described in the next section. This is the **recommended** model.\n\nThe second command installs the [wink-eng-lite-model](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-eng-lite-model), which works with Node.js version 14 or 12. \n\n### How to configure TypeScript project\n\nEnable [`esModuleInterop`](https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#esModuleInterop) and [`allowSyntheticDefaultImports`](https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#allowSyntheticDefaultImports) in the `tsconfig.json` file:\n\n```\n\"compilerOptions\": {\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    ...\n}\n```\n\n### How to install for Web Browser\nIf you’re using winkNLP in the browser use the [wink-eng-lite-web-model](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fwink-eng-lite-web-model). Learn about its installation and usage in our [guide to using winkNLP in the browser](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fwink-nlp-in-browsers.html). Explore **[winkNLP recipes](https:\u002F\u002Fobservablehq.com\u002Fcollection\u002F@winkjs\u002Fwinknlp-recipes)** on [Observable](https:\u002F\u002Fobservablehq.com\u002F) for live browser based examples.\n\n### How to run on [Deno](https:\u002F\u002Fdeno.land\u002F)\nFollow the [example on replit](https:\u002F\u002Freplit.com\u002F@sanjayaksaxena\u002Fwink-nlp-deno-example#index.ts).\n\n### Get started\nHere is the \"Hello World!\" of winkNLP:\n\n```javascript\n\u002F\u002F Load wink-nlp package.\nconst winkNLP = require( 'wink-nlp' );\n\u002F\u002F Load english language model.\nconst model = require( 'wink-eng-lite-web-model' );\n\u002F\u002F Instantiate winkNLP.\nconst nlp = winkNLP( model );\n\u002F\u002F Obtain \"its\" helper to extract item properties.\nconst its = nlp.its;\n\u002F\u002F Obtain \"as\" reducer helper to reduce a collection.\nconst as = nlp.as;\n \n\u002F\u002F NLP Code.\nconst text = 'Hello   World🌎! How are you?';\nconst doc = nlp.readDoc( text );\n \nconsole.log( doc.out() );\n\u002F\u002F -> Hello   World🌎! How are you?\n \nconsole.log( doc.sentences().out() );\n\u002F\u002F -> [ 'Hello   World🌎!', 'How are you?' ]\n \nconsole.log( doc.entities().out( its.detail ) );\n\u002F\u002F -> [ { value: '🌎', type: 'EMOJI' } ]\n \nconsole.log( doc.tokens().out() );\n\u002F\u002F -> [ 'Hello', 'World', '🌎', '!', 'How', 'are', 'you', '?' ]\n \nconsole.log( doc.tokens().out( its.type, as.freqTable ) );\n\u002F\u002F -> [ [ 'word', 5 ], [ 'punctuation', 2 ], [ 'emoji', 1 ] ]\n```\nExperiment with winkNLP on [RunKit](https:\u002F\u002Fnpm.runkit.com\u002Fwink-nlp).\n\n## Speed & Accuracy\nThe [winkNLP](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002F) processes raw text at **~650,000 tokens per second** with its [wink-eng-lite-web-model](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-eng-lite-web-model), when [benchmarked](https:\u002F\u002Fgithub.com\u002Fbestiejs\u002Fbenchmark.js) using \"Ch 13 of Ulysses by James Joyce\" on a M1 Macbook Pro machine with 16GB RAM. The processing included the entire NLP pipeline — tokenization, sentence boundary detection, negation handling, sentiment analysis, part-of-speech tagging, and named entity extraction. This speed is way ahead of the prevailing speed benchmarks.\n\nThe benchmark was conducted on [Node.js versions 16, and 18](https:\u002F\u002Fnodejs.org\u002Fen\u002Fabout\u002Freleases\u002F).\n\nIt pos tags a subset of WSJ corpus with an accuracy of **~95%** — this includes *tokenization of raw text prior to pos tagging*. The present state-of-the-art is at ~97% accuracy but at lower speeds and is generally computed using gold standard pre-tokenized corpus.\n\nIts general purpose sentiment analysis delivers a [f-score](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FF1_score) of **~84.5%**, when validated using Amazon Product Review [Sentiment Labelled Sentences Data Set](https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002F00331\u002F) at [UCI Machine Learning Repository](https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Findex.php). The current benchmark accuracy for **specifically trained** models can range around 95%.\n\n## Memory Requirement\nWink NLP delivers this performance with the minimal load on RAM. For example, it processes the entire [History of India Volume I](https:\u002F\u002Fen.wikisource.org\u002Fwiki\u002FHistory_of_India\u002FVolume_1) with a total peak memory requirement of under **80MB**. The book has around 350 pages which translates to over 125,000 tokens.\n\n\n## Need Help?\n\n### Usage query 👩🏽‍💻\nPlease ask at [Stack Overflow](https:\u002F\u002Fstackoverflow.com\u002F) or discuss at [Wink JS GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fdiscussions) or chat with us at [Wink JS Gitter Lobby](https:\u002F\u002Fgitter.im\u002Fwinkjs\u002FLobby).\n\n### Bug report 🐛\nIf you spot a bug and the same has not yet been reported, raise a new [issue](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues) or consider fixing it and sending a PR.\n\n### New feature 🌟\nLooking for a new feature, request it via the [new features & ideas](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fdiscussions\u002Fcategories\u002Fnew-features-ideas) discussion forum  or consider becoming a [contributor](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md).\n\n\n## About winkJS\n[WinkJS](https:\u002F\u002Fwinkjs.org\u002F) is a family of open source packages for **Natural Language Processing**, **Machine Learning**, and **Statistical Analysis** in NodeJS. The code is **thoroughly documented** for easy human comprehension and has a **test coverage of ~100%** for reliability to build production grade solutions.\n\n## Copyright & License\n\n**Wink NLP** is copyright 2017-25 [GRAYPE Systems Private Limited](https:\u002F\u002Fgraype.in\u002F).\n\nIt is licensed under the terms of the MIT License.\n","# winkNLP\n\n### [![构建状态](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Factions\u002Fworkflows\u002Fnode.js.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Factions\u002Fworkflows\u002Fnode.js.yml\u002F) [![覆盖率状态](https:\u002F\u002Fcoveralls.io\u002Frepos\u002Fgithub\u002Fwinkjs\u002Fwink-nlp\u002Fbadge.svg?branch=master)](https:\u002F\u002Fcoveralls.io\u002Fgithub\u002Fwinkjs\u002Fwink-nlp?branch=master) [![已知漏洞](https:\u002F\u002Fsnyk.io\u002Ftest\u002Fgithub\u002Fwinkjs\u002Fwink-nlp\u002Fbadge.svg)](https:\u002F\u002Fsnyk.io\u002Ftest\u002Fgithub\u002Fwinkjs\u002Fwink-nlp) [![CII 最佳实践](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_50ccde67b228.png)](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fprojects\u002F6035) [![Gitter](https:\u002F\u002Fimg.shields.io\u002Fgitter\u002Froom\u002Fnwjs\u002Fnw.js.svg)](https:\u002F\u002Fgitter.im\u002Fwinkjs\u002FLobby) [![关注 Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fwinkjs_org?style=social)](https:\u002F\u002Ftwitter.com\u002Fwinkjs_org)\n\n## 开发者友好的自然语言处理 ✨\n[\u003Cimg align=\"right\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_a7b9dce0558d.png\" width=\"100px\" >](https:\u002F\u002Fwinkjs.org\u002F)\n\nWinkNLP 是一个用于自然语言处理（NLP）的 JavaScript 库。它专为使 NLP 应用程序的开发更加 **简单** 和 **快速** 而设计，同时在性能与准确度之间实现了最佳平衡。\n\n其对 **词嵌入** 的支持（[wink-embeddings-sg-100d](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-embeddings-sg-100d?tab=readme-ov-file#wink-embeddings-sg-100d)）能够解锁更深层次的文本分析能力。您可以轻松地将单词和文本表示为数值向量，在语义相似性、文本分类等任务中获得更高的准确性——甚至可以直接在 **[浏览器](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-use-word-embedding-with-winknlp)** 中使用。\n\n该库从零开始构建，**没有任何外部依赖**（[Snyk 测试结果](https:\u002F\u002Fsnyk.io\u002Ftest\u002Fgithub\u002Fwinkjs\u002Fwink-nlp?tab=dependencies)），并且拥有一个 **精简的代码库，压缩后仅约 10KB**（[BundlePhobia](https:\u002F\u002Fbundlephobia.com\u002Fpackage\u002Fwink-nlp)）。此外，测试覆盖率接近 **100%**（[Coveralls](https:\u002F\u002Fcoveralls.io\u002Fgithub\u002Fwinkjs\u002Fwink-nlp?branch=master)），并符合 **开源安全基金会的最佳实践**（[CII 最佳实践](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fen\u002Fprojects\u002F6035)），使得 WinkNLP 成为构建生产级系统的理想工具，让您充满信心。\n\nWinkNLP 完全支持 **TypeScript**（[类型定义文件](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fblob\u002Fmaster\u002Ftypes\u002Findex.d.ts)），可在 Node.js、**Web 浏览器**（[如何在浏览器中安装](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp#how-to-install-for-web-browser)）以及 **Deno**（[如何在 Deno 中运行](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp#how-to-run-on-deno)）环境中运行。\n\n## 快速构建精彩应用\n| [维基百科文章时间线](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-timeline-of-a-wiki-article) | [上下文感知词云](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-create-a-context-aware-word-cloud) | [关键句子检测](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-key-sentences-in-a-document) |\n| --- | --- | --- |\n| [\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_60818675579e.png\">](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-timeline-of-a-wiki-article)| [\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_84d9c6429d82.png\">](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-create-a-context-aware-word-cloud)|[\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_readme_84af3b5a7a7d.png\">](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-key-sentences-in-a-document)|\n\n更多示例请访问 [在线演示](https:\u002F\u002Fwinkjs.org\u002Fexamples.html)。\n\n## 极速运行\nWinkNLP 可以轻松处理大量原始文本，在 M1 MacBook Pro 上，无论是在浏览器还是 Node.js 环境中，都能达到 **每秒超过 65 万个 token** 的处理速度。即使在低端智能手机的浏览器上，它也能流畅运行。\n\n| 环境 | 基准测试命令 |\n|--- | --- |\n| Node.js | [node benchmark\u002Frun](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Ftree\u002Fmaster\u002Fbenchmark) |\n| 浏览器 | [如何测量 WinkNLP 在浏览器中的速度？](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-measure-winknlps-speed-on-browsers) |\n\n## 功能特性\nWinkNLP 拥有一套 **全面的自然语言处理流水线**（[processing-pipeline](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fprocessing-pipeline.html)），涵盖分词、句子边界检测（SBD）、否定句处理、情感分析、词性标注（POS）、命名实体识别（NER）、自定义实体识别（CER）等功能。它提供了丰富的功能：\n\n\u003Ctable>\n\u003Ctr>\u003Ctd width=\"330px;\">🐎 快速、无损且多语言的分词器\u003C\u002Ftd>\u003Ctd>例如，多语言文本字符串 \u003Cb>\u003Ccode style=\"font-size: 0.9em\">\"¡Hola! नमस्कार! Hi! Bonjour chéri\"\u003C\u002Fcode>\u003C\u002Fb> 会被分词为 \u003Ccode style=\"font-size: 0.9em\">[\"¡\", \"Hola\", \"!\", \"नमस्कार\", \"!\", \"Hi\", \"!\", \"Bonjour\", \"chéri\"]\u003C\u002Fcode>。该分词器在 M1 MBP 的浏览器中，处理速度接近 **400 万个 token\u002F秒**。\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>✨ 开发者友好且直观的 \u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fgetting-started.html\">API\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>使用 WinkNLP，只需简单的声明式语法即可处理任何文本；大多数 \u003Ca href=\"https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-build-a-naive-wikification-tool?collection=@winkjs\u002Fwinknlp-recipes\">实时示例\u003C\u002Fa> 的代码行数仅为 **30–40 行**。\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>🖼 一流的 \u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fvisualizing-markup.html\">文本可视化\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>可以使用 HTML 标记或其他您选择的标签，以编程方式 **\u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fmarkup.html\">标记\u003C\u002Fa>** 词、句子、实体等。\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>♻️ 丰富的文本处理功能\u003C\u002Ftd>\u003Ctd>您可以移除或保留具有特定属性的 token，例如词性、命名实体类型、token 类型、停用词、形状等；计算弗莱施阅读易度分数；生成 n-gram；进行归一化、词形还原或词干提取。通过适当的文本预处理，即使是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-naive-bayes-text-classifier#readme\">朴素贝叶斯分类器\u003C\u002Fa>，在情感分析和聊天机器人意图分类任务中也能达到 **令人印象深刻的（≥90%）** 准确度。\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>🔠 预训练的 \u003Ca href=\"https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Flanguage-models.html\">语言模型\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>模型体积小巧，最小仅约 **1MB（压缩后）**（[BundlePhobia](https:\u002F\u002Fbundlephobia.com\u002Fpackage\u002Fwink-eng-lite-web-model)），能够在 4G 网络下将模型加载时间大幅缩短至约 1 秒。\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>↗️ \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-embeddings-sg-100d?tab=readme-ov-file#wink-embeddings-sg-100d\">词向量\u003C\u002Fa>\u003C\u002Ftd>\u003Ctd>针对超过 35 万种英语词汇提供的 100 维英语词嵌入，专为 WinkNLP 优化。可轻松计算句子或文档的嵌入向量。\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### 工具与实用程序 💼\n- [BM25 向量化器](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fbm25-vectorizer.html)\n- [相似度方法](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fsimilarity.html) – 余弦相似度、特沃斯基系数、索伦森-戴斯系数、大冢-落合系数\n- [its 和 as 辅助函数](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fits-as-helper.html)，用于获取词袋模型、词频表、词元、词干、停用词过滤、否定处理等更多功能。\n\n\n## 文档\n- [概念](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fgetting-started.html) — 您开始使用所需了解的一切。\n- [API 参考](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fread-doc.html) — 通过示例解释 API 的使用方法。\n- [变更日志](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fblob\u002Fmaster\u002FCHANGELOG.md) — 版本历史，包括任何重大变更的详细信息。\n- [示例](https:\u002F\u002Fwinkjs.org\u002Fexamples.html) — 带代码的实时示例，帮助您快速上手。\n\n## 安装\n\n使用 [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fwink-nlp) 进行安装：\n\n```shell\nnpm install wink-nlp --save\n```\n\n在安装 winkNLP 后，您还需要根据所使用的 Node.js 版本安装相应的语言模型。下表列出了特定版本的安装命令：\n\n| Node.js 版本 | 安装命令 |\n| --- | --- |\n| 16 或 18 | `npm install wink-eng-lite-web-model --save` |\n| 14 或 12 | `node -e \"require('wink-nlp\u002Fmodels\u002Finstall')\"` |\n\n[wink-eng-lite-web-model](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-eng-lite-web-model) 专为 Node.js 16 或 18 版本设计。它也可以在浏览器中运行，具体说明见下一节。这是**推荐**使用的模型。\n\n第二条命令会安装 [wink-eng-lite-model](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-eng-lite-model)，适用于 Node.js 14 或 12 版本。\n\n### 如何配置 TypeScript 项目\n\n在 `tsconfig.json` 文件中启用 [`esModuleInterop`](https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#esModuleInterop) 和 [`allowSyntheticDefaultImports`](https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#allowSyntheticDefaultImports)：\n\n```\n\"compilerOptions\": {\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    ...\n}\n```\n\n### 如何在 Web 浏览器中安装\n如果您在浏览器中使用 winkNLP，请使用 [wink-eng-lite-web-model](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fwink-eng-lite-web-model)。请参阅我们的[浏览器中使用 winkNLP 指南](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fwink-nlp-in-browsers.html)，了解其安装和使用方法。您还可以在 [Observable](https:\u002F\u002Fobservablehq.com\u002F) 上探索 **[winkNLP 食谱](https:\u002F\u002Fobservablehq.com\u002Fcollection\u002F@winkjs\u002Fwinknlp-recipes)**，获取基于浏览器的实时示例。\n\n### 如何在 [Deno](https:\u002F\u002Fdeno.land\u002F) 上运行\n请按照 [replit 上的示例](https:\u002F\u002Freplit.com\u002F@sanjayaksaxena\u002Fwink-nlp-deno-example#index.ts) 进行操作。\n\n### 快速入门\n以下是 winkNLP 的“Hello World!”示例：\n\n```javascript\n\u002F\u002F 加载 wink-nlp 包。\nconst winkNLP = require( 'wink-nlp' );\n\u002F\u002F 加载英语语言模型。\nconst model = require( 'wink-eng-lite-web-model' );\n\u002F\u002F 实例化 winkNLP。\nconst nlp = winkNLP( model );\n\u002F\u002F 获取 \"its\" 辅助函数以提取项目属性。\nconst its = nlp.its;\n\u002F\u002F 获取 \"as\" 归约辅助函数以归约集合。\nconst as = nlp.as;\n \n\u002F\u002F NLP 代码。\nconst text = 'Hello   World🌎! How are you?';\nconst doc = nlp.readDoc( text );\n \nconsole.log( doc.out() );\n\u002F\u002F -> Hello   World🌎! How are you?\n \nconsole.log( doc.sentences().out() );\n\u002F\u002F -> [ 'Hello   World🌎!', 'How are you?' ]\n \nconsole.log( doc.entities().out( its.detail ) );\n\u002F\u002F -> [ { value: '🌎', type: 'EMOJI' } ]\n \nconsole.log( doc.tokens().out() );\n\u002F\u002F -> [ 'Hello', 'World', '🌎', '!', 'How', 'are', 'you', '?' ]\n \nconsole.log( doc.tokens().out( its.type, as.freqTable ) );\n\u002F\u002F -> [ [ 'word', 5 ], [ 'punctuation', 2 ], [ 'emoji', 1 ] ]\n```\n您可以在 [RunKit](https:\u002F\u002Fnpm.runkit.com\u002Fwink-nlp) 上体验 winkNLP。\n\n## 速度与准确率\n[winkNLP](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002F) 使用 [wink-eng-lite-web-model](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-eng-lite-web-model) 处理原始文本时，速度可达 **每秒约 65 万个标记**，该测试是在配备 16GB 内存的 M1 MacBook Pro 上，使用詹姆斯·乔伊斯《尤利西斯》第 13 章进行基准测试。整个 NLP 流程——分词、句子边界检测、否定处理、情感分析、词性标注和命名实体识别——均包含在内。这一速度远超当前的主流基准测试结果。\n\n该基准测试是在 [Node.js 16 和 18 版本](https:\u002F\u002Fnodejs.org\u002Fen\u002Fabout\u002Freleases\u002F) 上进行的。\n\n它对 WSJ 语料库的一个子集进行词性标注，准确率为 **约 95%** ——这包括在词性标注之前对原始文本进行分词。目前最先进的技术准确率约为 97%，但速度较慢，且通常基于预先分词的黄金标准语料库进行计算。\n\n其通用情感分析在使用亚马逊产品评论 [情感标签句子数据集](https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002F00331\u002F) 和 [UCI 机器学习存储库](https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Findex.php) 验证时，F1 分数达到 **约 84.5%**。而**专门训练**的模型当前基准准确率可达到约 95%。\n\n## 内存需求\nWink NLP 在提供如此高性能的同时，对内存的占用却非常低。例如，它处理整部 [印度史 第一卷](https:\u002F\u002Fen.wikisource.org\u002Fwiki\u002FHistory_of_India\u002FVolume_1) 时，峰值内存占用始终低于 **80MB**。该书约有 350 页，相当于超过 12.5 万个标记。\n\n\n## 需要帮助吗？\n\n### 使用问题 👩🏽‍💻\n请在 [Stack Overflow](https:\u002F\u002Fstackoverflow.com\u002F) 提问，或在 [Wink JS GitHub 讨论区](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fdiscussions) 讨论，亦可在 [Wink JS Gitter 论坛](https:\u002F\u002Fgitter.im\u002Fwinkjs\u002FLobby) 与我们交流。\n\n### 错误报告 🐛\n如果您发现了一个尚未报告的错误，请提交一个新的 [issue](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues)，或者考虑修复它并提交一个 PR。\n\n### 新功能 🌟\n如果您希望添加新功能，可以通过 [新功能与想法讨论区](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fdiscussions\u002Fcategories\u002Fnew-features-ideas) 提出请求，或考虑成为 [贡献者](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md)。\n\n\n## 关于 winkJS\n[WinkJS](https:\u002F\u002Fwinkjs.org\u002F) 是一组开源软件包，用于在 NodeJS 中进行 **自然语言处理**、**机器学习** 和 **统计分析**。其代码 **文档详尽**，便于人类理解，并且具有 **近 100% 的测试覆盖率**，确保构建生产级解决方案的可靠性。\n\n## 版权与许可\n\n**Wink NLP** 的版权归属 2017–2025 年 [GRAYPE Systems Private Limited](https:\u002F\u002Fgraype.in\u002F)。\n\n它采用 MIT 许可证授权。","# winkNLP 快速上手指南\n\nwinkNLP 是一款专为开发者设计的 JavaScript 自然语言处理（NLP）库。它无外部依赖、体积轻量（压缩后约 10KB），并在 Node.js、浏览器和 Deno 环境中均能高效运行，兼顾了高性能与高准确率。\n\n## 环境准备\n\n*   **运行时环境**：\n    *   **Node.js**: 推荐版本 16 或 18（也可用于 12\u002F14，但模型安装方式不同）。\n    *   **浏览器**: 支持现代主流浏览器。\n    *   **Deno**: 支持 Deno 运行时。\n*   **包管理器**: npm, yarn 或 pnpm。\n*   **TypeScript (可选)**: 若使用 TS，需在 `tsconfig.json` 中启用以下配置：\n    ```json\n    {\n      \"compilerOptions\": {\n        \"esModuleInterop\": true,\n        \"allowSyntheticDefaultImports\": true\n      }\n    }\n    ```\n\n## 安装步骤\n\n### 1. 安装核心库\n在项目目录下执行以下命令安装 winkNLP：\n\n```shell\nnpm install wink-nlp --save\n```\n\n> **国内加速提示**：如遇网络问题，可配置淘宝镜像源：\n> `npm config set registry https:\u002F\u002Fregistry.npmmirror.com`\n\n### 2. 安装语言模型\nwinkNLP 需要配合语言模型使用。请根据你的 Node.js 版本选择对应的安装命令：\n\n*   **Node.js 16 或 18 (推荐)**\n    安装专为 Web 和新版 Node 优化的轻量模型：\n    ```shell\n    npm install wink-eng-lite-web-model --save\n    ```\n\n*   **Node.js 14 或 12**\n    运行以下脚本安装兼容旧版的模型：\n    ```shell\n    node -e \"require('wink-nlp\u002Fmodels\u002Finstall')\"\n    ```\n\n*   **浏览器环境**\n    请确保安装 `wink-eng-lite-web-model`，具体引入方式参考浏览器专用指南。\n\n## 基本使用\n\n以下是一个最简单的\"Hello World\"示例，展示如何初始化引擎、读取文档并提取句子、实体和词频统计。\n\n```javascript\n\u002F\u002F 1. 加载 wink-nlp 核心包\nconst winkNLP = require( 'wink-nlp' );\n\n\u002F\u002F 2. 加载英语语言模型 (根据安装步骤选择的模型名称可能不同)\nconst model = require( 'wink-eng-lite-web-model' );\n\n\u002F\u002F 3. 实例化 winkNLP\nconst nlp = winkNLP( model );\n\n\u002F\u002F 4. 获取辅助工具\n\u002F\u002F its: 用于提取项的属性 (如类型、细节等)\nconst its = nlp.its;\n\u002F\u002F as: 用于归约集合 (如生成频率表、数组等)\nconst as = nlp.as;\n \n\u002F\u002F 5. 开始处理文本\nconst text = 'Hello   World🌎! How are you?';\nconst doc = nlp.readDoc( text );\n \n\u002F\u002F 输出原始文档\nconsole.log( doc.out() );\n\u002F\u002F -> Hello   World🌎! How are you?\n \n\u002F\u002F 输出句子列表\nconsole.log( doc.sentences().out() );\n\u002F\u002F -> [ 'Hello   World🌎!', 'How are you?' ]\n \n\u002F\u002F 输出命名实体及其详细信息\nconsole.log( doc.entities().out( its.detail ) );\n\u002F\u002F -> [ { value: '🌎', type: 'EMOJI' } ]\n \n\u002F\u002F 输出分词列表\nconsole.log( doc.tokens().out() );\n\u002F\u002F -> [ 'Hello', 'World', '🌎', '!', 'How', 'are', 'you', '?' ]\n \n\u002F\u002F 输出词性类型及其频率统计表\nconsole.log( doc.tokens().out( its.type, as.freqTable ) );\n\u002F\u002F -> [ [ 'word', 5 ], [ 'punctuation', 2 ], [ 'emoji', 1 ] ]\n```\n\n你可以直接在 [RunKit](https:\u002F\u002Fnpm.runkit.com\u002Fwink-nlp) 上在线尝试上述代码。","某初创电商团队需要在用户浏览器端实时分析海量商品评论，以提取关键情感倾向并生成动态词云，从而辅助运营人员快速洞察用户反馈。\n\n### 没有 wink-nlp 时\n- 前端无法直接处理复杂文本，必须将评论数据回传至后端服务器进行 NLP 分析，导致网络延迟高且服务器负载沉重。\n- 引入传统的重型 NLP 库会使网页包体积激增，严重影响首屏加载速度，低配手机用户甚至无法打开页面。\n- 缺乏高效的词向量支持，难以准确识别“便宜但质量差”与“贵但值得”等具有细微语义差别的评论，分类准确率低下。\n- 开发流程繁琐，需同时维护前后端两套自然语言处理逻辑，且难以保证算法一致性。\n\n### 使用 wink-nlp 后\n- 利用 wink-nlp 无外部依赖且仅 10KB 的轻量特性，直接在浏览器端完成分词与情感分析，实现零延迟的实时交互体验。\n- 即使在低端智能手机上，wink-nlp 也能凭借每秒 65 万 token 的处理速度流畅运行，确保所有用户都能访问分析功能。\n- 通过内置的词嵌入（Word Embedding）能力，wink-nlp 能精准捕捉上下文语义，显著提升了情感分类和关键句提取的准确度。\n- 开发者仅需编写一套 JavaScript 代码即可同时部署于 Node.js、Deno 和浏览器，大幅降低了开发与维护成本。\n\nwink-nlp 让高性能的自然语言处理真正走出服务器，成为构建响应迅速、智能精准的现代 Web 应用的核心引擎。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwinkjs_wink-nlp_84d9c642.png","winkjs","wink","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fwinkjs_8cc00fce.png","Natural Language Processing (NLP), Stats & ML",null,"wink@graype.in","winkjs_org","https:\u002F\u002Fwinkjs.org\u002F","https:\u002F\u002Fgithub.com\u002Fwinkjs",[82,86],{"name":83,"color":84,"percentage":85},"JavaScript","#f1e05a",99.8,{"name":87,"color":88,"percentage":89},"TypeScript","#3178c6",0.2,1364,64,"2026-04-10T19:11:30","MIT",1,"未说明 (基于 Node.js，理论上支持所有主流操作系统)","不需要 GPU","极低内存占用 (具体数值未说明，强调可在低端智能手机浏览器运行)",{"notes":99,"python":100,"dependencies":101},"该工具是一个纯 JavaScript 库，无外部依赖。需根据 Node.js 版本安装对应的英语语言模型（推荐 Node 16\u002F18 配合 wink-eng-lite-web-model）。支持在 Node.js、Web 浏览器和 Deno 环境中运行。若使用 TypeScript，需在 tsconfig.json 中启用 esModuleInterop 和 allowSyntheticDefaultImports。","不需要 Python (基于 JavaScript\u002FNode.js)",[102,103,104],"node.js (推荐版本 16 或 18)","wink-eng-lite-web-model (Node 16\u002F18 专用语言模型)","wink-eng-lite-model (Node 12\u002F14 专用语言模型)",[106,107,15,35],"音频","视频",[109,110,111,112,113,114,115,116,117,118,119,120,121,122,73,64,123,124,125,126],"natural-language-processing","nlp","tokenize","sbd","sentence-boundary-detection","negation-handling","sentiment-analysis","pos-tagging","ner","named-entity-extraction","custom-entity-detection","word-vectors","visualization","pattern-matching","chatbot","hacktoberfest","bm25","vectorizer","2026-03-27T02:49:30.150509","2026-04-14T12:31:40.101892",[130,135,140,145,150,155],{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},33153,"如何在 TypeScript 项目中正确导入和使用 wink-eng-lite-web-model？","请确保安装了正确的包：`npm install wink-nlp --save` 和 `npm install wink-eng-lite-web-model --save`。在 TypeScript 中导入时，使用默认导入方式：`import model from 'wink-eng-lite-web-model';`。如果之前遇到类型错误或无法导入，请更新到最新版本（wink-nlp v2.2.1+ 和 wink-eng-lite-web-model v1.7.1+），这些版本修复了 TypeScript 类型定义问题。","https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues\u002F54",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},33154,"TypeScript 类型定义中缺少第三个参数（词向量）的支持怎么办？","这是一个已知的类型定义问题，已在最新版本中修复。请升级以下包：`wink-embeddings-sg-100d` (v1.1.0+)、`wink-eng-lite-web-model` (v1.7.1+) 和 `wink-nlp` (v2.2.1+)。升级后，您可以在 TypeScript 中正确使用三个参数初始化：`const nlp: WinkMethods = WinkNLP(model, ['sbd'], vectors);`。","https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues\u002F136",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},33155,"为什么 POS 标记中单词 'cold' 总是被识别为形容词而不是名词？","`wink-eng-lite-web-model` 等模型使用概率方法进行 POS 标记，不能保证 100% 准确。标记结果取决于训练数据的质量。虽然 'cold' 在某些语境下是名词，但模型可能基于训练数据将其主要标记为形容词。维护者表示将探索改进可能性。此外，`.printTokens()` 是仅用于调试的未文档化 API，建议在生产环境中使用官方文档化的方法。","https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues\u002F144",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},33156,"解析长串逗号分隔的数字时 readDoc() 卡住或不返回怎么办？","这是旧版本中的一个已知问题，已在版本 1.3.1 中修复。如果您遇到 `readDoc()` 在处理长数字串时无限挂起的情况，请确保升级到最新版本的 `wink-nlp` 和 `wink-eng-lite-web-model`。维护者提供了运行代码示例验证修复效果。","https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues\u002F37",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},33157,"当前模型支持哪些语言？非英语内容（如葡萄牙语）能使用吗？","目前主要支持英语。对于其他语言（如巴西葡萄牙语），命名实体识别 (NER) 和词性标注 (POS) 功能将无法正常工作。但是，许多基础功能仍然可用，包括：分词 (tokenization)、自定义实体、模式匹配、多种 `.out()` 选项以及用于文本可视化的 `.markup()`。句子边界检测可能部分有效。团队计划发布多语言模型。","https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues\u002F9",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},33158,"winkNLP 加上模型的打包体积应该是多少？","`winkNLP` 库加上 `model`（如 wink-eng-lite-web-model）的总贡献体积应小于 4MB。如果您使用 esbuild 等工具打包时发现体积远超此数值，请检查配置是否正确，确保没有重复打包或引入了不必要的依赖。如有进一步疑问，建议通过官方邮箱或讨论区联系维护者。","https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fissues\u002F135",[161,166,171,176,181,186,191,196,201,206,211,216,221,226,231,236,241,246,251,256],{"id":162,"version":163,"summary_zh":164,"released_at":165},255311,"2.4.0","## 版本 2.4.0 2025年6月30日\n\n### ✨ 新特性\n- 现在可以轻松地对分词结果进行映射；例如：`doc.tokens().map(token => ({token: token.out(), pos: token.out(its.pos)}))`。感谢 [@snowyu](https:\u002F\u002Fgithub.com\u002Fsnowyu) 的贡献！👏","2025-06-30T14:28:22",{"id":167,"version":168,"summary_zh":169,"released_at":170},255312,"2.3.2","## 版本 2.3.2 2024年11月30日\n\n### ⚙️ 更新\n- 更新了新模型发布的测试用例 🤓\n- 在 README 中添加了词向量示例链接。✅\n","2024-11-30T15:54:24",{"id":172,"version":173,"summary_zh":174,"released_at":175},255313,"2.3.1","## 版本 2.3.1 2024年11月24日\n\n### 🐛 修复\n- 根据实现更新了部分 BM25Vectorizer 方法的类型 — 感谢 @pavloDeshko  ✅","2024-11-24T13:21:51",{"id":177,"version":178,"summary_zh":179,"released_at":180},255314,"2.3.0","## 版本 2.3.0 2024年5月19日\n\n### ✨ 新特性\n- 去分词功能现在不仅能恢复普通的不间断空格（nbsp），还能恢复em\u002Fen、三分之一\u002F四分之一、细空格\u002F头发空格、中等数学空格以及窄型不间断空格字符。👏 🙌 🛰️","2024-05-19T07:39:59",{"id":182,"version":183,"summary_zh":184,"released_at":185},255315,"2.2.2","## 版本 2.2.2 2024年5月8日\n\n### ✨ 新特性\n- `.contextualVectors()` 现在会在以下两种情况下抛出错误：(a) 词向量未加载；(b) 当 `lemma: true` 时，NLP 流中缺少 `pos` 字段。🤓\n\n### 🐛 修复\n- 进一步优化了 TypeScript 类型定义。✅","2024-05-08T15:45:43",{"id":187,"version":188,"summary_zh":189,"released_at":190},255316,"2.2.1","## 版本 2.2.1 2024年5月6日\n\n### 🐛 修复\n- 为词嵌入添加了缺失的 TypeScript 定义，并进行了其他一些 TypeScript 相关的修复。✅","2024-05-06T15:44:34",{"id":192,"version":193,"summary_zh":194,"released_at":195},255317,"2.2.0","## 版本 2.2.0 2024年4月3日\n\n### ✨ 功能\n- 反分词功能会将普通空格和不间断空格恢复到它们原来的位置。🤓\n","2024-04-03T14:10:00",{"id":197,"version":198,"summary_zh":199,"released_at":200},255318,"2.1.0","## 版本 2.1.0 2024年3月24日\n\n### ✨ 新特性\n- 现在可以使用 `similarity.vector.cosine( vectorA, vectorB )` 来计算两个向量之间的相似度，取值范围为 0 到 1。🤓","2024-03-24T14:53:39",{"id":202,"version":203,"summary_zh":204,"released_at":205},255319,"2.0.0","## 版本 2.0.0 2024年3月24日\n\n### ✨ 新特性\n- 无缝集成词嵌入，显著提升 winkNLP 的语义理解能力。🎉 👏 🙌\n- 发布了针对超过 35 万条英语词汇的预训练 100 维词嵌入：[wink-embeddings-sg-100d](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-embeddings-sg-100d)。💯\n- API 保持不变——现有项目无需任何代码更新。新增的 API 包括：🤩\n\t- **获取某个词项的向量：** 使用 `.vectorOf( token )` API。\n\t- **计算句子\u002F文档的嵌入：** 使用 `as.vector` 辅助方法：对句子或文档中的词项调用 `.out( its.lemma, as.vector )`。你也可以使用 `its.value` 或 `its.normal`。可通过 `.filter()` API 对词项进行预处理，例如去除停用词等。请注意，`as.vector` 辅助方法采用平均法。\n\t- **生成上下文相关的向量：** 在文档上调用 `.contextualVectors()` 方法。非常适合纯浏览器端应用！根据你的语料库生成具有上下文相关性的自定义向量，并将其用于替代较大的预训练 wink 词嵌入。\n- 详尽的文档及丰富的示例即将发布。敬请关注后续更新！😎","2024-03-24T09:05:42",{"id":207,"version":208,"summary_zh":209,"released_at":210},255320,"1.14.3","## 版本 1.14.3 2023年7月21日\n\n### ✨ 新特性\n- 添加了在 Deno 上运行 winkNLP 的实时示例。👍","2023-07-21T05:23:24",{"id":212,"version":213,"summary_zh":214,"released_at":215},255321,"1.14.2","## Version 1.14.2 July 1, 2023\r\n\r\n### 🐛 Fixes\r\n- Paramteters in `markup()` are optional now in TS code — squashed a [typescript declaration bug](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fcommit\u002Fe6314658766cfa4d40f96b89c211d2d98358cfae). 🙌","2023-07-01T14:28:48",{"id":217,"version":218,"summary_zh":219,"released_at":220},255322,"1.14.1","## Version 1.14.1 June 11, 2023\r\n\r\n### 🐛 Fixes\r\n- Fixed a [typescript declaration](https:\u002F\u002Fgithub.com\u002Fwinkjs\u002Fwink-nlp\u002Fcommit\u002F0ad0690e93f59397dbdde7b876f60c2e5875215b). ✅","2023-06-11T13:15:10",{"id":222,"version":223,"summary_zh":224,"released_at":225},255323,"1.14.0","## Version 1.14.0 May 20, 2023\r\n\r\n### ✨ Features\r\n- You can now use `its.sentenceWiseImprotance` helper to obtain sentence wise importance (on a scale of 0 to 1) of a document, if it is supported by language model. 📚📊🤓\r\n- Checkout live example [How to visualize key sentences in a document?](https:\u002F\u002Fobservablehq.com\u002F@winkjs\u002Fhow-to-visualize-key-sentences-in-a-document) 👀","2023-05-20T17:30:59",{"id":227,"version":228,"summary_zh":229,"released_at":230},255324,"1.13.1","## Version 1.13.1 March 27, 2023\r\n\r\n### ⚙️ Updates\r\n- Some behind the scene model improvements. 😎 🤓\r\n- Add clarity on typescript configuration in README. ✅","2023-03-27T15:15:10",{"id":232,"version":233,"summary_zh":234,"released_at":235},255325,"1.13.0","## Version 1.13.0 December 09, 2022\r\n\r\n### ✨ Features\r\n- Mark allows marking w.r.t. the last element of the pattern. For example if a pattern matches `a fluffy cat` then `mark: [-2, -1]` will extract `fluffy cat` — especially useful when the match length is unknown. 💃\r\n- Improved error handling while processing mark's arguments.  🙌","2022-12-09T15:42:05",{"id":237,"version":238,"summary_zh":239,"released_at":240},255326,"1.12.3","## Version 1.12.3 November 18, 2022\r\n\r\n### ⚙️ Updates\r\n- README is now more informative and links to examples and benchmarks 👍\r\n- Benchmarked on latest machine, browser versions 🖥","2022-11-18T05:11:40",{"id":242,"version":243,"summary_zh":244,"released_at":245},255327,"1.12.2","## Version 1.12.2 October 13, 2022\r\n\r\n### 🐛 Fixes\r\n- Fixed incorrect install command in README ✅\r\n\r\n### ⚙️ Updates\r\n- We have tested winkNLP on Node.js version 18 including its models. 🙌 🎉","2022-10-13T14:50:32",{"id":247,"version":248,"summary_zh":249,"released_at":250},255328,"1.12.1","## Version 1.12.1 October 13, 2022\r\n\r\n### ⚙️ Updates\r\n- Ready for future — we have tested winkNLP on Node.js version 18 including its models. 🙌 🎉\r\n","2022-10-13T13:49:14",{"id":252,"version":253,"summary_zh":254,"released_at":255},255329,"1.12.0","## Version 1.12.0 May 13, 2022\r\n\r\n### ✨ Features\r\n- winkNLP earned [Open Source Security Foundation (OpenSSF) Best Practices passing badge](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fen\u002Fprojects\u002F6035). 🎉 👏 🙌\r\n- `.bowOf()` api of [BM25Vectorizer](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fbm25-vectorizer.html) now supports processing of OOV tokens — useful for cosine similarity computation. 😎\r\n- [Document](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fdocument.html) has a new API — `.pipeConfig()` to inquire the active processing pipeline.","2022-05-13T15:05:01",{"id":257,"version":258,"summary_zh":259,"released_at":260},255330,"1.11.0","## Version 1.11.0 January 30, 2022\r\n\r\n### ✨ Features\r\n- Obtain bag-of-words for a tokenized text from BM25Vectorizer using `.bowOf()` api — useful for bow based [similarity](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fsimilarity.html) computation. 👍\r\n- [`learnCustomEntities()`](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Flearn-custom-entities.html) displays a console warning, if a complex [short hand pattern](https:\u002F\u002Fwinkjs.org\u002Fwink-nlp\u002Fcustom-entities.html) is likely to cause learning\u002Fexecution slow down.🤞❗️","2022-01-30T15:14:51"]