
在 NLP 项目里环境配置往往比算法本身更消耗耐心。尤其是刚接触 Python 的读者可能会遇到“在 Jupyter 里 import 不到刚装的库”“不同项目依赖互相冲突”“Windows 下 Jupyter 打开空白页面”等一系列问题。本文作为 Jupyter Notebook 与 Python 虚拟环境配置系列的第二篇重点带大家把环境完整落地并跑通一个基于 NLP 的关键词提取实战示例。无论是准备入门 NLP、做文本分析还是在本地搭建实验环境这篇文章都能帮你少走弯路。1. 背景与核心概念1.1 为什么 NLP 项目需要 Jupyter NotebookJupyter Notebook 是一个基于浏览器的交互式开发环境核心特点是“按单元格执行”。你可以在一个 Notebook 文件里交替编写代码、运行结果、Markdown 说明和图表输出非常适合 NLP 这类需要反复实验、观察中间结果的任务。在 NLP 和关键词提取场景中我们经常需要处理原始文本、清洗数据、分词、过滤停用词、计算权重、可视化展示结果。如果用传统脚本一次性跑完中间任何一步出了问题都要从头调试效率很低。而 Jupyter Notebook 允许你把流程拆成多个单元格单步执行、单步检查还能随时修改某一行的逻辑不用重跑整个文件。这种交互方式让文本处理过程变得非常直观也更适合快速验证算法效果。1.2 虚拟环境解决什么问题虚拟环境是一套独立的 Python 运行空间每个环境拥有自己的 Python 解释器、第三方库和脚本入口。不同项目可以使用不同版本的依赖互不干扰。举例来说项目 A 需要transformers4.30.0项目 B 需要transformers4.41.0。如果都装在系统全局环境中升级一个库很可能导致另一个项目无法运行。虚拟环境将依赖隔离到各自目录中既避免了版本冲突也让项目具备可移植性——别人拿到你的项目后可以根据requirements.txt一键还原环境。在 NLP 开发中库依赖非常密集包括numpy、pandas、jieba、scikit-learn、transformers等依赖冲突的概率比普通项目高很多。因此为每个 NLP 项目单独创建虚拟环境是工程上最基础也最必要的习惯。1.3 关键词提取是什么关键词提取是 NLP 中非常经典的基础任务目标是从一段文本中自动找出最能代表主题的词或短语。它被广泛用于新闻标签生成、搜索引擎优化、舆情分析、文档摘要、推荐系统等场景。常见的实现思路有两种基于统计的方法比如 TF-IDF通过词频和逆文档频率衡量词语的重要性。基于图模型的方法比如 TextRank把文本中的词语看作图的节点利用词共现关系迭代计算权重。在中文环境下关键词提取通常先依赖分词工具把句子切分成词语然后才能计算权重。jieba是非常成熟的中文分词库内置了 TF-IDF 和 TextRank 两种关键词提取接口非常适合入门学习和快速验证。2. 环境准备与版本说明2.1 本教程适用的环境范围本文的配置思路是通用的但为了让示例更贴近大多数读者下面给出一个常见环境组合操作系统Windows 10/11 或 macOSLinux 也可以Python示例以 Python 3.10 为基础其他 3.8 以上版本同样适用虚拟环境使用 Python 自带的venv模块NotebookJupyter Notebook 与 JupyterLab 均适用第三方库jieba、numpy、pandas版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。如果你使用的是 Anaconda也可以用conda创建环境后面会单独说明。2.2 检查 Python 是否安装正确在开始之前先打开命令行工具。Windows 用户可以使用CMD或 PowerShellmacOS/Linux 用户使用终端。输入以下命令确认 Python 版本python --version如果系统同时安装了多个 Python可以尝试python3 --version预期输出类似Python 3.10.12如果没有安装 Python或者命令无法识别需要先到 Python 官网下载对应系统版本的安装包安装时务必勾选“Add Python to PATH”。这一步是后续所有操作的基础也是新手最容易忽略的地方。2.3 准备项目目录为了保持项目结构清晰建议先创建一个独立的目录例如nlp-keyword-demo。本文所有代码和文件都会放在这个目录下。在命令行中执行mkdir nlp-keyword-demo cd nlp-keyword-demo后续的虚拟环境、Notebook 文件和数据文件都会围绕这个目录组织。这样做的好处是项目边界清晰删除、备份、迁移都方便。3. 创建 Python 虚拟环境3.1 使用 venv 创建环境进入项目目录后运行以下命令创建虚拟环境python -m venv venv命令完成后目录下会多出一个venv文件夹里面包含独立的 Python 解释器、标准库和pip工具。Windows 用户激活环境的命令是venv\Scripts\activatemacOS/Linux 用户使用source venv/bin/activate激活成功后命令行提示符前面会出现(venv)标识说明当前已经进入虚拟环境。后续安装的包都会装到这个环境里不会污染系统全局 Python。3.2 使用 conda 创建环境可选如果你使用的是 Anaconda也可以不依赖venv直接用 conda 创建环境conda create -n nlp-keyword python3.10 conda activate nlp-keyword这种方式更适合已经习惯 Anaconda 生态的开发者。需要注意conda 环境和 venv 环境是两套体系不要混用pip和conda随意互相安装否则可能出现依赖跟踪混乱。3.3 升级 pip 并安装基础依赖激活虚拟环境后先升级pip确保后续安装依赖时使用最新版本的工具python -m pip install --upgrade pip然后安装后续需要的库pip install jieba numpy pandas安装过程会显示依赖解析和下载进度。看到Successfully installed字样说明安装成功。如果下载速度较慢可以临时使用国内镜像源pip install jieba numpy pandas -i https://pypi.tuna.tsinghua.edu.cn/simple在“Python 安装 numpy 库的方法”“请安装缺失的包以使用此工作流”等场景中本质上都是同一个思路先激活正确的虚拟环境再用pip install安装对应依赖。很多环境问题并不是包本身有问题而是装错了环境。4. 将虚拟环境接入 Jupyter Notebook4.1 为什么 Jupyter 里 import 不到刚装的库很多新手会遇到这样的情况在命令行里打开 Pythonimport jieba没有问题但打开 Jupyter Notebook 后却报错ModuleNotFoundError: No module named jieba。根本原因在于Jupyter 默认使用启动时关联的 Python 内核而这个内核不一定属于你当前激活的虚拟环境。如果你在全局环境安装 Jupyter在虚拟环境里安装jiebaNotebook 自然找不到虚拟环境里的包。解决方法是把当前虚拟环境注册为 Jupyter 的内核。这样一来Jupyter 就知道哪个 Notebook 应该使用哪个 Python 环境依赖互不干扰。4.2 在虚拟环境中安装 ipykernel激活虚拟环境后安装ipykernel它是 Jupyter 和 Python 环境之间的桥接工具pip install ipykernel然后执行注册命令python -m ipykernel install --user --namenlp-keyword --display-namePython (nlp-keyword)--name是内核的标识名建议和虚拟环境名保持一致。--display-name是 Jupyter 界面中显示的名称可以自由设置。执行成功后命令行会输出类似Installed kernelspec nlp-keyword的信息表示内核注册成功。4.3 启动 Jupyter Notebook 并切换内核刚才的注册操作是在虚拟环境里完成的。如果 Jupyter Notebook 尚未安装可以继续在虚拟环境里安装pip install jupyter安装完成后启动jupyter notebook也可以使用 JupyterLabjupyter lab浏览器打开 Notebook 页面后点击右上角的“内核”选项就能看到刚才注册的Python (nlp-keyword)内核。切换到该内核后Notebook 里的代码就会使用虚拟环境的解释器import jieba也就不会再报错了。4.4 Jupyter Notebook 与 JupyterLab 的区别很多初学者分不清 Notebook 和 Lab 的关系。简单来说JupyterLab 是 Jupyter Notebook 的“升级版”它提供了更现代的多标签页面、文件管理、终端、拖拽布局等能力面向更复杂的开发场景。新版 JupyterLab 默认也支持打开.ipynb文件两者的内核体系完全兼容。对于 NLP 关键词提取这类任务两者都可以使用。如果你是刚入门直接用jupyter notebook更简洁如果后续需要在多个 Notebook 之间切换或者要到 JupyterLab 里写代码、看文件推荐直接使用 JupyterLab。5. 完整实战NLP 关键词提取示例5.1 实战目标在完成环境搭建后我们通过一个具体案例验证整个链路是否正常。任务是从一段新闻文本中提取关键词使用jieba库分别实现 TF-IDF 和 TextRank 两种算法并对比输出结果。5.2 创建 Notebook 文件在 Jupyter 页面上点击右侧“新建”选择Python (nlp-keyword)内核新建一个 Notebook。将其重命名为keyword_extraction.ipynb。整个 Notebook 会按单元格执行下面每一个代码块都对应 Notebook 中的一个单元格。5.3 编写关键词提取代码首先引入依赖库import jieba import jieba.analyse导入成功说明环境配置正确。如果这里报错需要回到第 4 节检查内核是否切换到了虚拟环境。准备一段测试文本这里使用一段模拟的科技新闻内容text 人工智能技术正在深刻改变各行各业。自然语言处理作为人工智能的重要方向 主要研究如何让计算机理解、生成和处理人类语言。关键词提取是自然语言处理 领域的一项基础任务它能够从文本中自动识别出具有代表性的词语或短语 广泛应用于新闻标签生成、搜索引擎优化、舆情分析和文档摘要等场景。 近年来基于深度学习的文本表示方法取得显著进展预训练语言模型的出现 进一步提升了关键词提取和文本分类等任务的准确率。 使用 TF-IDF 算法提取关键词print(TF-IDF 关键词提取结果) keywords_tfidf jieba.analyse.extract_tags(text, topK10, withWeightTrue) for word, weight in keywords_tfidf: print(f{word}\t{weight:.4f})topK10表示返回权重最高的前 10 个关键词withWeightTrue表示同时返回权重值。TF-IDF 的核心思想是一个词在当前文本中出现的次数越多同时在其他文本中出现得越少就越能代表当前文本的主题。使用 TextRank 算法提取关键词print(\nTextRank 关键词提取结果) keywords_textrank jieba.analyse.textrank(text, topK10, withWeightTrue) for word, weight in keywords_textrank: print(f{word}\t{weight:.4f})TextRank 算法不依赖外部语料库它通过构建词语之间的共现图来迭代计算权重。对于没有现成语料统计的场景TextRank 是一种更高效的选择。5.4 去掉停用词进一步优化在真实的文本预处理中分词结果往往包含大量“的”“了”“是”“和”这类无实际意义的停用词。它们会影响关键词提取的效果。我们可以简单设置一个停用词列表在提取后过滤掉这些词。示例代码stopwords {的, 了, 是, 和, 在, 与, 中, 等, 进一步} def filter_stopwords(keywords): return [(word, weight) for word, weight in keywords if word not in stopwords] print(过滤停用词后的 TF-IDF 结果) filtered_tfidf filter_stopwords(keywords_tfidf) for word, weight in filtered_tfidf: print(f{word}\t{weight:.4f})这里只是演示最基础的停用词过滤思路。在实际项目中建议使用完整的停用词表例如哈工大停用词表、百度停用词表等。5.5 运行结果说明在 Notebook 中依次执行以上单元格预期输出大致如下TF-IDF 关键词提取结果 自然语言处理 0.3521 关键词提取 0.3012 人工智能 0.2764 文本表示 0.2208 预训练语言模型 0.2015 ... TextRank 关键词提取结果 文本 0.2045 任务 0.1763 领域 0.1682 ...从结果可以看到TF-IDF 更倾向提取有区分度的领域词如“自然语言处理”“关键词提取”。TextRank 提取的结果更偏向高频的通用词如果文本较短效果可能会受到一定影响。在实际项目中可以根据业务场景选择适合的算法也可以将两种算法的结果做交集或加权融合。6. 常见问题与排查思路6.1 Windows 下 Jupyter Notebook 打开后空白现象启动jupyter notebook后浏览器打开页面但页面一直白屏或加载不出来。常见原因Jupyter 版本和浏览器兼容性问题。浏览器缓存异常。Notebook 服务端口被占用。默认浏览器与 Jupyter 不兼容。排查步骤强制刷新浏览器页面快捷键Ctrl F5。换一个浏览器访问例如从默认浏览器切换到 Chrome 或 Edge。确认启动服务时的命令行窗口没有报错。清空浏览器缓存后重试。解决方案升级 Jupyter 到较新版本pip install --upgrade jupyter指定端口启动避免端口冲突jupyter notebook --port8889更换浏览器时可以手动复制终端输出的 URL 到新浏览器打开。这种情况在 Windows 系统上比较常见本质上是 Web 前端加载问题和虚拟环境没有直接关系。6.2 内核连接失败或一直显示 Connecting现象Notebook 页面能打开但无法执行代码顶部显示Connecting to kernel或者连接失败。常见原因内核注册信息和 Python 版本不匹配。ipykernel版本过旧。多个 Python 环境混用导致内核路径指向错误。解决方案删除旧内核并重新注册jupyter kernelspec list jupyter kernelspec remove nlp-keyword python -m pip install --upgrade ipykernel python -m ipykernel install --user --namenlp-keyword --display-namePython (nlp-keyword)重点是要在目标虚拟环境内执行注册命令而不是在全局环境里注册。6.3 import 第三方库时报 ModuleNotFoundError现象ModuleNotFoundError: No module named jieba常见原因库没有安装到当前使用的内核对应的 Python 环境中。Notebook 使用的内核不是虚拟环境的内核。排查步骤在 Notebook 单元格中执行以下命令打印当前 Python 解释器路径import sys print(sys.executable)观察输出的路径是否指向venv目录下的 Python。如果不是说明内核选错了。在虚拟环境内重新执行pip install jieba。这个步骤能快速定位 90% 的环境类问题。建议把它记在心里以后遇到任何 import 失败先检查解释器路径。6.4 pip 安装依赖速度慢或超时现象执行pip install jieba时下载很慢或者超时中断。解决方案使用国内镜像源pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple想永久修改 pip 默认源可以执行pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple需要注意的是更换 pip 源后依赖的校验逻辑不变只是下载来源不同对项目本身没有副作用。6.5 其他 Python 环境异常在网络上搜索“windows jupyter notebook 打开后空白”“python 安装”“vscode python 环境配置”“pycharm 的 jupyter notebook 怎么使用”等热点问题时核心都指向一个原则先分清当前代码运行在哪个 Python 环境再决定往哪里装依赖。如果你使用 VSCode可以在命令面板中执行Python: Select Interpreter选择虚拟环境的解释器如果使用 PyCharm则在Settings - Project - Python Interpreter中指定环境。这些工具本质上都是在解决“让编辑器识别正确 Python 环境”的问题。7. 最佳实践与工程建议7.1 项目环境必须隔离不要图省事把所有库都装在全局环境中。每一项目都创建独立虚拟环境并在项目根目录维护依赖清单是 Python 工程化的底线。尤其在 NLP 项目中像jieba、scikit-learn、transformers这类库的依赖树非常复杂混装很容易引发难以排查的冲突。建议环境命名规则与项目保持一致例如项目叫nlp-keyword-demo环境名就叫nlp-keyword。这样看到内核名称就能知道它属于哪个项目。7.2 用 requirements.txt 固定依赖版本当虚拟环境已经安装好所有依赖后使用以下命令导出依赖清单pip freeze requirements.txt别人拿到项目后只需执行pip install -r requirements.txt就能复现完全相同的依赖环境。这个操作在团队协作、服务器部署、环境迁移时非常重要。注意pip freeze会导出非常详细的版本信息如果只想导出顶层依赖可以手动维护一个更精简的requirements.txt。7.3 不要重复安装库安装依赖前可以先查看当前环境已经安装了哪些包pip list尤其注意jieba、numpy这类常用库如果在虚拟环境中已经存在就不需要重复安装。重复安装不仅浪费时间还可能无意中改变依赖版本。7.4 内核命名规范注册 Jupyter 内核时建议使用与虚拟环境一致的名称。例如python -m ipykernel install --user --namenlp-keyword --display-namePython (nlp-keyword)当项目数量变多后清晰的内核名称能避免很多误操作。如果内核命名混乱很容易在多个项目之间来回切换时选错环境。7.5 定期清理不再使用的内核长时间开发后系统里可能残留很多无用的内核。使用以下命令查看所有内核jupyter kernelspec list如果确认某个内核不再需要可以执行jupyter kernelspec remove kernel-name保持环境干净整洁对后续开发会顺畅很多。7.6 文本处理中的数据安全与边界处理在 NLP 实战中除了环境配置还需要注意数据处理的边界条件空文本如果传入的文本为空分词和关键词提取会返回空结果代码中要处理这种边界情况。超长文本当文本很长时关键词提取的时间会显著增加可以考虑分段落处理或限制输入长度。编码问题读取外部文本文件时要注意文件编码格式中文文本最好统一使用 UTF-8 编码。这些细节看似不起眼在实际项目中往往决定了程序是否健壮。8. 总结本文围绕 Jupyter Notebook 与 Python 虚拟环境在 NLP 关键词提取场景中的完整配置流程依次讲解了虚拟环境概念、创建虚拟环境、注册 Jupyter 内核、切换内核、运行关键词提取示例以及常见问题排查。核心要点可以概括为以下几条每个项目使用独立的虚拟环境避免依赖冲突。Jupyter 的“内核”概念是环境隔离的关键注册内核时要保证在正确的虚拟环境中执行。遇到ModuleNotFoundError时先检查sys.executable指向的 Python 路径。关键词提取可以直接使用jieba库的 TF-IDF 和 TextRank 接口快速验证 NLP 想法。Windows 下的 Jupyter 空白页、内核连接失败等问题大多可以通过重新安装内核、升级 Jupyter 解决。如果你想把环境配置能力进一步延伸下一步可以学习使用conda管理复杂的数据科学环境。在 VSCode 和 PyCharm 中配置 Jupyter Notebook。将关键词提取算法替换为基于深度学习的文本表示方法。结合pandas做批量新闻文本的关键词提取与统计分析。动手把示例代码在自己的机器上完整跑一遍比反复看教程更有价值。如果我在这个过程中卡住了建议先从环境隔离和内核切换两个角度排查再回到本文对应章节逐项检查。