第一篇:四大名著自然语言处理实战教程第二篇:AI编程助手使用教程 第三篇:自然语言处理的应用与我的兴趣
第一篇:四大名著自然语言处理实战教程
一、引言
作为软件工程专业大三学生,本学期在《Python与数据分析》课程中学习了自然语言处理基础知识。为了深入理解中文分词、词频统计、可视化等技术,我选择四大名著作为分析对象,完成了一个完整的NLP分析项目。
二、程序实现的功能
本程序实现了以下功能,并全部封装为函数:
| 功能模块 |
函数名 |
说明 |
| 文本加载 | load_text() | 读取TXT文件 |
| 中文分词 | cut_words() | 使用jieba精确模式分词 |
| 词频统计 | count_words() | 统计高频词 |
| 词性标注 | tag_words() | 标注每个词的词性 |
| 分类保存 | save_by_pos() | 按人名/地名/武器分类保存 |
| 饼状图 | draw_pie() | 可视化词频占比 |
| 柱状图 | draw_bar() | 展示TOP20高频词 |
| 词云 | draw_wordcloud() | 生成词云图 |
| 自定义词典 | load_user_dict() | 加载手动添加的词语 |
| 关系图 | draw_relation() | 展示人物共现关系 |
三、设计思想
1. 模块化设计:每个功能独立成函数,主程序只负责调用,便于调试和复用
2. 数据与逻辑分离:文本文件、停用词表、自定义词典都放在外部
3. 可视化优先:用图表直观展示分析结果,便于理解和汇报
4. 可扩展性:预留接口,方便后续添加情感分析、文本分类等功能
四、用到的库和函数详解
1. jieba —— 中文分词核心库
import jieba
import jieba.posseg as pseg
# 精确模式分词
words = jieba.cut(text)
# 词性标注
words_with_flag = pseg.cut(text)
# 加载自定义词典
jieba.load_userdict('mydict.txt')
# 动态添加词语
jieba.add_word('花果山')
2. collections.Counter —— 词频统计
from collections import Counter
word_count = Counter(word_list)
top10 = word_count.most_common(10)
3. wordcloud —— 词云生成
from wordcloud import WordCloud
wc = WordCloud(font_path='simhei.ttf', width=800, height=600)
wc.generate(text)
4. matplotlib —— 数据可视化
import matplotlib.pyplot as plt
# 饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
# 柱状图
plt.bar(labels, values)
# 显示图形
plt.show()
5. networkx —— 关系图
import networkx as nx
G = nx.Graph()
G.add_edges_from(relations)
nx.draw(G, with_labels=True)
五、测试数据说明
• 文本来源:《红楼梦》《西游记》《水浒传》《三国演义》TXT版本(UTF-8编码)
• 自定义词典示例(mydict.txt):
text
贾宝玉 nr
林黛玉 nr
孙悟空 nr
猪八戒 nr
金箍棒 n
青龙偃月刀 n
• 停用词表(stopwords.txt):过滤掉“的”“了”“在”等无意义词
六、核心代码实现
import os
import jieba
import jieba.posseg as pseg
from collections import Counter
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import matplotlib
matplotlib.use('TkAgg') # 强制使用弹窗后端
from wordcloud import WordCloud
import networkx as nx
# 1. 加载文本
def load_text(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
return f.read()
# 2. 加载停用词
def load_stopwords(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
return set([line.strip() for line in f])
# 3. 分词(过滤停用词和单字词)
def cut_words(text, stopwords):
words = jieba.lcut(text)
return [w for w in words if w not in stopwords and len(w) > 1]
# 4. 词频统计
def count_words(word_list, topN=20):
counter = Counter(word_list)
return counter.most_common(topN)
# 5. 按词性分类保存
def save_by_pos(text, pos, filename):
words = pseg.cut(text)
result = [w.word for w in words if w.flag == pos]
with open(filename, 'w', encoding='utf-8') as f:
f.write('\n'.join(set(result))) # 去重保存
# 6. 绘制饼图
def draw_pie(data, title, savepath=None):
labels, sizes = zip(*data)
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title(title)
if savepath:
plt.savefig(savepath)
plt.show()
# 7. 绘制柱状图
def draw_bar(data, title, savepath=None):
labels, values = zip(*data)
plt.figure(figsize=(12, 6))
plt.bar(labels, values)
plt.title(title)
plt.xticks(rotation=45)
if savepath:
plt.savefig(savepath)
plt.show()
# 8. 生成词云
def draw_wordcloud(text, imgname):
wc = WordCloud(
font_path='simhei.ttf',
width=800,
height=600,
background_color='white',
max_words=200
).generate(text)
plt.figure(figsize=(10, 8))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.savefig(imgname)
plt.show()
# 9. 生成人物共现关系图
def draw_relation(text, characters, imgname):
relations = []
paragraphs = text.split('\n')
for para in paragraphs:
present = [c for c in characters if c in para]
for i in range(len(present)):
for j in range(i+1, len(present)):
relations.append((present[i], present[j]))
G = nx.Graph()
G.add_edges_from(relations)
plt.figure(figsize=(12, 10))
nx.draw(G, with_labels=True, node_color='skyblue',
node_size=2000, font_size=10)
plt.savefig(imgname)
plt.show()
# 10. 主程序
def main():
# 配置路径
text_file = 'hlm.txt'
stopwords_file = 'stopwords.txt'
user_dict = 'mydict.txt'
# 加载自定义词典
if os.path.exists(user_dict):
jieba.load_userdict(user_dict)
# 加载数据
text = load_text(text_file)
stopwords = load_stopwords(stopwords_file)
# 分词
words = cut_words(text, stopwords)
# 词频统计
top20 = count_words(words, 20)
print('TOP20高频词:', top20)
# 可视化
draw_bar(top20, '《红楼梦》高频词TOP20', 'hlm_top20.png')
draw_wordcloud(' '.join(words), 'hlm_wordcloud.png')
# 分类保存
save_by_pos(text, 'nr', '红楼梦人物.txt')
save_by_pos(text, 'ns', '红楼梦地名.txt')
# 人物关系图
if os.path.exists('红楼梦人物.txt'):
with open('红楼梦人物.txt', 'r', encoding='utf-8') as f:
characters = [line.strip() for line in f if line.strip()]
if characters:
draw_relation(text, characters[:20], 'hlm_relation.png')
print('所有任务完成!')
if __name__ == '__main__':
main()
七、运行结果展示

图一:红楼梦高频词柱状图

图二:词云图

图三:红楼梦人物

图四:红楼梦地名
八、遇到的问题及解决
1. 编码问题:TXT文件必须保存为UTF-8格式
2. 自定义词典不生效:需要在分词前加载
3. 词云中文乱码:必须指定中文字体路径
4. 内存溢出:处理大文本时分批读取
九、总结与收获
通过本次实战,我不仅掌握了jieba、wordcloud、matplotlib等库的使用,更重要的是学会了如何将自然语言处理技术应用到真实文本分析中。模块化编程思想让代码更加清晰,也为后续添加新功能打下基础。
第二篇:AI编程助手使用教程
一、引言
最近在写代码时,我开始尝试使用AI编程助手。从最开始的怀疑,到现在的“真香”,我想分享一下我对OpenClaw、CodeX等工具的使用心得。
二、什么是AI编程助手?
AI编程助手是基于大语言模型的代码生成工具,可以根据自然语言描述生成代码、解释代码、优化算法、添加注释等。
常见的AI编程助手:
| 名称 | 开发者 | 特点 |
| GitHub Copilot | GitHub/OpenAI | 基于CodeX,IDE插件 |
| CodeX | OpenAI | 强大的代码生成能力 |
| OpenClaw | 国内团队 | 免费、支持中文 |
| 通义灵码 | 阿里云 | 中文友好 |
| CodeGeeX | 智谱AI | 开源免费 |
三、OpenClaw使用教程
1. 安装
在VS Code插件市场搜索“OpenClaw”并安装
2. 基本用法
• 代码生成:输入注释,按Tab键接受建议
# 生成一个快速排序函数
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
-
代码解释:选中代码,右键选择“Explain this code”
-
代码优化:选中代码,右键选择“Optimize this code”
-
添加注释:选中代码,右键选择“Add comments”
3. 实战案例
在写四大名著NLP项目时,我需要一个函数来统计两个人物在同一段落出现的次数,OpenClaw直接帮我生成了:
def count_cooccurrence(text, char1, char2):
"""
统计两个人物在同一段落出现的次数
"""
paragraphs = text.split('\n')
count = 0
for para in paragraphs:
if char1 in para and char2 in para:
count += 1
return count
四、CodeX使用教程
1. 访问方式
• 通过OpenAI API调用
• 或使用GitHub Copilot(基于CodeX)
2. 提示词技巧
• 明确需求:告诉AI你要什么
• 提供上下文:给出已有代码片段
• 分步生成:先写主逻辑,再补充细节
示例:
text
请帮我写一个Python函数,功能是:
1. 读取一个TXT文件
2. 使用jieba进行分词
3. 过滤停用词
4. 返回词频统计结果
3. CodeX生成的代码
def analyze_text(filepath, stopwords_file):
import jieba
from collections import Counter
with open(filepath, 'r', encoding='utf-8') as f:
text = f.read()
with open(stopwords_file, 'r', encoding='utf-8') as f:
stopwords = set([line.strip() for line in f])
words = jieba.lcut(text)
words = [w for w in words if w not in stopwords and len(w) > 1]
return Counter(words).most_common(20)
五、AI编程助手的优缺点
优点
✅ 提高编码速度
✅ 减少查阅文档时间
✅ 提供多种实现思路
✅ 帮助学习新语法
缺点
❌ 可能生成错误代码
❌ 需要人工审核
❌ 对复杂业务理解有限
❌ 隐私安全问题
六、将来我能在编程中运用吗?
当然能! 而且已经在用了。
我认为AI不是替代程序员,而是像计算器替代算盘一样,让我们更专注于创造性的工作。
我已经把GitHub Copilot加入日常开发工具链,写作业、做项目、刷LeetCode都用它辅助。未来我会继续探索AI在代码审查、测试生成、文档编写等方面的应用。
七、给同学的建议
1. 不要把AI当“作弊工具”,要当“学习伙伴”
2. 生成的代码一定要自己理解后再使用
3. 多问AI“为什么”,让它解释代码逻辑
4. 遇到不会的问题,先自己想,再看AI建议
第三篇:自然语言处理的应用与我的兴趣
一、引言
自然语言处理(NLP)是人工智能的重要分支,让计算机能够理解、处理和生成人类语言。作为软件工程专业学生,我对这个领域充满好奇。
二、NLP的主要应用领域
1. 智能客服
京东、淘宝的自动回复机器人,可以理解用户问题并给出答案。
2. 机器翻译
Google翻译、DeepL,让跨语言交流成为可能。
3. 语音助手
小爱同学、Siri、天猫精灵,听懂我们的指令并执行。
4. 情感分析
分析社交媒体评论的情感倾向(正面/负面),用于舆情监控。
5. 文本分类
垃圾邮件过滤、新闻分类、意图识别。
6. 信息抽取
从文本中提取人名、地名、时间、事件。
7. 自动摘要
长文档自动生成摘要,如新闻简报。
8. 智能写作
作文批改、新闻撰写、诗歌生成。
三、我身边哪些东西用了NLP?
· 微信输入法:语音转文字、联想输入
· 网易云音乐:歌词分词、评论情感分析
· 百度搜索:关键词提取、语义理解
· CSDN问答:自动推荐相关答案
· 知网:论文关键词提取、文献推荐
· 学校教务系统:智能问答机器人(有的学校已部署)
四、我对NLP的兴趣点
1. 想做一个小型聊天机器人
用Seq2Seq或Transformer模型,做一个能陪我聊天的AI。
2. 想学情感分析
分析微博评论,看看大家对一个事件的态度。
3. 想参与开源NLP项目
比如HuggingFace的中文模型贡献。
4. 未来职业方向
· NLP算法工程师
· AI产品经理(懂技术+懂业务)
· 数据分析师(用NLP处理文本数据)
五、我对NLP的理解
自然语言处理不仅仅是技术,它让计算机更懂人类。未来,随着大模型的发展,NLP会渗透到更多领域:
· 教育:个性化学习助手
· 医疗:病历分析、智能问诊
· 法律:合同审查、案例检索
· 金融:研报分析、舆情监控
作为软件工程专业学生,我会继续深入学习Python、机器学习、深度学习,争取早日入门NLP,做出有实际价值的应用。
六、结语
AI时代,NLP是每个程序员都应该了解的方向。不管将来做开发、算法还是产品,懂NLP都会让你更有竞争力。希望这篇博文能帮你打开NLP的大门!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)