自然语言处理程序技术文档
1. 文本分词与自定义词典管理:实现对文本的分词操作,并支持加载自定义词典以优化分词效果。2. 词频统计分析及可视化(饼图/柱状图):统计文本中词语出现的频率,并通过饼图和柱状图进行可视化展示。3. 词性标注与分类存储:对文本中的词语进行词性标注,并将标注结果分类存储。4. 命名实体识别(人名/地名/武器):识别文本中的人名、地名和武器等实体信息。5. 词云可视化:根据文本词频生成词云图,直观展示
一、程序功能
1. 文本分词与自定义词典管理:实现对文本的分词操作,并支持加载自定义词典以优化分词效果。
2. 词频统计分析及可视化(饼图/柱状图):统计文本中词语出现的频率,并通过饼图和柱状图进行可视化展示。
3. 词性标注与分类存储:对文本中的词语进行词性标注,并将标注结果分类存储。
4. 命名实体识别(人名/地名/武器):识别文本中的人名、地名和武器等实体信息。
5. 词云可视化:根据文本词频生成词云图,直观展示文本中重要词汇。
二、设计思想
1. 模块化设计:将每个功能封装为独立函数,提高代码的可维护性和复用性。
2. 面向对象与函数式编程结合:在实现过程中综合运用两种编程范式,以达到简洁高效的代码结构。
3. 可视化结果自动存储机制:将生成的可视化图表自动保存到指定路径。
4. 支持中文文本处理:主要针对中文文本进行自然语言处理操作。
三、核心库与函数

四、代码实现
import jieba
import jieba.posseg as pseg
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
def load_custom_dict(filepath):
"""加载自定义词典"""
try:
with jieba.open(filepath, 'r', encoding='utf - 8') as f:
for line in f:
word, _, _ = line.strip().split(' ')
jieba.add_word(word)
except FileNotFoundError:
pass
def tokenize_text(text, use_stopwords=True):
"""文本分词处理"""
words = jieba.lcut(text)
if use_stopwords:
try:
with jieba.open('data/stopwords.txt', 'r', encoding='utf - 8') as f:
stopwords = set(f.read().split())
return [w for w in words if w not in stopwords and len(w) > 1]
except FileNotFoundError:
return words
return words
def analyze_pos(text, save_path='output/pos_analysis.txt'):
"""词性标注与分析"""
pos_result = pseg.cut(text)
pos_dict = {}
for w, p in pos_result:
pos_dict.setdefault(p, []).append(w)
try:
with jieba.open(save_path, 'w', encoding='utf - 8') as f:
for p, words in pos_dict.items():
f.write(f"{p}: {len(words)}\n")
except FileNotFoundError:
pass
return pos_dict
def generate_wordcloud(word_freq, save_path='output/wordcloud.png'):
"""生成词云图"""
wc = WordCloud(
font_path='data/simhei.ttf',
background_color='white',
max_words=200
).generate_from_frequencies(word_freq)
plt.figure(figsize=(15, 10))
plt.imshow(wc)
plt.axis('off')
plt.savefig(save_path)
plt.close()
def visualize_word_frequency_pie(word_freq, save_path='output/freq_pie.png'):
"""绘制词频统计饼图"""
labels = [word for word, _ in word_freq]
sizes = [freq for _, freq in word_freq]
plt.figure(figsize=(8, 8))
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.axis('equal')
plt.savefig(save_path)
plt.close()
def visualize_word_frequency_bar(word_freq, save_path='output/freq_bar.png'):
"""绘制词频统计柱状图"""
x = [word for word, _ in word_freq]
y = [freq for _, freq in word_freq]
plt.figure(figsize=(12, 6))
plt.bar(x, y)
plt.xticks(rotation=45)
plt.xlabel('Words')
plt.ylabel('Frequency')
plt.tight_layout()
plt.savefig(save_path)
plt.close()
# 其他功能函数(实体识别等)
if __name__ == "__main__":
initialize_environment()
load_custom_dict('data/custom_dict.txt')
try:
with jieba.open('data/sample.txt', 'r', encoding='utf - 8') as f:
text = f.read()
except FileNotFoundError:
text = ""
words = tokenize_text(text)
word_freq = Counter(words).most_common(50)
analyze_pos(text)
generate_wordcloud(dict(word_freq))
visualize_word_frequency_pie(word_freq)
visualize_word_frequency_bar(word_freq)
五、测试数据
测试文本(data/sample.txt):
三国演义选段:却说曹操引军自南阳进发,关羽提青龙偃月刀率军迎战。两军会于博望坡,张飞持丈八蛇矛且说曹操当日对何进曰:“宦官之祸,古今皆有;但世主不当假之权宠,使至于此。若欲治罪,当除元恶,但付一狱吏足矣,何必纷纷召外兵乎?欲尽诛之,事必宣露。吾料其必败也。”何进怒曰:“孟德亦怀私意耶?”操退曰:“乱天下者,必进也。”进乃暗差使命,赍密诏星夜往各镇去。
却说前将军、鳌乡侯、西凉刺史董卓,先为破黄巾无功,朝议将治其罪,因贿赂十常侍幸免;后又结托朝贵,遂任显官,统西州大军二十万,常有不臣之心。是时得诏大喜,点起军马,陆续便行;使其婿中郎将牛辅;守住陕西,自己却带李傕、郭汜、张济、樊稠等提兵望洛阳进发。
卓婿谋士李儒曰:“今虽奉诏,中间多有暗味。何不差人上表,名正言顺,大事可图。”卓大喜,遂上表。其略曰:“窃闻天下所以乱逆不止者,皆由黄门常侍张让等侮慢天常之故。臣闻扬汤止沸,不如去薪;溃痈虽痛,胜于养毒。臣敢鸣钟鼓入洛阳,请除让等。社稷幸甚!天下幸甚!”何进得表,出示大臣。侍御史郑泰谏曰:“董卓乃豺狼也,引入京城,必食人矣。”进曰:“汝多疑,不足谋大事。”卢植亦谏曰:“植素知董卓为人,面善心狠;一入禁庭,必生祸患。不如止之勿来,免致生乱。”进不听,郑泰、卢植皆弃官而去。朝廷大臣,去者大半。进使人迎董卓于渑池,卓按兵不动。
张让等知外兵到,共议曰:“此何进之谋也;我等不先下手,皆灭族矣。”乃先伏刀斧手五十人于长乐宫嘉德门内,入告何太后曰:“今大将军矫诏召外兵至京师,欲灭臣等,望娘娘垂怜赐救。”太后曰:“汝等可诣大将军府谢罪。”让曰:“若到相府,骨肉齑粉矣。望娘娘宣大将军入宫谕止之。如其不从,臣等只就娘娘前请死。”太后乃降诏宣进。
进得诏便行。主簿陈琳谏曰:“太后此诏,必是十常侍之谋,切不可去。去必有祸。”进曰:“太后诏我,有何祸事?”袁绍曰:“今谋已泄,事已露,将军尚欲入宫耶?”曹操曰:“先召十常侍出,然后可入。”进笑曰:“此小儿之见也。吾掌天下之权,十常侍敢待如何?”绍曰:“公必欲去,我等引甲士护从,以防不测。”于是袁绍、曹操各选精兵五百,命袁绍之弟袁术领之。袁术全身披挂,引兵布列青琐门外。绍与操带剑护送何进至长乐宫前。黄门传懿旨云:“太后特宣大将军,余人不许辄入。”将袁绍、曹操等都阻住宫门外。
何进昂然直入。至嘉德殿门,张让、段珪迎出,左右围住,进大惊。让厉声责进曰:“董后何罪,妄以鸩死?国母丧葬,托疾不出!汝本屠沽小辈,我等荐之天子,以致荣贵;不思报效,欲相谋害,汝言我等甚浊,其清者是谁?”进慌急,欲寻出路,宫门尽闭,伏甲齐出,将何进砍为两段。后人有诗叹之曰;“汉室倾危天数终,无谋何进作三公。几番不听忠臣谏,难免宫中受剑锋。”
六、输出结果
1. 文本分析结果:
- output/pos_analysis.txt
- output/person_names.txt
- output/locations.txt
2. 可视化文件:
- output/wordcloud.png
- output/freq_pie.png
- output/freq_bar.png
七、设计分析
1. 模块化设计便于功能扩展:每个功能独立成函数,后续可方便地对特定功能进行修改或添加新功能。
2. 可视化采用matplotlib库实现基础图表绘制:利用matplotlib库绘制饼图、柱状图,简单直观展示词频信息。
3. 自定义词典机制提升专业领域分词效果:通过加载自定义词典,可使分词更符合特定领域需求。
更多推荐



所有评论(0)