分享一个“产业级,开箱即用”的NLP自然语言处理工具

news2024/11/15 17:02:00

NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向

自然语言处理(NLP)的一个最伟大的方面是跨越多个领域的计算研究,从人工智能到计算语言学的多个计算研究领域都在研究计算机与人类语言之间的相互作用。它主要关注计算机如何准确并快速地处理大量的自然语言语料库。什么是自然语言语料库?它是用现实世界语言表达的语言学习,是从文本和语言与另一种语言的关系中理解一组抽象规则的综合方法。

人类语言是抽象的信息符号,其中蕴含着丰富的语义信息,人类可以很轻松地理解其中的含义。而计算机只能处理数值化的信息,无法直接理解人类语言,所以需要将人类语言进行数值化转换。不仅如此,人类间的沟通交流是有上下文信息的,这对于计算机也是巨大的挑战。

结合以上难点,飞桨团队推出PaddleNLP,号称拥有 易用的文本领域API多场景的应用示例、和 高性能分布式训练 三大特点,我们先来了解一下飞浆团队。

百度的定义:

飞桨是百度旗下开源深度学习平台(PaddlePaddle),提供了诸多开源技术与框架,如常见的OCR光学字符识别(PaddleOCR)、NLP自然语言处理(PaddleNLP)等,让你实现仅需几行调用代码,即可完成一次推理工作。

结合文心大模型的OCR功夫更是了的。管网:飞桨AI Studio星河社区-人工智能学习与实训社区

下面我们说回PaddleNLP

  • 易用的文本领域API

    • 提供丰富的产业级预置任务能力 Taskflow 和全流程的文本领域API:支持丰富中文数据集加载的 Dataset API,可灵活高效地完成数据预处理的 Data API ,预置60+预训练词向量的 Embedding API ,提供100+预训练模型的 Transformer API 等,可大幅提升NLP任务建模的效率。

  • 多场景的应用示例

    • 覆盖从学术到产业级的NLP应用示例,涵盖NLP基础技术、NLP系统应用以及相关拓展应用。全面基于飞桨核心框架2.0全新API体系开发,为开发者提供飞桨文本领域的最佳实践。

  • 高性能分布式训练

    • 基于飞桨核心框架领先的自动混合精度优化策略,结合分布式Fleet API,支持4D混合并行策略,可高效地完成大规模预训练模型训练。

  • 项目GitHub: PaddlePaddle/PaddleNLP

  • 项目Gitee: PaddleNLP: Easy-to-use and powerful NLP library with Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications (Neural Search/QA/IE/Sentiment Analysis)

  • GitHub Issue反馈: PaddlePaddle/PaddleNLP#issues

如何使用PaddleNLP?

1. 环境准备

  python环境:3.7.4

  首次运行需要安装PaddlePaddle(如果已经安装请跳过)

  GPU环境需要注意CUDA版本,官网地址:开始使用_飞桨-源于产业实践的开源深度学习平台

CPU版本:
conda install paddlepaddle==2.4.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

GPU版本:
python -m pip install paddlepaddle-gpu==2.4.2.post116 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

 安装PaddleNLP

pip install --upgrade paddlenlp

2.开始推理:

   引入依赖:

from pprint import pprint
from paddlenlp import Taskflow

   实体抽取:

schema = ['时间', '选手', '赛事名称'] #要抽取的字段信息
ie = Taskflow('information_extraction', schema=schema)
pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) #要抽取的文本信息


#Result:

[{'时间': [{'end': 6,
          'probability': 0.9857378532473966,
          'start': 0,
          'text': '2月8日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503082243989795,
            'start': 6,
            'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981535684051067,
          'start': 28,
          'text': '谷爱凌'}]}]

是不是很惊艳,再无样本训练的情况下,仍能达到很好的效果。

关系抽取:

schema = {'歌曲名称': ['歌手', '所属专辑']} 
ie.set_schema(schema) # Reset schema
ie('《告别了》是孙耀威在专辑爱的故事里面的歌曲')

#Result

[{'歌曲名称': [{'text': '告别了',
    'start': 1,
    'end': 4,
    'probability': 0.6296147448952354,
    'relations': {'歌手': [{'text': '孙耀威',
       'start': 6,
       'end': 9,
       'probability': 0.9988380409852198}],
     '所属专辑': [{'text': '爱的故事',
       'start': 12,
       'end': 16,
       'probability': 0.9968462078543183}]}},
   {'text': '爱的故事',
    'start': 12,
    'end': 16,
    'probability': 0.28168534139751955,
    'relations': {'歌手': [{'text': '孙耀威',
       'start': 6,
       'end': 9,
       'probability': 0.9951413914998}]}}]}]

事件抽取:

schema = {'地震触发词': ['地震强度', '时间', '震中位置', '震源深度']} 
ie.set_schema(schema) 
ie('中国地震台网正式测定:5月16日06时08分在云南临沧市凤庆县(北纬24.34度,东经99.98度)发生3.5级地震,震源深度10千米。')

#Result

[{'地震触发词': [{'text': '地震',
    'start': 56,
    'end': 58,
    'probability': 0.9977425555988333,
    'relations': {'地震强度': [{'text': '3.5级',
       'start': 52,
       'end': 56,
       'probability': 0.998080158269417}],
     '时间': [{'text': '5月16日06时08分',
       'start': 11,
       'end': 22,
       'probability': 0.9853299181377793}],
     '震中位置': [{'text': '云南临沧市凤庆县(北纬24.34度,东经99.98度)',
       'start': 23,
       'end': 50,
       'probability': 0.7874013050677604}],
     '震源深度': [{'text': '10千米',
       'start': 63,
       'end': 67,
       'probability': 0.9937973233053299}]}}]}]

句子级情感分类:

schema = '情感倾向[正向,负向]' 

ie.set_schema(schema) # Reset schema
ie('这个产品用起来真的很流畅,我非常喜欢')

#Result
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9990024058203417}]}]

评价维度、观点抽取,对象级情感分析:

schema = {'评价维度': ['观点词', '情感倾向[正向,负向]']} 
ie.set_schema(schema) 
pprint(ie("地址不错,服务一般,设施陈旧")) 


#Result

[{'评价维度': [{'end': 2,
            'probability': 0.9888138676472664,
            'relations': {'情感倾向[正向,负向]': [{'probability': 0.998228967796706,
                                           'text': '正向'}],
                          '观点词': [{'end': 4,
                                   'probability': 0.9927846479537372,
                                   'start': 2,
                                   'text': '不错'}]},
            'start': 0,
            'text': '地址'},
           {'end': 12,
            'probability': 0.9588297379365116,
            'relations': {'情感倾向[正向,负向]': [{'probability': 0.9949388606013692,
                                           'text': '负向'}],
                          '观点词': [{'end': 14,
                                   'probability': 0.9286749937276362,
                                   'start': 12,
                                   'text': '陈旧'}]},
            'start': 10,
            'text': '设施'},
           {'end': 7,
            'probability': 0.959285414999755,
            'relations': {'情感倾向[正向,负向]': [{'probability': 0.9952498258302498,
                                           'text': '负向'}],
                          '观点词': [{'end': 9,
                                   'probability': 0.9949358587838901,
                                   'start': 7,
                                   'text': '一般'}]},
            'start': 5,
            'text': '服务'}]}]

跨任务跨领域抽取:

schema = ['寺庙', {'丈夫': '妻子'}]
ie.set_schema(schema)
pprint(ie('李治即位后,让身在感业寺的武则天续起头发,重新纳入后宫。'))

#Result

[{'丈夫': [{'end': 2,
          'probability': 0.989690572797457,
          'relations': {'妻子': [{'end': 16,
                                'probability': 0.9987625986569526,
                                'start': 13,
                                'text': '武则天'}]},
          'start': 0,
          'text': '李治'}],
  '寺庙': [{'end': 12,
          'probability': 0.9888578809890554,
          'start': 9,
          'text': '感业寺'}]}]

中文分词:(支持文档级输入)

seg = Taskflow("word_segmentation")

doc = "苏锦一直记得那个午后,明晃晃的光线穿过教室的窗玻璃洒到自己脸上,有种特别暖和的感觉。那阳光仿佛是能够钻进人的心里,继而延展到身体全部的毛孔中,然后以一种温柔的霸道占据体内各个淋巴细胞。苏锦觉得连自己的每一个气息里都似乎是能流窜出明亮的光。她坐着有些微醉于这份上帝恩赐的福祉当中。是在这样一个午后。她记住了段见城的脸。轮廓俊朗的少年。有着羁傲的眼神和清晰的声线。怎么看这都是少女漫画里必经的情节。教语文的老太太此刻正兀自在讲台上口若悬河的讲解着《孔雀东南飞》,毕竟是已经年过半百的老教师,经历的学生多了,倒也不在乎讲台下那一张张脸上是否挂着的无精打采,昏昏欲睡的表情,按着自己的性子眉飞色舞的描绘着千年前的那段爱情传奇。苏锦一边数着从老太太口里横飞出来的唾沫星子,一边念想着,让理科班这群脑子里已全被物理公式填充了的家伙,去对几千年前焦仲卿和刘兰芝的爱情产生兴趣未免是件太困难的事情了。老太太讲到焦仲卿和刘兰芝双双殉情而死之时咳嗽了一声,提醒底下那群不知已经神游到何方的学生们是时候为文章的主旨做笔记了。苏锦把课文翻到最后,快速扫过大致内容,目光却在那句:府吏闻此事,心知长别离。徘徊庭树下,自挂东南枝上硬生生地停了下来。思绪仿若戛然而止,被某种莫名的感怀而包围,心中有些钝痛,却不知从何而来。“懦弱。”一个略带鄙夷的声音传入苏锦的耳,拦截住了她空白的思绪。苏锦转过头,瞥见后桌的段见城。恍然间有种错觉,这个男生好似是被光线包裹着一般。段见城淡淡说。若他是焦仲卿,定不会让自己和深爱的女子走到这步田地,若是真走到山穷水尽的地步,定是决然赴死。何来徘徊。那清淡口气带着些不屑,却是这般笃定至极。他说,平生最鄙夷懦弱的男子。苏锦静默的注视着这个男生。终究是没有说出话来。苏锦莫名其妙的做了段见城的女友是一年以后的事情。全班在KTV里唱歌,美名曰:升高三前最后的狂欢。包厢里都是拥挤的人,但苏锦却还是能够感受到空调的温度调得异常的低,她躲在冷风吹不到的角落,捧着大杯的雪花啤酒像是喝水一样没有节制,她觉得心里有所郁结并且心思混乱,恍恍惚惚的注视着麦克风被传了一轮又一轮,听着音像里传出或高或低的杂乱音符,而自己却似是置身于别处,与此间的喧嚣起伏无关,只觉得空荡荡。苏锦记得自己与同桌曾谈及过自己这种从暑假开始无法摆脱的混沌状态,同桌是一副了然于胸的模样,义正言辞的对苏锦说,这是高三前期综合症。她说,苏锦你别太看重所谓的高三,高考和大学都只是一个过程而并非最终的意义,我们要以平常心去对待这些。苏锦想,其实自己并非执著什么,而是自幼便对于那些未知的一切充满恐惧。因为无法掌控,所以感到束手无策,身不由己。仿佛有种被命运捏在手里随意摆弄的感觉,特别难受正当苏锦失足于自己庞大的幻觉之时,身边的朋友开始玩起了真心话大冒险之类的游戏。在一边起哄的女生提议游戏从今晚没有唱歌过的人开始,于是因为忙着在沙发上的打牌的段见城那拨人便是首先被开刷的对象,而作为聚众赌博的头子,段见城自然是第一个被逮到。几个暗自对段见城有好感的姑娘早就揣摩好了问题,苏锦被旁边兴奋过头的女生推攘着,神志也渐渐清明起来。不知是谁直白的问出了那句:阿城,你有意中人么?KTV中的嘈杂如同顿时沉淀了一般,纵然空气里似乎还遗留着些噪音过境的痕迹,更多的却是一种屏气凝神的静。段见城沉默的捏着手中那张还没打出去扑克牌,几乎是在所有人的耐心倒塌的前一秒,清晰地说出了苏锦的名字。"

print("输入长度:", len(doc))
print("分词结果:", seg(doc))

#Result

输入长度: 1413
分词结果: ['苏锦', '一直', '记得', '那个', '午后', ',', '明晃晃', '的', '光线', '穿过', '教室', '的', '窗', '玻璃', '洒', '到', '自己', '脸上', ',', '有种', '特别', '暖和', '的', '感觉', '。', '那', '阳光', '仿佛', '是', '能够', '钻进', '人', '的', '心里', ',', '继而', '延展', '到', '身体', '全部', '的', '毛孔', '中', ',', '然后', '以', '一种', '温柔', '的', '霸道', '占据', '体内', '各', '个', '淋巴细胞', '。', '苏锦', '觉得', '连', '自己', '的', '每一个', '气息', '里', '都', '似乎', '是', '能', '流窜', '出', ...........

词性标注:

from paddlenlp import Taskflow

tag = Taskflow("pos_tagging")

print(tag("第十四届全运会在西安举办"))

#Result

[(‘第十四届’, ‘m’), (‘全运会’, ‘nz’), (‘在’, ‘p’), (‘西安’, ‘LOC’), (‘举办’, ‘v’)]

命名实体识别

from paddlenlp import Taskflow

ner = Taskflow("ner")

print(ner(["李伟拿出具有科学性、可操作性的《陕西省高校管理体制改革实施方案》", "诺戴商务咨询(上海)有限公司于2016年08月22日成立"]))

#Result

[[('李伟', '人物类_实体'), ('拿出', '场景事件'), ('具有', '肯定词'), ('科学性', '修饰词_性质'), ('、', 'w'), ('可操作性', '修饰词_性质'), ('的', '助词'), ('《', 'w'), ('陕西省高校管理体制改革实施方案', '作品类_实体'), ('》', 'w')], [('诺戴商务咨询(上海)有限公司', '组织机构类_企事业单位'), ('于', '介词'), ('2016年08月22日', '时间类_具体时间'), ('成立', '场景事件')]]`在这里插入代码片`

依存句法分析

from paddlenlp import Taskflow

# 使用BiLSTM作为编码器,速度最快
ddp = Taskflow("dependency_parsing")

#Result

print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))

[{‘word’: [‘2月8日’, ‘谷爱凌’, ‘夺得’, ‘北京冬奥会’, ‘第三金’], ‘head’: [3, 3, 0, 5, 3], ‘deprel’: [‘ADV’, ‘SBV’, ‘HED’, ‘ATT’, ‘VOB’]}]

 依存句法分析标注关系集合表

文本纠错

ERNIE-CSC在ERNIE预训练模型的基础上,融合了拼音特征的端到端中文拼写纠错模型,整体框架图如下:

                        

from paddlenlp import Taskflow

corrector = Taskflow("text_correction")
print(corrector('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。'))

#Result

[{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]

文本相似度

from paddlenlp import Taskflow

similarity = Taskflow("text_similarity")
print(similarity([["春天适合种什么花?", "春天适合种什么菜?"], ["小蝌蚪找妈妈怎么样", "小蝌蚪找妈妈是谁画的"]]))

#Result

[{'text1': '春天适合种什么花?', 'text2': '春天适合种什么菜?', 'similarity': 0.83395267}, {'text1': '小蝌蚪找妈妈怎么样', 'text2': '小蝌蚪找妈妈是谁画的', 'similarity': 0.81923723}]

交互式闲聊对话

from paddlenlp import Taskflow

dialogue = Taskflow("dialogue")


print(dialogue(["你好"]))

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

生成式问答

基于开源社区优秀中文预训练模型CPM,参数规模26亿,预训练中文数据达100GB。
调用示例:

智能写诗
基于开源社区优秀中文预训练模型CPM,参数规模26亿,预训练中文数据达100GB。
调用示例:

参考:

开始使用_飞桨-源于产业实践的开源深度学习平台

飞桨AI Studio星河社区-人工智能学习与实训社区

PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练_汀丶人工智能的技术博客_51CTO博客

欢迎使用PaddleNLP — PaddleNLP 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1404263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一次从有道云笔记迁移到语雀笔记

推荐阅读 智能化校园:深入探讨云端管理系统设计与实现(一) 智能化校园:深入探讨云端管理系统设计与实现(二) 1、安装git,python3等准备工作 文章中标注python3,为避免与python2 冲…

【正点原子STM32】C语言重点知识(配置MDK支持C99、位操作清零置一、带参数的宏定义、头文件的条件编译和代码条件编译、关键字、结构体指针、代码规范)

一、stdint.h简介 配置MDK支持C99 二、位操作 如何给寄存器某个位赋值(清零置一) 三、宏定义 带参数的宏定义 四、条件编译 头文件的条件编译和代码条件编译 五、extern声明 六、类型别名(typedef) 类型别名应用 七、结构体 应用举例&#xf…

muduo网络库剖析——线程Thread类

muduo网络库剖析——线程Thread类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精…

CentOS7安装Docker和docekr-compose

CentOS7安装Docker Docker 分为 CE 和 EE 两大版本。CE免费版,EE付费版 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10 第一步、检测系统环境 如果之前或者安装系统时候自带docker的话可以卸载(可选) 如果之…

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作

亚利桑那州立大学(简称“ASU”)在官网宣布与OpenAI达成技术合作。从2024年2月份开始,为所有学生提供ChatGPT企业版访问权限,主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品,AS…

Linux下软件安装的命令【RPM,YUM】及常用服务安装【JDK,Tomcat,MySQL】

Linux下软件安装的命令 源码安装 以源代码安装软件,每次都需要配置操作系统、配置编译参数、实际编译,最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。 RPM软件包管理 RPM安装软件的默认路径: 注意: /etc 配置文件放置目录…

基于Java SSM框架实现共享单车管理系统项目【项目源码+论文说明】

基于java的SSM框架实现共享单车管理系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于共享单车管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了…

鸿蒙自定义刷新组件使用

前言 DevEco Studio版本:4.0.0.600 1、RefreshLibrary_HarmonyOS.har,用于HarmonyOS "minAPIVersion": 9, "targetAPIVersion": 9, "apiReleaseType": "Release", "compileSdkVersion": "3.…

核苷酸与相对论的数学关系猜想

质量-鸟嘌呤 M-G 金 收缩 能量-胸腺嘧啶 E-T 火 混沌 时间-胞嘧啶 T-C 水 次序 空间-腺嘌呤 S-A 木 扩散 确定了这三种对应关系之后,我们就可以用相对论里面的数学关系来确定基因的关系 四边形理论有六个方…

python24.1.22创建类-定义对象属性

类:创建对象的模板,定义对象的属性和方法 对象:类的实例 Pascal命名法定义类名称 定义类 创建对象 返回对象属性

【百面机器学习】读书笔记(一)

本文系列主要作用就是读书笔记,自己看的话比较杂,没怎么归类过,所以现在跟着这个分类走一遍。本文主要内容为前两章,特征工程和模型评估。 如果我想起一些相关的内容也会做适当的补充,主打就是一个intuition&#xff…

基于XG24-EK2703A的BLE HID蓝牙键盘+鼠标复合设备功能开发(BLE+HID+FreeRTOS+Gecko SDK)

目录 项目介绍硬件介绍项目设计开发环境及工程参考总体流程图硬件基本配置应用初始化按键中断回调定时器回调按键响应任务蓝牙事件回调BLE HIDReport Map及报文键盘设备鼠标设备复合设备 发送字符串上/下滚动 功能展示项目总结 👉 【Funpack3-1】基于XG24-EK2703A的…

Django后台列表显示图片

在列表中显示ImageField的图片预览 编辑应用的models.py&#xff0c;添加下面代码&#xff1a; class Product(models.Model):# ...image models.ImageField(upload_toproducts/%Y/%m/%d, blankTrue)def image_data(self):if self.image:return format_html(<img src"…

2017年认证杯SPSSPRO杯数学建模B题(第二阶段)岁月的印记全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 B题 岁月的印记 原题再现&#xff1a; 对同一个人来说&#xff0c;如果没有过改变面容的疾病、面部外伤或外科手术等经历&#xff0c;年轻和年老时的面容总有很大的相似性。人们在生活中也往往能够分辨出来两张不同年龄段的照片是不是同一个人…

Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent 当前状况&#xff1a;kNN 搜索作为顶层部分 Elasticsearch 中的 kNN 搜索被组织为搜索请求的顶层&#xff08;top level&#xff09;部分。 我们这样设计是为了&#xff1a; 无论分片数量多少&#xff0c;它总…

【人工智能大脑】仿生学与人工智能交汇:基于MP神经网络的精准农业实践

MP神经网络&#xff0c;即McCulloch-Pitts模型&#xff08;MCP Model&#xff09;&#xff0c;是神经网络的早期形式之一&#xff0c;由Warren McCulloch和Walter Pitts在1943年提出。这个模型为现代人工神经网络的发展奠定了理论基础&#xff0c;并首次尝试模拟了生物神经元的…

Kotlin程序设计 扩展篇(一)

Kotlin程序设计&#xff08;扩展一&#xff09; **注意&#xff1a;**开启本视频学习前&#xff0c;需要先完成以下内容的学习&#xff1a; 请先完成《Kotlin程序设计》视频教程。请先完成《JavaSE》视频教程。 Kotlin在设计时考虑到了与Java的互操作性&#xff0c;现有的Ja…

RK3568 移植Ubuntu

使用ubuntu-base构建根文件系统 1、到ubuntu官网获取 ubuntu-base-18.04.5-base-arm64.tar.gz Ubuntu Base 18.04.5 LTS (Bionic Beaver) 2、将获取的文件拷贝到ubuntu虚拟机,新建目录,并解压 mkdir ubuntu_rootfs sudo tar -xpf u

Ubuntu之离线安装Gitlab,搭建私有代码仓库

Ubuntu之离线安装Gitlab,搭建私有代码仓库 文章目录 Ubuntu之离线安装Gitlab,搭建私有代码仓库1. 官网下载&#xff1a;2. 安装Gitlab3. 使用 1. 官网下载&#xff1a; https://packages.gitlab.com/gitlab/gitlab-ce wget下载地址&#xff1a; wget https://packages.gitla…

Linux命令_vim的详细用法

简介 vim是一款针对Linux和其他类Unix操作系统的文本编辑器。它是Vi编辑器的升级版本&#xff0c;具有丰富的功能和强大的扩展性。vim有三种基本模式&#xff1a;命令模式、插入模式和可视模式。 命令模式&#xff1a;用户可以使用各种命令移动光标和进行编辑操作&#xff0c;如…