
NLP人工智能【免费下载链接】compromisemodest natural-language processing项目地址https://gitcode.com/gh_mirrors/co/compromise点击查看免费下载导读Compromise 是一个零依赖、规则驱动的英文自然语言处理库其全部对外能力都浓缩在一套以View文档子集视图为核心的 API 中。本文以官方 docs/api.md 为骨架逐组详解compromise含compromise/one、compromise/two、compromise/three三种构建层级暴露的全部方法核心 getter、工具方法、循环、访问器、匹配、改写、输出、指针运算、标签操作、专用子视图.nouns()、.verbs()、.numbers()等以及nlp.*库级构造方法并辅以仓库源码如 src/API/View.js、src/nlp.js印证其底层实现。读完本文你将能够熟练地进行链式调用、模式匹配、文本改写与信息抽取并清楚每个方法在源码中的真实行为。理解 API 的基础View 与链式调用api.md开篇即给出最重要的原则除特别注明外每个方法都返回一个新的 View文档的一个子选择因此调用可以无限链式拼接nlp(text).match(#Verb).toPastTense().text()从源码看View 是一个类src/API/View.js构造函数持有document整个解析后的文档、ptrs当前选择的指针和_groups命名捕获组。绝大多数 API 方法通过Object.assign(View.prototype, api)挂载到 View 原型上src/API/View.js而api由utils访问器、compute、loops循环三部分合并而来src/API/methods/index.js。方法可用性与构建层级强相关api.md明确指向 docs/concepts.md导入方式包含能力适用场景compromise默认等价于compromise/threetokenize 词性标注 全部专用子视图.nouns()、.verbs()、.people()、.numbers()…默认选择几乎总是够用compromise/twotokenize 词性标注 缩略词展开无专用子视图只需要标签与.match()compromise/one等价于compromise/tokenize仅分词无词性标注只需要切分句子/单词#Tag模式将不可用易变性mutability是最大的坑View 指向底层共享文档转换类方法会就地修改那份共享文档即使它们同时返回一个新 View。recipes.mddocs/recipes.md用真实输出演示了这一点let doc nlp(I walk to work) doc.verbs().toPastTense() // 就地修改 doc返回的视图只是被选中的 walked doc.text() // I walked to work —— 从 doc 读才是完整结果 // 常见误区链式 .text() 只返回匹配片段 nlp(I walk to work).verbs().toPastTense().text() // walked work若想不破坏原文档地做变换先.clone()再操作let past doc.clone().verbs().toPastTense().text() // doc 保持原样Core methods所有 View 共有的三个 getterapi.md将它们列为available on every View.case— 保留原始文本的大小写形态忽略替换内容自身的大小写.possessives— 保留原文是否为所有格如spencers这一信息.tags— 保留原始文本的全部标签无论替换内容带什么标签。这三个 getter 本质上是属性继承开关在进行.replace()等改写时决定新词是沿用原词的大小写/所有格/标签还是采用替换词自身的。它们是文本改写保持原汁原味的关键工具。Utils文档状态访问以下 getter 与工具方法读取文档的内部状态方法说明.found当前文档是否非空源码实现为this.docs.length 0见 src/API/View.js.docs当前视图的 term 对象列表源码按ptrs指针从document中切取src/API/View.js.document完整解析后的文本Term[][]句子数组每个句子是 term 数组.pointer当前视图的索引惰性指针.fullPointer当前视图的显式完整索引[句子号, 起始, 结束, 起始id, 结束id]src/API/View.js.methods访问库内部方法world.methods.model访问库内部数据world.model.hooks默认会运行哪些 compute 方法.isView判断一个对象是否为 compromise 视图的辅助标识恒为truesrc/API/View.js.length每个匹配的 term 数量源码实现为this.docs.lengthsrc/API/View.js方法说明.update(pointer)基于同一文档创建一个新 View源码会顺带把符合条件的整句缓存下传src/API/View.js.toView(pointer)把 Verb、Noun 等专用子视图降级回普通 View.fromText(text)用同一世界world解析新文本创建全新文档与视图内部依次运行normal → freeze → lexicon → preTagger → unfreeze等 compute 步骤src/API/View.js.termList().docs的别名拉平为单个 term 数组源码委托methods.one.termList见 src/API/methods/utils.js.compute(method)运行一个具名计算源码支持传入字符串、字符串数组或自定义函数三种形态src/API/methods/compute.js.clone(shallow?)深拷贝文档使新视图与旧视图不再共享引用实现为逐 termObject.assign并重建tagsSetsrc/API/View.jsLoops遍历每个短语这些方法把视图按每个匹配短语切分成独立小视图逐一处理源码见 src/API/methods/loops.js.forEach(fn)— 对每个短语运行回调回调收到(view, index)返回原视图源码内部用fullPointer逐条update([ptr]).map(fn, emptyResult?)— 把每个短语送入回调并重组为新文档。注意其返回值智能分派回调返回字符串则得到字符串数组返回普通对象则得到对象数组返回 View 则把所有指针拼接成新 View回调无返回值时补一个空视图src/API/methods/loops.js.filter(fn)— 只保留回调返回真值的短语.find(fn)— 只保留第一个使回调为真的短语.some(fn)— 任一短语命中即返回true/false.random(n?)— 从结果中随机抽样 n 条默认 1源码用Math.random计算起点并防止越界src/API/methods/loops.js。Accessors选取结果的子集.terms(n?)— 把每个匹配拆成单个 term传n时等价于eq(n)源码见 src/API/methods/utils.js.groups(name?)— 抓取指定命名捕获组不传参则返回一个{组名: View}对象src/API/methods/utils.js.eq(n)— 只取第 n 个结果越界返回空视图src/API/methods/utils.js.first(n?)/.last(n?)— 取前/后 n 个结果first()即eq(0).firstTerms()— 每个匹配的第一个词内部match(^.).lastTerms()— 每个匹配的最后一个词内部match(.$).slice(start, end?)— 按数组语义截取结果子集.all()— 拉远镜头回到整个原始文档this.update().toView().fullSentences()— 返回每个匹配所在的完整原始句子指针只保留句子号src/API/methods/utils.js.none()— 返回一个空视图.isDoc(view?)— 判断两个视图是否指向同一文档的同一段文字逐一比较[n, start, end]src/API/methods/utils.js.wordCount()— 统计每个匹配的 term 数量过滤空文本 termsrc/API/methods/utils.js。源码还暴露了一批便捷别名group groups、fullSentence sentence fullSentences、firstTerm firstTerms、lastTerm lastTerms以及get eqsrc/API/methods/index.js。Match模式匹配家族匹配是 compromise 最强大的能力模式语法见 docs/match-syntax.md如#Verb、#Person、(modern|major)? general等。API 层位于 src/1-one/match/api含match.js、lookaround.js、split.js、join.js等.match(match, group?, options?)— 返回文档中命中模式的部分.matchOne(match, group?, options?)— 只返回第一个匹配.has(match, group?, options?)— 返回布尔值判断该模式是否存在.if(match, group?, options?)— 只保留包含该模式的当前短语.ifNo(match, group?, options?)— 过滤掉包含该模式的当前短语.before(match, group?, options?)— 返回每个匹配之前的 term别名.lookBehind()、.lookBefore().after(match, group?, options?)— 返回每个匹配之后的 term别名.lookAhead()、.lookAfter().growLeft(match, group?, options?)— 把紧邻匹配左侧符合模式的词并入视图.growRight(match, group?, options?)— 把紧邻匹配右侧符合模式的词并入视图.grow(match, group?, options?)— 左右两侧同时扩展.sweep(match, opts?)— 对文档依次应用一组 match 对象批量命中相关实现见 src/1-one/sweep.splitOn(match?, group?)—.split()的别名.splitBefore(match?, group?)— 在匹配处之前断开把其后内容切为新短语.splitAfter(match?, group?)— 在匹配处之后断开.split()即其别名。关于匹配的边界行为有一个重要约定docs/concepts.md匹配默认不跨句子边界nlp(thats it. Back to Winnipeg!).has(it back)返回false。需要跨句/段落匹配时需使用 paragraphs 插件。Case大小写变换.toLowerCase()— 全部转为小写.toUpperCase()— 全部转为大写.toTitleCase()— 每个 term 首字母大写.toCamelCase()— 去除空白并把每个 term 首字母大写拼接成驼峰。这些方法属于转换类方法会就地修改文档。Insert增删改查与重排.concat(input)— 在末尾追加新内容.insertBefore(input)— 在每个匹配前插入别名.prepend().insertAfter(text)— 在每个匹配后插入别名.append()、.insert().remove(match)— 从文档中彻底移除这些 term别名.delete().replace(from, to?, keep?)— 用新模式搜索并替换为新内容recipes.md示例doc.replace(cats, dogs)→I love dogs.replaceWith(to, keep?)— 直接用新内容替换当前选中的部分.unique()— 去除重复匹配.reverse()— 反转匹配的顺序不反转词内字母.sort(method?)— 就地重排匹配顺序可按自定义函数.normalize(options?)— 以多种方式清理文本详见下文 Selections 中的同名方法。Whitespace空白与标点.pre(str?, concat?)— 在每个匹配前加入指定空白/标点.post(str?, concat?)— 在每个匹配后加入指定空白/标点.trim()— 去除首尾空白.hyphenate()— 用连字符连接词并去掉空白.dehyphenate()— 去掉词间连字符并恢复空白别名.deHyphenate().toQuotations(start?, end?)— 给选中内容加引号别名.toQuotation().toParentheses(start?, end?)— 给选中内容加括号。Output输出格式.text(options?)— 返回文档文本字符串doc.text()是最高频的读取方法.json(options?)— 抽取期望的元数据term、tags、offsets 等.debug()— 在控制台漂亮地打印当前文档及其标签调试利器.out(format?)— 若干具名输出格式如doc.out(array)返回每段匹配的字符串数组docs/concepts.md.html(toHighlight)— 生成 HTML 字符串.wrap(matches)— 生成 HTML 字符串如给匹配项加包装标签。Pointers集合运算这些方法把多个匹配结果当集合处理.union(match)— 合并两个结果且去重别名.and().intersection(match)— 只保留两边的重复部分.not(match, options?)— 返回除该模式外的所有结果别名.difference().complement(match)— 取非匹配的全部内容.settle(match)— 消除匹配之间的重叠。Tag词性标签操作.tag(tag, reason?)— 给所有 term 打上指定标签.tagSafe(tag, reason?)— 仅当与当前标签一致时才打标签更保守.unTag(tag, reason?)— 从 term 上移除指定标签.canBe(tag)— 只返回可能属于该标签的 term。配套的库级nlp.addTags()可把新标签接入标签集图tagset graph完整标签体系见 docs/tags.md。Cache性能与快取.cache(options?)— 冻结文档当前状态以提速后续读取跳过重复计算.uncache(options?)— 解除冻结允许再次变换.freeze()— 防止当前标签被移除.unfreeze()— 允许标签变更默认状态.lookup(trie, opts?)— 用一组字符串做快速查找底层可用nlp.buildTrie()预构建检索图相关实现见 src/1-one/lookup.autoFill()— 自动补全 typeahead 前缀依赖 src/1-one/typeahead.contractions(n?)— 返回多词 term如didnt.contract()— 把可合并的词收缩如did not→didnt.expand()— 反向展开ive→i have.confidence()— 标签置信度的平均值.swap(fromLemma, toLemma, guardTag?)— 按词根智能替换保留词形变化实现见 src/2-two/swap。Selectionscompromise/three专用子视图这些方法返回带额外方法的专用子视图典型用法如doc.verbs().toPastTense()。注意它们只在完整版compromisecompromise/three下可用。任意 View 上的选择方法结构类.clauses(n?)切分多 term 短语、.chunks()切分名词短语与动词短语、.normalize(options?)清理文本、.redact(opts?, blockStr?, keepTags?)移除人名/地名/机构名实现见 src/3-three/redact特殊格式 term.hyphenated(n?)如wash-out、.hashTags(n?)#nlp、.emails(n?)、.emoji(n?)、.emoticons(n?):、.atMentions(n?)nlp_compromise、.urls(n?)、.phoneNumbers(n?)、.addresses(n?)、.acronyms(n?)FBI、.parentheses(n?)、.possessives(n?)、.quotations(n?)、.slashes(n?)love/hate词性类.pronouns(n?)、.conjunctions(n?)、.prepositions(n?)、.honorifics(n?)Dr.、.abbreviations(n?)st.、.adjectives(n?)、.adverbs(n?)、.nouns(n?, opts?)、.numbers(n?, opts?)、.percentages(n?, opts?)、.money(n?, opts?)、.fractions(n?, opts?)句子与命名实体.sentences(n?, opts?)、.questions(n?, opts?)、.verbs(n?)、.people(n?)、.places(n?)、.organizations(n?)、.topics(n?) people places organizations。recipes.md给出的抽取示例nlp(Mary met Dr. John Smith in Paris.).people().out(array)→[Mary, Dr. John Smith]。.nouns()→.parse(n?)解析名词短语.isPlural()只取复数名词.adjectives()取修饰该名词的形容词.toPlural(setArticle?)—football captain→football captains.toSingular(setArticle?)—turnovers→turnover。.numbers()→读取.parse(n?)/.get(n?)取解析后的数值筛选.isOrdinal()、.isCardinal()、.isUnit(units)只留带指定单位如km的数转换.toNumber()→5或5th、.toLocaleString()加千分位、.toText()→five/fifth、.toCardinal()、.toOrdinal()比较.isEqual()、.greaterThan(min)、.lessThan(max)、.between(min, max)运算.set(n)、.add(n)、.subtract(n)、.increment()、.decrement()。.fractions()→.parse(n?)/.get(n?)取解析值.toDecimal()—1/4→0.25.toFraction()—one fourth→1/4.toOrdinal()—1/4→1/4th.toCardinal()—1/4th→1/4.toPercentage()—1/4→25%。.sentences()→.parse(n?)解析句子时态.toPastTense()will go→went、.toPresentTense()、.toFutureTense()、.toInfinitive()极性.toNegative()he is cool→he is not cool、.toPositive()语气.isQuestion()、.isExclamation()、.isStatement()。.people()→.parse()— 拆出 first/last/middle 名字。.verbs()→解析.parse(n?)取动词短语.subjects()取发出动作的主语.adverbs()取修饰动词的副词数/式.isSingular()、.isPlural()、.isImperative()词形.toInfinitive()walks→walk、.toPresentTense()、.toPastTense()、.toFutureTense()、.toGerund()→walking、.toPastParticiple()→has walked、.conjugate()返回该动词全部词形极性.isNegative()、.isPositive()、.toPositive()didnt study→studied、.toNegative()went→did not go。其余子视图的方法子视图方法.acronyms().strip()F.B.I.→FBI、.addPeriods()FBI→F.B.I..parentheses().strip()去掉().possessives().strip()spencers→spencer.quotations().strip()去掉首尾引号.slashes().split()把love/hate变成love hate.adjectives().adverbs()、.conjugate()、.toComparative(n?)quick→quicker、.toSuperlative(n?)→quickest、.toAdverb(n?)→quickly、.toNoun(n?)→quicknessConstructor methodsnlp.*库级 API这些方法在导入的nlp对象上调用而非 View。核心构造逻辑见 src/nlp.jsnlp(text, lexicon?)— 主构造器传入 lexicon 对象会先nlp.addWords(lex)随后handleInputs构建文档并运行world.hooks中的全部 compute 步骤src/nlp.jsnlp.tokenize(text, lexicon?)— 只分词不打词性标签仍会尝试运行contractionssrc/nlp.jsnlp.lazy(text, match?)— 以最小分析扫描文本实现见 src/2-two/lazy 的 lazyParse/maybeMatchnlp.plugin(plugin)— 混入一个 compromise 插件nlp.extend(plugin)为同一函数源码nlp.extend nlp.plugin内部调用extend()改写 world、View 与 nlp 本身src/nlp.jsnlp.parseMatch(match, opts?)— 把 match 字符串解析为 JSONnlp.world()— 抓取库内部对象this._world含 methods/model/compute/hooksnlp.model()— 抓取库元数据world.modelnlp.methods()— 抓取暴露的库方法world.methodsnlp.hooks()— 哪些 compute 函数会自动运行world.hooksnlp.verbose(toLog?)— 开启决策日志便于调试源码直接指向verbosesrc/nlp.jsnlp.version— 当前库的 semver 版本取自 src/_version.js。以下方法在nlp.js中未直接定义从源码结构看由各插件通过extend注册到 nlp 对象上nlp.addTags(tags)— 把新标签接入标签集图tagset graphnlp.addWords(words, isFrozen?)— 向内部词库添加新词nlp.buildTrie(words)— 把词表构建为可检索图供.lookup()使用nlp.buildNet(matches)— 把一组 match 对象编译为更优化的形式nlp.typeahead(words)— 向 autoFill 字典添加词供.autoFill()使用。这些能力与 docs/recipes.md 中三种由浅入深定制方式一一对应解析时传 lexicon 对象 →nlp.addWords/addTags全局添加 →nlp.plugin/extend插件化扩展可加词、加标签、加新方法、加后处理。延伸阅读docs/match-syntax.md — match 迷你语言完整语法docs/tags.md — 完整标签集docs/concepts.md — 5 分钟心智模型三个对象、易变性、构建层级、已知限制docs/recipes.md — 可复制粘贴的实战任务示例每条都有真实输出验证各选择方法源码名词 src/3-three/nouns、数字 src/3-three/numbers、动词 src/3-three/verbs、句子 src/3-three/sentences、命名实体 src/3-three/topics。赞分享NLP人工智能【免费下载链接】compromisemodest natural-language processing项目地址https://gitcode.com/gh_mirrors/co/compromise点击查看免费下载相关推荐3个核心功能让N_m3u8DL-RE成为你的流媒体下载终极武器3个核心功能让N_m3u8DL RE成为你的流媒体下载终极武器 你是否经常遇到在线课程过期无法复习、重要直播转瞬即逝、喜欢的视频无法离线观看的困扰在数字内容CLI音视频为什么选择nbviewer-appmacOS用户的Jupyter笔记本查看首选工具为什么选择nbviewer appmacOS用户的Jupyter笔记本查看首选工具 nbviewer app是一款专为macOS用户设计的Jupyter笔记本Vuex 4 API 完全参考从 Store 构造器选项到组合式 API 的权威指南Vuex 4 API 完全参考从 Store 构造器选项到组合式 API 的权威指南 本篇参考指南以 Vuex 4 官方 API 文档 docs/ja/ap前端上一篇p3c插件内存使用监控JConsole与VisualVM使用指南下一篇告别卡顿如何利用NVIDIA Container Toolkit实现AR/VR应用的GPU加速容器化部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考