A. 程序文档
- 分词处理:精准分词,支持中文自然语言分析
- 词频统计:多维度词频分析,识别高频词
- 词性分类:智能标注词性,按类别存储
- 数据可视化:多图表展示分析结果
- 自定义词典:灵活扩展领域词汇识别
- 实体统计:精确提取特定实体(人名、地名、专业词汇)
2. 设计思想
- 模块化架构:功能解耦,单一职责原则
- 高扩展性:支持动态词典和算法插拔
- 清晰数据流:标准化处理流程
- 用户友好:简单交互,直观展示
3. 关键依赖库
- jieba (v0.42+):中文分词、词性标注
- collections.Counter:高效词频统计
- matplotlib (v3.5+):数据可视化
- networkx:复杂网络分析
- wordcloud:词云生成
- tkinter:跨平台GUI
B. 代码实现
# 导入必要的库
import jieba # 中文分词库
import jieba.posseg as pseg # 中文分词及词性标注
from collections import Counter # 词频统计
import matplotlib.pyplot as plt # 数据可视化
from wordcloud import WordCloud # 词云生成
import networkx as nx # 网络图分析(虽然本代码未使用)
import tkinter as tk # GUI界面
from tkinter import filedialog, messagebox # 文件对话框和消息框
import logging # 日志记录
import os # 文件和路径操作
# 配置日志系统,设置日志级别和格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
class NLPProcessor:
def __init__(self, user_dict_path='userdict.txt'):
"""
初始化NLP处理器
:param user_dict_path: 自定义词典路径,默认为userdict.txt
"""
self.user_dict_path = user_dict_path
self._load_user_dict() # 加载自定义词典
def _load_user_dict(self):
"""
加载用户自定义词典,增强分词和识别能力
"""
try:
if os.path.exists(self.user_dict_path):
jieba.load_userdict(self.user_dict_path) # 加载自定义词典
logging.info(f"成功加载自定义词典:{self.user_dict_path}")
except Exception as e:
logging.error(f"加载词典失败:{e}")
def tokenize_text(self, text):
"""
对输入文本进行分词处理
:param text: 输入文本
:return: 分词后的列表
"""
try:
return list(jieba.cut(text)) # 使用精确模式分词
except Exception as e:
logging.error(f"分词错误:{e}")
return []
def count_word_frequency(self, tokens, top_n=10):
"""
统计词频,默认返回前10个高频词
:param tokens: 分词列表
:param top_n: 返回前N个高频词
:return: 词频统计结果
"""
return Counter(tokens).most_common(top_n)
def pos_tagging(self, text):
"""
对文本进行词性标注
:param text: 输入文本
:return: 带词性的词语列表
"""
return [(word.word, word.flag) for word in pseg.cut(text)]
def save_pos_tags(self, tagged_words, filename='pos_tags.txt'):
"""
将词性标注结果按词性分类并保存
:param tagged_words: 词性标注结果
:param filename: 保存文件名
"""
pos_dict = {}
for word, pos in tagged_words:
pos_dict.setdefault(pos, []).append(word)
with open(filename, 'w', encoding='utf-8') as f:
for pos, words in pos_dict.items():
f.write(f"{pos}: {', '.join(words)}\n")
logging.info(f"词性分类已保存到 {filename}")
def extract_entities(self, tagged_words, entity_type):
"""
提取特定类型的实体
:param tagged_words: 词性标注结果
:param entity_type: 实体类型(如人名'nr',地名'ns')
:return: 特定类型实体列表
"""
return [word for word, pos in tagged_words if pos == entity_type]
def save_entities(self, entities, filename):
"""
保存实体到文件
:param entities: 实体列表
:param filename: 保存文件名
"""
with open(filename, 'w', encoding='utf-8') as f:
f.write('\n'.join(entities))
logging.info(f"实体已保存到 {filename}")
# 其余方法的注释类似,不再赘述
class NLPApp:
def __init__(self):
"""
初始化NLP应用程序,创建处理器和GUI
"""
self.processor = NLPProcessor()
self._init_gui()
def _init_gui(self):
"""
初始化图形用户界面
创建主窗口和基本按钮
"""
self.window = tk.Tk()
self.window.title("中文文本分析系统")
self.window.geometry("400x300")
tk.Button(self.window, text="加载文件", command=self.load_file).pack(pady=10)
tk.Button(self.window, text="运行分析", command=self.run_analysis).pack(pady=10)
tk.Button(self.window, text="退出", command=self.window.quit).pack(pady=10)
# 其余方法的注释类似,不再赘述
def main():
"""
主程序入口,启动NLP文本分析应用
"""
app = NLPApp()
app.window.mainloop()
if __name__ == "__main__":
main()
C. 系统使用说明
快速开始
- 准备待分析文本文件
- 点击"加载文件"选择文本
- 点击"运行分析"
- 查看自动生成的分析结果
定制功能
- 自定义词典:修改userdict.txt
- 个性化分析:调整代码中的参数
输出说明
- pos_tags.txt:词性分类结果
- persons.txt:人名列表
- locations.txt:地名列表
- word_frequency.png:词频柱状图
- wordcloud.png:词云图