当前位置: 首页 > news >正文

怎么自己做网站赚钱吗北京网站编程培训

怎么自己做网站赚钱吗,北京网站编程培训,莆田做鞋有没有网站看,视频在线观看网站怎么建设自然语言处理期末复习 一单元 自然语言处理基础 两个核心任务#xff1a; 自然语言理解#xff08;NLU, Natural Language Understanding#xff09; 让计算机“读懂”人类语言#xff0c;理解文本的语义、结构和意图。 典型子任务包括#xff1a;分词、词性标注、句法分…自然语言处理期末复习 一单元 自然语言处理基础 两个核心任务 自然语言理解NLU, Natural Language Understanding 让计算机“读懂”人类语言理解文本的语义、结构和意图。 典型子任务包括分词、词性标注、句法分析、语义角色标注、指代消解、情感分析、命名实体识别、文本分类等。目标是让机器能够像人一样理解文本内容、推断上下文、识别实体和关系。应用举例智能问答、自动摘要、舆情分析、法律文档理解等。 自然语言生成NLG, Natural Language Generation 让计算机“写作”或“说话”自动生成符合人类表达习惯的自然语言文本。 典型子任务包括自动摘要、机器翻译、对话生成、文本续写、报告生成等。目标是让机器能够根据输入结构化数据、知识图谱、摘要、关键词等生成流畅、连贯、符合语境的自然语言文本。应用举例新闻自动撰写、智能客服回复、AI写作助手、数据报告生成等 经典应用 机器翻译 自动将一种自然语言的文本转换为另一种语言。 典型系统Google Translate、百度翻译、DeepL。技术演进从基于规则、统计机器翻译SMT到神经机器翻译NMT基于Seq2Seq/Transformer/BERT等。 问答系统 根据用户输入的问题自动检索或生成准确答案。 包括开放域问答如百度知道、Quora、闭域问答如医疗、法律等专业领域、阅读理解如SQuAD数据集。技术信息检索、知识图谱、深度学习、生成式大模型。 对话系统 与用户进行多轮自然语言交互实现智能客服、虚拟助手等功能。 分为任务型对话如订票、点餐、闲聊型对话如小冰、ChatGPT、混合型对话。技术意图识别、对话管理、上下文建模、生成式模型。 文本摘要 自动生成文本的简要内容分为抽取式摘要和生成式摘要。 应用新闻摘要、学术论文摘要、会议纪要等。技术TextRank、Seq2Seq、Transformer、BART等。 文本分类 将文本自动归入预定义的类别。 应用垃圾邮件识别、新闻分类、情感极性分类、法律文书归档等。技术朴素贝叶斯、SVM、深度学习、BERT等。 情感分析 判断文本的主观情感倾向如正面、负面、中性。 应用产品评论分析、舆情监控、用户满意度调查等。技术情感词典、机器学习、深度学习、预训练模型。 舆论分析 对大规模社交媒体、新闻等文本进行自动化分析挖掘热点话题、观点倾向、事件演化等。 应用政府舆情监控、品牌危机预警、市场调研等。技术主题建模、情感分析、事件抽取、网络传播建模。 知识图谱 从文本中自动抽取实体、属性和关系构建结构化的知识网络。 应用智能搜索、推荐系统、问答系统、企业知识管理等。技术实体识别、关系抽取、三元组存储、图数据库、推理算法。 三个层面: 词法分析问题 词的定义和生词问题 词的定义在中文中词与词之间没有天然的分隔符如何界定“词”的边界是分词的基础。例如“研究生物”可以分为“研究/生物”或“研究生/物”。生词问题语料库中未出现过的新词如网络热词、专有名词等难以被词典或统计模型正确识别导致分词错误或遗漏。解决方法结合词典、统计方法如基于互信息、左右熵的新词发现、人工标注等。 分词歧义问题 同一个句子可能有多种合法的分词方式需根据上下文选择最合适的切分。例如“南京市长江大桥”可分为“南京市/长江大桥”或“南京/市长/江大桥”。歧义类型包括组合歧义如“研究生活”、重叠歧义如“长春市长春节讲话”。解决方法基于词频、概率统计、最大匹配、隐马尔可夫模型HMM、条件随机场CRF等方法进行消歧。 词性定义和词性兼类问题 词性定义同一个词在不同语境下可能有不同的词性如“打”可以是动词也可以是名词。词性兼类一个词具有多种词性需要根据上下文判别其实际词性。解决方法基于规则、统计、机器学习的词性标注算法如HMM、CRF、深度学习模型。 句法分析问题 模型定义问题 选择何种句法分析模型如短语结构文法、依存文法、转换文法等不同模型适用于不同语言和任务。例如英文常用短语结构文法CFG/PCFG中文常用依存文法。 特征表示问题 如何将句子的结构、词性、词序等信息转化为模型可用的特征。传统方法依赖人工设计特征如词性、上下文窗口、依存关系等现代方法多用神经网络自动学习特征。 解码问题 给定模型和特征如何高效地从所有可能的句法结构中找到最优结构。常用算法有CKY算法用于PCFG、贪心算法、动态规划、图算法等。 训练算法问题 如何利用标注语料训练句法分析模型包括参数估计、结构学习等。传统方法有最大似然估计、EM算法现代方法有神经网络端到端训练、迁移学习等。 二单元 中文分词 中文分词工具包jieba结合了基于规则和基于统计这两种方法jieba的三种分词方式 精确模式将句子精确的分开适合文本分析全模式将句子中所有的词都扫描出来但不能解决歧义搜索引擎模式在精确模式下对长词进行再次切分提高召回率适合用于搜索引擎分词同时也支持自定义字典 示例 1.精确分词模式 import jieba words jieba.cut(南京市长江大桥) print(words) print(/.join(words))南京市/长江大桥2.全模式分词 words jieba.cut(南京市长江大桥,cut_all True) print(words) print(/.join(words))南京/南京市/京市/市长/长江/长江大桥/大桥words jieba.lcut(南京市长江大桥,cut_all True) print(words)words jieba.lcut(南京市长江大桥,cut_all True) print(words)import jieba# 待分词的文本 text 南京市长江大桥# 全模式分词输出所有可能的分词结果 words_full jieba.lcut(text, cut_allTrue) print(全模式分词结果:, words_full)# 精确模式分词尝试最精确的分词适合文本分析 words_precise jieba.lcut(text, cut_allFalse) print(精确模式分词结果:, words_precise)# 搜索引擎模式分词在精确模式基础上对长词再次切分 words_search jieba.lcut_for_search(text) print(搜索引擎模式分词结果:, words_search)全模式分词结果: [南京, 南京市, 京市, 市长, 长江, 长江大桥, 江大, 大桥] 精确模式分词结果: [南京市, 长江大桥] 搜索引擎模式分词结果: [南京, 京市, 南京市, 长江, 大桥, 长江大桥]3.搜索引擎模式 words jieba.cut_for_search(南京市长江大桥) print(words) print(/.join(words))南京/京市/南京市/长江/大桥/长江大桥words jieba.lcut_for_search(南京市长江大桥) print(words) print(/.join(words))[南京, 京市, 南京市, 长江, 大桥, 长江大桥] 南京/京市/南京市/长江/大桥/长江大桥三单元 词性标注和命名实体识别 词性标注 词性标注Part-of-Speech Tagging, POS Tagging是指给定一个句子判定每个词的语法范畴如名词、动词、形容词等并进行标注。 意义为后续的句法分析、语义分析等任务提供基础信息。常见方法基于规则、统计如隐马尔可夫模型HMM、条件随机场CRF、深度学习如BiLSTM-CRF。难点同一个词在不同上下文中可能有不同词性如“打”既可作动词也可作名词需要结合上下文判别。 命名实体识别NER 命名实体识别Named Entity Recognition, NER旨在识别文本中具有特定意义的实体如人名、地名、组织机构名、时间、数字等。 意义为信息抽取、知识图谱构建、问答系统等提供实体基础。常见方法基于规则、统计学习如HMM、CRF、深度学习如BiLSTM-CRF、BERTCRF。难点实体边界识别、实体类型判别、多义实体消歧。 LTP命名实体识别模型NamedEntityRecognizer LTPLanguage Technology Platform是哈工大社会计算与信息检索研究中心开发的中文自然语言处理工具包其命名实体识别模型支持以下实体类别 人名Nh如“李白”、“马云” 地名Ns如“北京”、“长江大桥” 机构名Ni如“清华大学”、“阿里巴巴” 标注体系LTP采用BIESO标注体系 BBegin实体的开始IInside实体的中间EEnd实体的结束SSingle单独成实体OOther非实体 应用举例 句子“马云是阿里巴巴的创始人。” 词性标注结果马云/nr 是/v 阿里巴巴/nt 的/ude1 创始人/n 。命名实体识别结果马云/S-Nh 是/O 阿里巴巴/S-Ni 的/O 创始人/O 。 常用工具与库 中文LTP、HanLP、jieba支持简单词性标注、pkuseg英文NLTK、spaCy、Stanza 利用pyltp词性标注 from pyltp import Postagger postagger Postagger(ltp_model\pos.model) #模型初始化 postags postagger.postag(words) #词性标注 for word,postag in zip(words,postags):print(word,postag,end \\)我 r\愿意 v\把 p\我 r\生命 n\的 u\三分之一 m\from pyltp import Postagger# 初始化词性标注器加载预训练模型 # 请确保模型文件pos.model存在于指定路径下 postagger Postagger() postagger.load(ltp_model/pos.model) # 加载词性标注模型# 待标注的词语列表 # 此处words变量未定义需要在使用前赋值 # 例如: words [我, 愿意, 把, 我, 生命, 的, 三分之一] words [] # 执行词性标注返回每个词语对应的词性标签 postags postagger.postag(words) # 遍历词语和对应的词性标签并打印 # 格式为词语 词性\词语 词性\... for word, postag in zip(words, postags):print(word, postag, end\\)# 使用完毕后释放模型资源 postagger.release() 利用pyltp命名实体识别 from pyltp import NamedEntityRecognizer recognizer NamedEntityRecognizer(ltp_model\ner.model) #模型初始化 netags recognizer.recognize(words,postags) #命名实体识别 for word,netag in zip(words,netags)print(word,netag,end \\)from pyltp import NamedEntityRecognizer# 初始化命名实体识别器加载预训练模型 # 请确保模型文件ner.model存在于指定路径下 recognizer NamedEntityRecognizer() recognizer.load(ltp_model/ner.model) # 加载命名实体识别模型# 待识别的词语列表和对应的词性标签 # 此处words和postags变量未定义需要在使用前赋值 # 例如: # words [张三, 在, 北京大学, 读书] # postags [nh, p, ni, v] words [] postags []# 执行命名实体识别返回每个词语对应的实体标签 # 输入分词结果和词性标注结果 # 输出命名实体标签列表 netags recognizer.recognize(words, postags)# 遍历词语和对应的实体标签并打印 # 格式为词语 实体标签\词语 实体标签\... for word, netag in zip(words, netags):print(word, netag, end\\)# 使用完毕后释放模型资源 recognizer.release()words [张三, 在, 北京大学, 读书] postags [nh, p, ni, v] netags recognizer.recognize(words, postags) # 可能的输出 # 张三 S-Nh\在 O\北京大学 S-Ni\读书 O\利用pyltp依存语法分析 #加载依存语法分析模型 from pyltp import Parser parser Parser(ltp_model\parser.model) #模型初始化arcs parser.parse(words,postags) #依存句法分析 print(arcs) print(依存句法分析,\t.join(%d:%s%(arc[0],arc[1]) for arc in arcs))[(2, SBV), (0, HED), (2, VOB), (5, ATT), (7, ATT), (5, RAD), (3, VOB)] 依存句法分析 2:SBV 0:HED 2:VOB 5:ATT 7:ATT 5:RAD 3:VOB# 加载依存语法分析模型 from pyltp import Parser# 初始化依存句法分析器加载预训练模型 # 请确保模型文件parser.model存在于指定路径下 parser Parser() parser.load(ltp_model/parser.model) # 加载依存句法分析模型# 待分析的词语列表和对应的词性标签 # 此处words和postags变量未定义需要在使用前赋值 # 例如: # words [我, 爱, 自然, 语言, 处理] # postags [r, v, n, n, v] words [] postags []# 执行依存句法分析返回句法树的弧结构 # arcs是一个包含多个元组的列表每个元组表示一个词的依存关系 # 元组格式(head, relation) # head: 表示依存弧的父节点中心词的索引0表示根节点 # relation: 表示依存关系类型 arcs parser.parse(words, postags)# 打印原始分析结果列表形式 print(原始依存句法分析结果, arcs)# 格式化输出依存关系便于阅读 # 格式词索引:依存关系类型 print(格式化依存句法分析结果, \t.join(%d:%s % (arc.head, arc.relation) for arc in arcs))# 释放模型资源 parser.release() [(2, SBV), (0, HED), (2, VOB), (5, ATT), (7, ATT), (5, RAD), (3, VOB)] 依存句法分析 2:SBV 0:HED 2:VOB 5:ATT 7:ATT 5:RAD 3:VOB 四单元 句法分析 句法分析任务 短语结构句法分析Phrase Structure Parsing 目标分析句子的短语结构层次关系将句子分解为短语如名词短语、动词短语等构建短语结构树成分句法树。目前研究最多尤其适用于英语等形态变化丰富的语言。PCFGProbabilistic Context-Free Grammar概率上下文无关文法 在传统上下文无关文法CFG基础上引入概率能够为每种句法结构分配概率选择概率最大的结构作为句子的最佳分析。常用算法CKY算法用于高效解析PCFG。 应用机器翻译、自动语法纠错、句法树可视化等。 依存句法分析Dependency Parsing 目标分析句子中词与词之间的依存关系构建依存句法树每个词有且仅有一个父节点根节点除外。适用于中文等以词序为主的语言强调词之间的直接依赖关系。依存句法分析的五个基本条件 一个句子只有一个成分是独立的即句子的中心词或谓词通常为谓语动词。句子的其他成分都从属于某一成分每个词都有唯一的依存中心。任何一个成分都不能依存于两个或者两个以上的成分依存关系是树状结构不能有环。如果A从属于B成分C位于二者之间那么C就从属于A或B或A和B之间的某一成分依存关系不能交叉。中心成分左右两边的其他成分互不发生关系依存树的非交叉性。 常用方法基于转移的依存分析Transition-based、基于图的依存分析Graph-based、神经网络依存分析如Biaffine Parser。应用关系抽取、事件抽取、信息抽取、自动问答等。 深层文法句法分析Deep Grammar Parsing 目标不仅分析表层的句法结构还要揭示句子的深层语义结构和逻辑关系。代表方法生成语法Generative Grammar、功能语法Functional Grammar、语义角色标注SRL、AMRAbstract Meaning Representation等。应用语义理解、机器翻译、自动推理、复杂问答等。 五单元 NLP中的深度学习 自然语言处理的三大特征抽取器 CNN卷积神经网络 适合提取局部特征常用于文本分类、句子匹配等任务。通过卷积核滑动窗口捕捉n-gram特征具有参数共享和局部感知能力。优点并行计算高效适合大规模文本处理。缺点难以捕捉长距离依赖。 RNN循环神经网络 适合处理序列数据能够建模上下文依赖关系。 缺点 容易发生梯度消失长距离依赖难以学习。容易发生梯度爆炸训练不稳定。 LSTM长短时记忆网络为了解决RNN的梯度消失问题而提出的特殊RNN结构。 LSTM在RNN的基础上引入了细胞状态Cell State, Ct可以长期保留信息。LSTM的核心三个门 遗忘门Forget Gate决定保留多少旧信息。输入门Input Gate决定当前输入信息的多少被写入细胞状态。输出门Output Gate决定细胞状态的哪些部分输出到下一个时刻。 变体 双向LSTMBiLSTM同时考虑前后文信息。GRU门控循环单元结构更简单训练更高效。 Transformer 完全基于自注意力机制Self-Attention摒弃了循环结构极大提升了并行计算能力。结构特点每个网络块由一个多头自注意力Multi-Head Attention层和一个前馈神经网络层组成。在解码阶段引入了掩码机制Masked Multi-Head Attention保证生成时只依赖已生成的内容。Transformer是BERT、GPT等预训练大模型的基础架构。优点捕捉长距离依赖能力强训练速度快易于扩展。 Encoder-Decoder框架 传统RNN和LSTM要求输入输出长度固定但如机器翻译等任务输入输出长度不定需用Seq2Seq模型输入序列输出也是序列。Seq2Seq特点 输入输出长度可变适合翻译、摘要、对话等任务。结构 Encoder编码器 将输入序列编码为一个固定长度的向量上下文表示。Decoder解码器 将该向量解码为输出序列。 应用 机器翻译、文本摘要、对话系统等。 Attention机制 传统Seq2Seq模型在处理长文本时信息容易丢失且对所有输入赋予相同权重难以聚焦关键信息。Attention机制允许模型在生成每个输出时动态关注输入序列的不同部分。三个阶段 计算权重参数 根据Query和Key计算相似性如点积、余弦相似度、可学习参数。归一化权重 通常用Softmax将权重归一化为概率分布。加权求和 用归一化权重对Value加权求和得到Attention输出。 多头注意力Multi-Head Attention 并行计算多个注意力头捕捉不同子空间的特征。应用 机器翻译、文本摘要、阅读理解、对话生成等。 六单元 文本向量化 One-hot编码 原理将每个词表示为一个全零向量只有该词对应的下标为1其余为0。例如词表为[“我”, “爱”, “自然”, “语言”]自然的one-hot向量为[0, 0, 1, 0]。优点实现简单适合小规模词表的场景。缺点 随着语料库词语数量增加词向量维度极高且稀疏存储和计算效率低。不包含任何语义信息无法表达词与词之间的相似性如“猫”和“狗”之间的关系。 词袋模型Bag of Words, BoW 原理统计文本中每个词出现的次数忽略词序仅关注词频。每个文本表示为一个词频向量。优点实现简单适合文本分类等任务。缺点 词向量维度高且稀疏。仅将词语符号化不保留词序信息不包含任何语义信息。不适合表达长文本或复杂语义关系。 Word2Vec 原理通过神经网络将词映射到低维稠密向量空间使得语义相近的词距离更近。CBOW模型Continuous Bag of Words 三层神经网络结构。已知上下文周围词预测当前词。上下文所有词对当前词的预测权重相同。适合大语料、训练速度快。 Skip-gram模型 与CBOW相反已知当前词预测上下文。输入为目标词输出为上下文词的概率分布。更适合小语料、低频词学习。 Word2Vec常用参数说明 sentences预训练的训练语料库分词后的句子列表。sg0表示CBOW模型1表示Skip-gram模型默认0。size词向量维度如100、200、300等。window当前词与预测词之间的最大距离窗口大小。min_count最小出现次数低于该次数的词会被忽略。iter随机梯度下降的迭代次数。例Word2Vec(sentences, size100, window8, min_count3, iter8) 补充GloVe、FastText等 GloVe全局向量模型结合全局词共现统计和局部上下文窗口提升了词向量的语义表达能力。FastText将词拆分为n-gram子词能更好地处理未登录词和形态变化丰富的语言。 应用场景举例 文本分类、聚类、相似度计算、信息检索、推荐系统、知识图谱等。 七单元 关键词提取 TF-IDF 算法提取关键词步骤 文本分词与去停用词 对原始文本进行分词处理并去除停用词如“的”“了”“是”等无实际意义的高频词剩余词语即为候选关键词。计算候选词的 TF 值 统计每个候选词在当前文档中出现的频率Term Frequency, TF即 TF(word) word 在文档中出现的次数 / 文档总词数计算候选词的逆文档频率 IDF 统计每个候选词在整个语料库中出现的文档数计算逆文档频率Inverse Document Frequency, IDF IDF(word) log(语料库中文档总数 / (1 出现 word 的文档数量)) 这样可以降低在多数文档中都出现的常见词的权重。计算 TF-IDF 值 对每个候选词计算其 TF-IDF 值 TF-IDF(word) TF(word) * IDF(word) 该值越高说明该词对当前文档越重要。排序与选取关键词 将所有候选词的 TF-IDF 值进行降序排序选择排在前面的若干词作为文档关键词。 TextRank 算法 基本思想TextRank 是一种基于图的排序算法思想来源于 Google 的 PageRank 算法。它通过构建词语之间的共现关系图利用迭代计算确定每个词的重要性。PageRank 算法Google 用来衡量网页重要性的算法基于有向无权图。TextRank 与 PageRank 的不同 PageRank用于网页排序图是有向无权图。TextRank用于关键词或句子自动提取图是有权图边的权重通常表示词语或句子之间的相似度或共现频率。 TextRank 步骤简述 将文本分词去除停用词选取候选词。构建词语共现图窗口内共现的词语之间连边。初始化每个节点的权重迭代更新节点权重直到收敛。按权重排序选取前 N 个词作为关键词。 LSA潜在语义分析关键词提取 使用 BOW 模型将每个文档表示为向量 对所有文档进行分词统计词频得到词袋模型Bag of Words表示。构建词-文档矩阵 将所有文档的词向量拼接起来形成一个“词-文档”矩阵行是词列是文档值为词频或TF-IDF。对词-文档矩阵进行奇异值分解SVD 通过 SVD 将高维稀疏矩阵分解为低维稠密矩阵提取潜在的主题结构。关键词选取 在低维空间中计算每个词与文档的相似度选取与文档最相似的若干词作为关键词。 八单元 文本分类 基于传统机器学习文本分类方法的标准流程 训练集准备 收集并整理带有标签的文本数据作为模型训练和评估的基础。标签可以是类别如“体育”“财经”“科技”也可以是情感极性如“正面”“负面”。通常将数据集划分为训练集、验证集和测试集。 文本预处理 对原始文本进行清洗和规范化包括 去除HTML标签、特殊符号、标点、数字等无关内容转换为统一大小写分词中文用jieba、pkuseg等英文用NLTK、spaCy等去除停用词如“的”“了”“and”“the”等词形还原英文如stemming/lemmatization 预处理的目的是减少噪声提高特征表达的有效性。 特征提取 将文本转化为数值特征向量常见方法有 词袋模型Bag of Words, BoW统计词频TF-IDF考虑词频和逆文档频率N-gram提取词组特征词向量Word2Vec、GloVe、FastText等 特征提取是文本分类效果的关键环节。 文本表示 将特征向量化的文本输入到机器学习模型中。可以是稀疏向量如BoW、TF-IDF也可以是稠密向量如Word2Vec、BERT等。现代方法常用深度学习模型自动学习文本表示如BERT、TextCNN、LSTM等。 分类器训练与预测 选择合适的分类算法进行模型训练常见算法有 朴素贝叶斯Naive Bayes支持向量机SVM逻辑回归Logistic Regression决策树、随机森林、XGBoost等集成方法神经网络如MLP、CNN、RNN、BERT等 训练完成后对新文本进行特征提取和分类预测。 模型评估与优化 使用准确率、精确率、召回率、F1分数等指标评估模型性能。通过交叉验证、调参、特征工程等方法优化模型效果。 流程图示意 训练集 → 文本预处理 → 特征提取 → 文本表示 → 分类器训练 → 预九单元 文本情感分析 基于词典的情感分析方法 原理利用人工或半自动构建的情感词典如褒义词、贬义词、否定词、程度副词等通过统计文本中情感词的出现及其极性、强度判断文本的情感倾向。流程 文本分词去除停用词。检索情感词典统计正面、负面词出现次数。根据否定词、程度副词等修饰关系调整情感分数。综合得分判断文本情感极性如正面、负面、中性。 优点实现简单、可解释性强、无需标注数据。缺点依赖词典覆盖度难以处理复杂语境、隐含情感、讽刺等现象。常用情感词典知网情感词典、NTUSD、HowNet、SentiWordNet等。 基于机器学习的情感分析方法 原理将情感分析建模为文本分类问题利用有标注的情感数据训练分类器如正面/负面。流程 收集并标注情感数据集如影评、商品评论等。文本预处理分词、去停用词、特征提取如BoW、TF-IDF、词向量等。选择分类算法如朴素贝叶斯、SVM、逻辑回归、随机森林等。训练模型并评估应用于新文本情感预测。 优点能自动学习特征适应性强效果优于词典法。缺点需大量标注数据特征工程复杂难以处理长文本和上下文依赖。常用数据集IMDB、SST、ChnSentiCorp等。 基于深度学习的情感分析方法 原理利用神经网络如CNN、RNN、LSTM、GRU、Transformer、BERT等自动学习文本的情感特征实现端到端的情感分类。流程 文本预处理分词、编码、词向量化。构建深度学习模型如TextCNN、BiLSTM、BERT等。输入训练数据自动学习情感特征。预测新文本的情感极性或情感分数。 优点无需人工设计特征能捕捉复杂语义和上下文信息适合大规模数据和多类别情感分析。缺点对数据和计算资源要求高模型可解释性较弱。前沿方向多模态情感分析结合文本、语音、图像、细粒度情感分析如方面级情感、跨语言情感分析等。 应用场景举例 产品评论情感分析电商、App Store等舆情监控与危机预警微博、新闻评论等用户满意度调查与反馈分析金融市场情绪分析智能客服自动情感识别与应答 代码示例 代码示例jieba 分词 精确模式分词 # 导入 jieba 分词库 import jieba# 使用 jieba 的精确模式分词 words jieba.cut(南京市长江大桥) # 对句子进行分词返回一个生成器对象 print(words) # 输出分词生成的迭代器对象 print(/.join(words)) # 将分词结果用斜杠连接并输出# 输出结果 # 南京市/长江大桥注释详解 jieba.cutjieba 的分词方法默认使用精确模式。print(words)直接打印生成器对象显示的是内存地址。/.join(words)将生成器对象转换为字符串用斜杠分隔分词结果。 全模式分词 # 使用 jieba 的全模式分词 words jieba.cut(南京市长江大桥, cut_allTrue) # 全模式分词扫描句子中所有可能的词 print(words) # 输出分词生成的迭代器对象 print(/.join(words)) # 将分词结果用斜杠连接并输出# 输出结果 # 南京/南京市/京市/市长/长江/长江大桥/大桥注释详解 cut_allTrue启用全模式分词返回所有可能的词语组合。全模式分词适合快速搜索但不能解决歧义问题。 lcut 方法分词 # 使用 jieba 的 lcut 方法直接返回分词结果列表 words jieba.lcut(南京市长江大桥, cut_allTrue) # 全模式分词 print(words)# 输出结果 # [南京, 南京市, 京市, 市长, 长江, 长江大桥, 大桥]注释详解 jieba.lcut与 jieba.cut 类似但直接返回分词结果的列表。列表形式更适合后续处理如统计词频或关键词提取。 搜索引擎模式分词 # 使用 jieba 的搜索引擎模式分词 words jieba.cut_for_search(南京市长江大桥) # 搜索引擎模式分词 print(words) # 输出分词生成的迭代器对象 print(/.join(words)) # 将分词结果用斜杠连接并输出# 输出结果 # 南京/京市/南京市/长江/大桥/长江大桥注释详解 jieba.cut_for_search搜索引擎模式分词适合对长文本进行分词。搜索引擎模式会对长词进行再次切分提高召回率。 lcut_for_search 方法分词 # 使用 jieba 的 lcut_for_search 方法直接返回分词结果列表 words jieba.lcut_for_search(南京市长江大桥) print(words) print(/.join(words))# 输出结果 # [南京, 京市, 南京市, 长江, 大桥, 长江大桥] # 南京/京市/南京市/长江/大桥/长江大桥注释详解 jieba.lcut_for_search与 jieba.cut_for_search 类似但直接返回分词结果的列表。搜索引擎模式适合对长文本进行分词尤其是需要提高召回率的场景。 中文分词 代码 import jieba import re# 定义函数用于读取文件并进行分词 def Get_words(filename):with open(filename, encodingutf-8) as f:file_context f.read() # 读取文件内容# 使用正则表达式去除特殊字符和标点符号file_context re.sub(r[0-9\s\.\!\/_,$%^*()?;:-【】\\]|[——;:。、~#%……*], , file_context)words jieba.lcut(file_context) # 使用 jieba 的精确模式分词return words# 调用函数对文件进行分词 words Get_words(D:/Pycharm/自然语言处理/day5/datas/chinese.txt) print(words) # 输出分词结果注释详解 导入库 import jieba导入 jieba 分词库用于中文分词。import re导入正则表达式库用于清理文本中的特殊字符。 定义函数 def Get_words(filename):定义一个函数 Get_words接收文件路径作为参数。with open(filename, encodingutf-8) as f:以 UTF-8 编码方式打开文件确保中文字符正常读取。file_context f.read()读取文件内容并存储到变量 file_context 中。 清理文本 re.sub(...)使用正则表达式去除文本中的特殊字符、标点符号和数字。 [0-9\s\.\!\/_,$%^*()?;:-【】\\]匹配数字、空格、标点符号等。[——;:。、~#%……*]匹配中文标点符号。 清理后的文本存储在 file_context 中。 分词 jieba.lcut(file_context)使用 jieba 的 lcut 方法对清理后的文本进行分词返回分词结果的列表。 返回结果 return words返回分词结果。 调用函数 words Get_words(D:/Pycharm/自然语言处理/day5/datas/chinese.txt)调用 Get_words 函数传入文件路径。print(words)打印分词结果。 示例输出 假设文件内容为 南京市长江大桥是中国著名的桥梁之一。分词结果为 [南京市, 长江大桥, 是, 中国, 著名, 的, 桥梁, 代码示例英文分词 代码 import nltk import re# 定义函数用于读取文件并进行英文分词 def Get_words(filename):with open(filename, encodingutf-8) as f:file_context f.read() # 读取文件内容# 使用正则表达式去除特殊字符和标点符号file_context re.sub(r[0-9_.!-——,$%^’。、~#%……*《》「」{}【】()/], , file_context)words nltk.word_tokenize(file_context) # 使用 nltk 的分词工具进行分词return words# 调用函数对文件进行分词 words Get_words(./datas/english.txt) print(words) # 输出分词结果注释详解 导入库 import nltk导入 NLTK自然语言工具包用于英文分词。import re导入正则表达式库用于清理文本中的特殊字符。 定义函数 def Get_words(filename):定义一个函数 Get_words接收文件路径作为参数。with open(filename, encodingutf-8) as f:以 UTF-8 编码方式打开文件确保英文字符正常读取。file_context f.read()读取文件内容并存储到变量 file_context 中。 清理文本 re.sub(...)使用正则表达式去除文本中的特殊字符、标点符号和数字。 [0-9_.!-——,$%^’。、~#%……*《》「」{}【】()/]匹配数字、标点符号和特殊字符。 清理后的文本存储在 file_context 中。 分词 nltk.word_tokenize(file_context)使用 NLTK 的 word_tokenize 方法对清理后的文本进行分词返回分词结果的列表。 返回结果 return words返回分词结果。 调用函数 words Get_words(./datas/english.txt)调用 Get_words 函数传入文件路径。print(words)打印分词结果。 示例输出 假设文件内容为 This is an example sentence. It contains numbers like 123 and symbols like $%.分词结果为 [This, is, an, example, sentence, It, contains, numbers, like, and, symbols, like]代码示例统计词频 代码 # 定义函数用于统计词频 def count_words(words, topK):data {} # 初始化一个空字典用于存储词频for word in words: # 遍历分词结果中的每个词if word in data: # 如果词已存在于字典中data[word] 1 # 词频加 1else: # 如果词不存在于字典中data[word] 1 # 初始化词频为 1# 按词频从高到低排序并返回前 topK 个词data sorted(data.items(), keylambda x: x[1], reverseTrue)return data[:topK] # 返回词频最高的 topK 个词# 调用函数统计词频并输出结果 count_words(words, 5)注释详解 函数定义 def count_words(words, topK):定义一个函数 count_words接收两个参数 words分词结果的列表。topK需要返回的高频词数量。 初始化字典 data {}创建一个空字典 data用于存储词和对应的词频。 遍历分词结果 for word in words:遍历分词结果列表中的每个词。 if word in data:检查当前词是否已经存在于字典中。 如果存在data[word] 1将该词的词频加 1。如果不存在data[word] 1将该词添加到字典中并初始化词频为 1。 排序 sorted(data.items(), keylambda x: x[1], reverseTrue)data.items()将字典中的键值对转换为列表。keylambda x: x[1]按词频即字典的值进行排序。reverseTrue按降序排序。 返回结果 return data[:topK]返回排序后的前 topK 个高频词。 调用函数 count_words(words, 5)调用 count_words 函数传入分词结果 words 和需要返回的高频词数量 5。 示例输入 假设分词结果 words 为 [南京市, 长江大桥, 是, 中国, 著名, 的, 桥梁, 之一, 南京市, 桥梁]示例输出 [(南京市, 2), (桥梁, 2), (长江大桥, 1), (是, 1), (代码示例利用 pyltp 进行分词 代码 from pyltp import Segmentor# 初始化分词模型 segmentor Segmentor(ltp_model/cws.model) # 加载分词模型文件 # 对句子进行分词 words segmentor.segment(我愿意把我生命的三分之一) # 使用分词模型对句子进行分词 # 输出分词结果 for word in words:print(word, end\\) # 使用反斜杠分隔分词结果 # 释放模型 segmentor.release() # 释放分词模型资源注释详解 导入库 from pyltp import Segmentor从 pyltp 库中导入 Segmentor 类用于加载分词模型并执行分词任务。 初始化分词模型 segmentor Segmentor(ltp_model/cws.model)创建 Segmentor 对象并加载分词模型文件 cws.model。cws.model 是 LTP 提供的分词模型文件路径需要根据实际情况调整。 分词 words segmentor.segment(我愿意把我生命的三分之一)使用分词模型对输入句子进行分词。返回值 words 是一个分词结果的生成器对象。 输出分词结果 for word in words:遍历分词结果。print(word, end\\)逐个输出分词结果并使用反斜杠 \ 分隔。 释放模型 segmentor.release()释放分词模型资源避免内存泄漏。 示例输出 假设输入句子为 我愿意把我生命的三分之一分词结果为 我\愿意\把\我\生命\的\三分之一\代码示例利用 pyltp 进行词性标注 代码 from pyltp import Postagger# 初始化词性标注模型 postagger Postagger(ltp_model/pos.model) # 加载词性标注模型文件 # 对分词结果进行词性标注 postags postagger.postag(words) # 使用词性标注模型对分词结果进行标注 # 输出词性标注结果 for word, postag in zip(words, postags): # 将分词结果与词性标注结果配对print(word, postag, end\\) # 输出词和对应的词性标注结果用反斜杠分隔注释详解 导入库 from pyltp import Postagger从 pyltp 库中导入 Postagger 类用于加载词性标注模型并执行标注任务。 初始化词性标注模型 postagger Postagger(ltp_model/pos.model)创建 Postagger 对象并加载词性标注模型文件 pos.model。pos.model 是 LTP 提供的词性标注模型文件路径需要根据实际情况调整。 词性标注 postags postagger.postag(words)使用词性标注模型对分词结果 words 进行标注。返回值 postags 是一个生成器对象包含每个词对应的词性标注结果。 输出词性标注结果 for word, postag in zip(words, postags):使用 zip 函数将分词结果 words 和词性标注结果 postags 配对。遍历每个词和对应的词性标注结果。 print(word, postag, end\\)输出词和对应的词性标注结果用反斜杠 \ 分隔。 示例输入 假设分词结果 words 为 [我, 愿意, 把, 我, 生命, 的, 三分之一]示例输出 我 r\愿意 v\把 p\我 r\生命 n\的 u\三分之一 m\词性标注说明 LTP 使用的词性标注标签集部分示例 r代词v动词p介词n名词u助词m数词 代码示例利用 pyltp 进行命名实体识别 代码 from pyltp import NamedEntityRecognizer# 初始化命名实体识别模型 recognizer NamedEntityRecognizer(ltp_model/ner.model) # 加载命名实体识别模型文件 # 对分词结果和词性标注结果进行命名实体识别 netags recognizer.recognize(words, postags) # 使用命名实体识别模型 # 输出命名实体识别结果 for word, netag in zip(words, netags): # 将分词结果与命名实体标注结果配对print(word, netag, end\\) # 输出词和对应的命名实体标注结果用反斜杠分隔注释详解 导入库 from pyltp import NamedEntityRecognizer从 pyltp 库中导入 NamedEntityRecognizer 类用于加载命名实体识别模型并执行识别任务。 初始化命名实体识别模型 recognizer NamedEntityRecognizer(ltp_model/ner.model)创建 NamedEntityRecognizer 对象并加载命名实体识别模型文件 ner.model。ner.model 是 LTP 提供的命名实体识别模型文件路径需要根据实际情况调整。 命名实体识别 netags recognizer.recognize(words, postags)使用命名实体识别模型对分词结果 words 和词性标注结果 postags 进行识别。返回值 netags 是一个生成器对象包含每个词对应的命名实体标注结果。 输出命名实体识别结果 for word, netag in zip(words, netags):使用 zip 函数将分词结果 words 和命名实体标注结果 netags 配对。遍历每个词和对应的命名实体标注结果。 print(word, netag, end\\)输出词和对应的命名实体标注结果用反斜杠 \ 分隔。 示例输入 假设分词结果 words 和词性标注结果 postags 为 words [我, 愿意, 把, 我, 生命, 的, 三分之一] postags [r, v, p, r, n, u, m]示例输出 我 O\愿意 O\把 O\我 O\生命 O\的 O\三分之一 O\命名实体标注说明 LTP 使用的命名实体标注标签集BIESO 标注体系 B实体的开始Begin。I实体的中间Inside。E实体的结束End。S单独成实体Single。O非实体Other。 LTP 提供的命名实体类别 Nh人名Ns地名Ni机构名 代码示例利用 pyltp 进行依存句法分析 代码 # 导入依存句法分析模块 from pyltp import Parser# 初始化依存句法分析模型 parser Parser(ltp_model/parser.model) # 加载依存句法分析模型文件# 对分词结果和词性标注结果进行依存句法分析 arcs parser.parse(words, postags) # 使用依存句法分析模型 print(arcs) # 输出依存句法分析结果# 格式化输出依存句法分析结果 print(依存句法分析, \t.join(%d:%s % (arc[0], arc[1]) for arc in arcs))注释详解 导入库 from pyltp import Parser从 pyltp 库中导入 Parser 类用于加载依存句法分析模型并执行分析任务。 初始化依存句法分析模型 parser Parser(ltp_model/parser.model)创建 Parser 对象并加载依存句法分析模型文件 parser.model。parser.model 是 LTP 提供的依存句法分析模型文件路径需要根据实际情况调整。 依存句法分析 arcs parser.parse(words, postags)使用依存句法分析模型对分词结果 words 和词性标注结果 postags 进行分析。返回值 arcs 是一个列表包含每个词的依存关系和依存弧信息。 输出依存句法分析结果 print(arcs)直接输出依存句法分析结果显示每个词的依存弧信息。 print(依存句法分析, \t.join(%d:%s % (arc[0], arc[1]) for arc in arcs))格式化输出依存句法分析结果。arc[0]表示当前词的依存中心词的索引。arc[1]表示当前词与依存中心词之间的依存关系。 示例输入 假设分词结果 words 和词性标注结果 postags 为 words [我, 愿意, 把, 我, 生命, 的, 三分之一] postags [r, v, p, r, n, u, m]示例输出 [(2, SBV), (0, HED), (2, VOB), (5, ATT), (7, ATT), (5, RAD), (3, VOB)] 依存句法分析 2:SBV 0:HED 2:VOB 5:ATT 7:ATT 5:RAD 3:VOB依存句法分析说明 依存关系标签部分示例 SBV主谓关系Subject-Verb。HED核心关系Head。VOB动宾关系Verb-Object。ATT定中关系Attribute。RAD右附加关系Right Adjunct。 依存弧信息 每个词的依存弧由两个部分组成 中心词索引arc[0] 表示当前词的依存中心词在句子中的索引位置从 1 开始。依存关系arc[1] 表示当前词与中心词之间的依存关系。 代码示例数据预处理与分词 代码 from gensim.models import Word2Vec # 导入 gensim 的 Word2Vec 模型 import jieba # 导入 jieba 分词库 import re # 导入正则表达式库# 数据路径 data_Path ./datas/chinese.txt # 文本数据路径 stopwords ./datas/stopwords.txt # 停用词表路径# 定义函数用于读取文件并进行分词 def getWords(datapath, stopwords_path):# 读取停用词表with open(stopwords_path) as a:stopwords a.readlines() # 逐行读取停用词new_stopwords [i.strip() for i in stopwords] # 去除换行符生成停用词列表words_list [] # 初始化分词结果列表# 读取文本数据with open(datapath, encodingutf-8) as f:file_context f.read() # 读取文件内容context_list file_context.split(。) # 按句号分割文本生成句子列表# 遍历每个句子for i in context_list:# 使用正则表达式去除特殊字符和标点符号i re.sub(r[0-9\s\.\!\/_,$%^*()?;:-【】\\]|[——;:。、~#%……*], , i)word_list jieba.lcut(i) # 使用 jieba 的精确模式分词# 去除停用词for j in word_list:if j in new_stopwords: # 如果词在停用词表中word_list.remove(j) # 从分词结果中移除words_list.append(word_list) # 将分词结果添加到分词结果列表中return words_list # 返回分词结果列表# 调用函数对文件进行分词 words getWords(data_Path, stopwords)注释详解 导入库 from gensim.models import Word2Vec导入 gensim 的 Word2Vec 模型用于后续训练词向量。import jieba导入 jieba 分词库用于中文分词。import re导入正则表达式库用于清理文本中的特殊字符。 数据路径 data_Path ./datas/chinese.txt指定文本数据的路径。stopwords ./datas/stopwords.txt指定停用词表的路径。 定义函数 def getWords(datapath, stopwords_path):定义一个函数 getWords接收两个参数 datapath文本数据的路径。stopwords_path停用词表的路径。 读取停用词表 with open(stopwords_path) as a:打开停用词表文件。stopwords a.readlines()逐行读取停用词。new_stopwords [i.strip() for i in stopwords]去除换行符生成停用词列表。 初始化分词结果列表 words_list []创建一个空列表 words_list用于存储分词结果。 读取文本数据 with open(datapath, encodingutf-8) as f:以 UTF-8 编码方式打开文本数据文件。file_context f.read()读取文件内容。context_list file_context.split(。)按句号分割文本生成句子列表。 清理文本 re.sub(...)使用正则表达式去除文本中的特殊字符和标点符号。 [0-9\s\.\!\/_,$%^*()?;:-【】\\]匹配数字、空格、标点符号等。[——;:。、~#%……*]匹配中文标点符号。 分词 jieba.lcut(i)使用 jieba 的 lcut 方法对清理后的句子进行分词返回分词结果的列表。 去除停用词 遍历分词结果 word_list如果词在停用词表中则从分词结果中移除。 存储分词结果 words_list.append(word_list)将分词结果添加到分词结果列表中。 返回结果 return words_list返回分词结果列表。 调用函数 words getWords(data_Path, stopwords)调用 getWords 函数传入文本数据路径和停用词表路径。 示例输入 假设文本数据 chinese.txt 内容为 南京市长江大桥是中国著名的桥梁之一。假设停用词表 stopwords.txt 内容为 是 的示例输出 [[南京市, 长江大桥, 中国, 著名, 桥梁, 之一]]train_model Word2Vec(words, size200, window6, min_count2, workers4, sg1) ## 训练word2vec skip-gram模型,指定向量维度是200# 指定上下文窗口为6即当前词与预测词在一个句子中的最大距离是6 #词频少于2次数的单词会被丢弃掉 #sg用于设置训练算法默认为0对应CBOW算法sg1则采用skip-gram算法 train_model.save(./skip-gram.model) #保存模型class gensim.models.word2vec.Word2Vec(sentencesNone,size100,alpha0.025,window5, min_count5, max_vocab_sizeNone, sample0.001,seed1, workers3,min_alpha0.0001, sg0, hs0, negative5, cbow_mean1, hashfxn,iter5,null_word0, trim_ruleNone, sorted_vocab1, batch_words10000)参数· sentences可以是一个list对于大语料集建议使用BrownCorpus,Text8Corpus或LineSentence构建。· sg 用于设置训练算法默认为0对应CBOW算法sg1则采用skip-gram算法。· size是指特征向量的维度默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。· window表示当前词与预测词在一个句子中的最大距离是多少· alpha: 是学习速率· seed用于随机数发生器。与初始化词向量有关。· min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5· max_vocab_size: 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。· sample: 高频词汇的随机降采样的配置阈值默认为1e-3范围是(0,1e-5)· workers参数控制训练的并行数。· hs: 如果为1则会采用hierarchical softmax技巧。如果设置为0defaut则negative sampling会被使用。· negative: 如果0,则会采用negativesamping用于设置多少个noise words· cbow_mean: 如果为0则采用上下文词向量的和如果为1defaut则采用均值。只有使用CBOW的时候才起作用。· hashfxn hash函数来初始化权重。默认使用python的hash函数· iter 迭代次数默认为5· trim_rule 用于设置词汇表的整理规则指定那些单词要留下哪些要被删除。可以设置为Nonemin_count会被使用或者一个接受()并返回 RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。· sorted_vocab 如果为1defaut则在分配word index 的时候会先对单词基于频率降序排序。· batch_words每一批的传递给线程的单词的数量默认为10000# 导入NLTK的文本集合类用于构建语料库和计算文本统计量和分词工具 from nltk.text import TextCollection from nltk.tokenize import word_tokenize # 原始语料数据包含3个英文句子的列表作为语料库的原始文本 sents [this is sentence one, this is sentence two, this is sentence three]# 对每个句子进行分词处理将连续字符串拆分为独立单词的列表 # word_tokenize是NLTK的分词函数此处按空格分割句子无标点 sents [word_tokenize(sent) for sent in sents] # 列表推导式遍历每个句子并分词# 打印分词结果验证分词是否成功 print(sents) # 输出[[this, is, sentence, one], [this, is, sentence, two], [this, is, sentence, three]]# 基于分词后的句子列表构建语料库对象TextCollection会自动统计语料全局信息 # 语料库包含所有分词后的句子用于后续计算词频、TF-IDF等统计量 corpus TextCollection(sents)# 打印语料库对象验证语料库是否成功构建 print(corpus) # 输出Text: this is sentence one this is sentence two...省略部分内容# 计算词语one在语料库中的TF-IDF值 # 参数1目标词语字符串参数2语料库对象或具体文档此处直接用语料库 # 本例结果为1/12≈0.0833因语料库小NLTK简化了TF-IDF计算逻辑 tf_idf corpus.tf_idf(one, corpus)# 打印计算结果TF-IDF值 print(tf_idf) # 输出0.08333333333333333# 导入jieba的文本分析模块包含TF-IDF关键词提取等功能 import jieba.analyse # 读取本地中文文本文件假设文件路径为当前目录下的datas文件夹中的chinese.txt # 使用with open上下文管理器自动关闭文件指定编码为utf-8兼容中文文本 with open(./datas/chinese.txt, encodingutf-8) as f:fileTxt f.read() # 读取文件全部内容并存储到变量fileTxt中# 使用jieba的TF-IDF算法提取文本关键词核心功能 # jieba.analyse.extract_tags是jieba内置的关键词提取函数默认基于TF-IDF算法 # 参数说明 # - fileTxt待分析的文本内容字符串类型 # - topK6指定返回前6个权重最高的关键词若文本关键词不足6个则返回实际数量 # - withWeightFalse是否返回关键词及其权重值False表示仅返回关键词列表 # - allowPOS()允许的词性列表空元组表示不限制词性提取所有可能的关键词 keywords jieba.analyse.extract_tags(fileTxt, topK6, withWeightFalse, allowPOS()) # 打印提取的关键词列表验证结果 # 输出示例[秋天, 北方, 秋雨, 感觉, 北平, 味道]具体结果取决于文本内容 print(keywords)# 导入jieba的文本分析模块包含TextRank关键词提取等功能 import jieba.analyse # 定义待分析的中文文本内容关于周又元星命名的新闻片段 # 使用反斜杠连接多行字符串保持代码可读性 text 来源中国科学报本报讯记者肖洁又有一位中国科学家喜获小行星命名殊荣4月19日下午中国科学院国家天文台在京举行“周又元星”颁授仪式 \我国天文学家、中国科学院院士周又元的弟子与后辈在欢声笑语中济济一堂。国家天文台党委书记、 \副台长赵刚在致辞一开始更是送上白居易的诗句“令公桃李满天下何须堂前更种花。” \据介绍这颗小行星由国家天文台施密特CCD小行星项目组于1997年9月26日发现于兴隆观测站 \获得国际永久编号第120730号。2018年9月25日经国家天文台申报 \国际天文学联合会小天体联合会小天体命名委员会批准国际天文学联合会《小行星通报》通知国际社会 \正式将该小行星命名为“周又元星”。 # 使用jieba的TextRank算法提取文本关键词核心功能 # jieba.analyse.textrank是基于TextRank图模型的关键词提取函数适用于挖掘文本中高关联度的核心词汇 # 参数说明 # - text待分析的文本内容字符串类型 # - topK6指定返回前6个权重最高的关键词若文本关键词不足6个则返回实际数量 # 注默认withWeightFalse即不返回权重值allowPOS参数可限制词性此处未设置表示不限制 keywords jieba.analyse.textrank(text, topK6) # 打印提取的关键词列表验证结果 # 输出示例[小行星, 命名, 国际, 中国, 国家, 天文学家]结果反映文本核心内容 # TextRank算法通过词间共现关系构建图模型权重高的词通常是文本中频繁出现且与其他词关联紧密的核心词 print(keywords)# 从gensim库导入语料库处理模块和模型模块用于构建词典、训练LDA主题模型 from gensim import corpora, models def LDA_model(words_list):基于Gensim库实现LDA主题模型训练提取文本中的潜在主题参数:words_list (list): 分词后的文档列表格式为[[词1,词2,...], [词1,词3,...], ...]返回:list: 主题与关键词的列表每个元素格式为(主题ID, 主题关键词: 词1*权重 词2*权重 ...)# ---------------------- 步骤1构造文本词典 ----------------------# 使用Gensim的Dictionary类创建词典核心作用为每个唯一单词分配唯一ID并统计词频# 遍历words_list中所有文档的分词结果收集所有不重复的单词生成{单词: 唯一ID}的映射# 例如若words_list包含[苹果,香蕉], [香蕉,橘子]则词典可能为{苹果:0, 香蕉:1, 橘子:2}dictionary corpora.Dictionary(words_list)# ---------------------- 步骤2将文本转换为词袋向量 ----------------------# 将每篇文档转换为词袋Bag-of-Words向量表示# doc2bow()方法遍历文档中的每个单词根据词典映射为(单词ID, 词频)的元组# 最终corpus是一个列表每个元素对应一篇文档的词袋向量如[[(0,1), (1,2)], ...] 表示第一篇文档中ID0的词出现1次ID1的词出现2次corpus [dictionary.doc2bow(words) for words in words_list]# ---------------------- 步骤3训练LDA主题模型 ----------------------# 初始化LDA模型核心主题建模算法用于发现文本中的潜在主题分布# 参数说明# - corpus: 输入的词袋向量语料库步骤2的输出结果# - num_topics5: 设定要提取的主题数量需根据业务需求调整如新闻文本可能设10个主题# - id2worddictionary: 词典对象用于将单词ID映射回实际单词字符串便于后续解读主题# - passes10: 模型训练时遍历语料库的次数次数越多模型越稳定但计算成本越高lda_model models.ldamodel.LdaModel(corpuscorpus, num_topics5, id2worddictionary, passes10)# ---------------------- 步骤4输出主题与关键词 ----------------------# 打印所有主题的关键词及权重核心结果每个主题由一组高权重的关键词代表# 参数说明# - num_topics5: 指定要显示的主题数量与模型训练时的num_topics一致# - num_words3: 每个主题显示前3个最相关的关键词可根据需求调整如显示5个# 输出格式示例[(0, 0.500*苹果 0.300*香蕉), (1, 0.600*橘子 0.200*水果), ...]topic_words lda_model.print_topics(num_topics5, num_words3)return topic_words# 导入jieba的词性标注模块用于分词时同时获取词语的词性 import jieba.posseg as jp def get_text(texts): # 修正原参数名text应为texts遍历输入的文本列表对输入的文本列表进行分词、词性过滤和停用词过滤输出处理后的分词列表参数:texts (list): 原始文本列表格式为[文本1, 文本2, ...]返回:list: 处理后的分词列表格式为[[词1,词2,...], [词3,词4,...], ...]# 定义需要保留的词性名词、人名、地名、机构名、英文、动词、副词# 词性标签说明n名词, nr人名, ns地名, nt机构名, eng英文, v动词, d副词flags (n, nr, ns, nt, eng, v, d) # 定义停用词无实际意义需过滤的高频词stopwords (的, 就, 是, 用, 还, 在, 上, 作为) words_list [] # 存储每篇文本处理后的分词结果# 遍历每篇原始文本进行处理for text in texts:# 核心处理逻辑# 1. jp.cut(text)使用jieba的词性标注分词返回带词性的词语对象w.word是词语w.flag是词性# 2. 过滤条件词语词性在flags中只保留指定词性且词语不在stopwords中排除无意义词# 3. [w.word for ...]提取符合条件的词语本身组成当前文本的分词列表words [w.word for w in jp.cut(text) if w.flag in flags and w.word not in stopwords]words_list.append(words) # 将当前文本的分词结果添加到总列表return words_list # 定义原始文本列表包含手机和汽车相关的产品描述 texts [作为千元机中为数不多拥有真全面屏的手机OPPO K3一经推出就簇拥不少粉丝, 很多人在冲着这块屏幕购买了OPPO K3之后发现原来K3的过人之处不止是在屏幕上, OPPO K3的消费者对这部手机总体还是十分满意的, 吉利博越PRO在7月3日全新吉客智能生态系统GKUI19发布会上正式亮相, 今年上海车展长安CS75 PLUS首次亮相, 普通版车型采用的是双边共双出式排气布局运动版本车型采用双边共四出的排气布局 ] # 调用get_text函数处理原始文本获取分词后的文本列表 words_list get_text(texts)# 打印分词结果验证处理效果 print(分词后的文本) print(words_list) # 输出示例[[拥有, 真, 全面, 手机, OPPO, K3, 一经, 推出, 簇拥, 不少, 粉丝], ...]已过滤停用词和非目标词性# 调用之前定义的LDA_model函数训练主题模型需确保LDA_model已正确定义 # 输入处理后的分词列表words_list每篇文本的分词结果 # 输出5个主题及其前3个关键词格式[(主题ID, 关键词1*权重 关键词2*权重 ...), ...] LDA_model(words_list) # 输出示例[(0, 0.069*亮相 0.069*吉利 0.069*智能), ...]主题反映文本的核心内容如手机型号、汽车品牌等文本分类 # 导入数据处理与分析库pandas用于表格数据操作numpy用于数值计算 import pandas as pd import numpy as np# 导入Word2Vec词向量模型用于后续文本向量化处理将词语转换为数值向量 from gensim.models import Word2Vec# 导入nltk的分词工具用于英文文本的分词将句子拆分为独立单词 from nltk.tokenize import word_tokenize # 读取TSV格式的短信数据集TSVTab Separated Values用制表符分隔的文本文件 # pd.read_table是pandas读取分隔符文本文件的通用方法默认分隔符为制表符 # 参数说明 # - ./sms.tsv文件路径当前目录下的sms.tsv文件 # - headerNone指定文件无表头行即第一行数据不视为列名 # - names[label, message]手动为数据框指定列名label表示短信类别message表示短信内容 sms pd.read_table(./sms.tsv, headerNone, names[label, message]) 使用bow词袋模型提取特征 # 从scikit-learn的特征提取模块导入文本向量化工具用于将文本转换为词袋特征 from sklearn.feature_extraction.text import CountVectorizer def bow_extractor(corpus):使用词袋模型Bag-of-Words, BoW提取文本特征将文本转换为数值化的词频矩阵参数:corpus (list): 原始文本语料库格式为[文本1, 文本2, ..., 文本n]返回:sparse matrix: 词频特征矩阵每行对应一篇文本每列对应一个词语值为该词在文本中的出现次数# ---------------------- 步骤1初始化词袋模型向量化器 ----------------------# CountVectorizer是scikit-learn中实现词袋模型的核心工具用于统计词语出现频率# 参数说明# - stop_wordsenglish: 指定自动过滤英文停用词如the, and, is等无实际意义的高频词# - decode_errorignore: 当遇到无法解码的字符时忽略错误避免因编码问题导致程序崩溃# - min_df1: 保留在至少1篇文本中出现的词语若设为2则仅保留在≥2篇文本中出现的词用于过滤低频词# - ngram_range(1,1): 提取1-gram特征即单个词语不考虑词语组合若设为(1,2)则同时提取单词语和双词语组合count_vect CountVectorizer(stop_wordsenglish, decode_errorignore, min_df1, ngram_range(1,1)) # ---------------------- 步骤2拟合模型并转换文本为词频矩阵 ----------------------# fit_transform()是核心方法包含两个操作# 1. fit拟合遍历所有文本统计词语的全局信息如所有出现的词语、词频等生成词典# 2. transform转换将每篇文本转换为词频向量向量长度为词典大小值为对应词语的出现次数# features是一个稀疏矩阵sparse matrix形状为文本数量词典大小# 示例若corpus包含[I love you, He loves you]词典为[I, love, you, He, loves]# 则转换后的矩阵为[[1,1,1,0,0], [0,0,1,1,1]]每一行对应一篇文本的词频features count_vect.fit_transform(corpus) return features# 从scikit-learn预处理模块导入标签编码工具用于将文本标签转换为数值形式 from sklearn.preprocessing import LabelEncoder # 从scikit-learn线性模型模块导入逻辑回归分类器用于后续分类任务 from sklearn.linear_model import LogisticRegression # 从scikit-learn指标模块导入准确率计算函数用于评估模型性能 from sklearn.metrics import accuracy_score # 从scikit-learn模型选择模块导入训练集-测试集划分工具用于分离训练数据和测试数据 from sklearn.model_selection import train_test_split # ---------------------- 步骤1编码分类标签将文本标签转换为数值 ---------------------- # 初始化标签编码器LabelEncoder用于将字符串形式的分类标签转换为0/1/2...的数值形式 y_encoder LabelEncoder() # 对短信数据集中的label列分类标签如spam/ham进行编码 # fit_transform()方法先拟合数据统计所有唯一标签再将标签转换为数值如ham→0spam→1 y y_encoder.fit_transform(sms[label]) # y是编码后的数值标签数组形状为(样本数,)# ---------------------- 步骤2提取文本特征使用词袋模型转换短信内容 ---------------------- # 调用之前定义的bow_extractor函数将短信内容message列转换为词袋特征矩阵 # bow_extractor的输入是文本列表sms[message]输出是词频稀疏矩阵每行对应一条短信每列对应一个词语 x bow_extractor(sms[message]) # x是文本特征矩阵形状为(样本数, 词典大小)使用tf-idf提取特征 # 从scikit-learn的特征提取模块导入TF-IDF向量化工具用于将文本转换为TF-IDF特征矩阵 from sklearn.feature_extraction.text import TfidfVectorizer def tfidf_extractor(corpus):使用TF-IDF词频-逆文档频率模型提取文本特征将文本转换为数值化的TF-IDF权重矩阵参数:corpus (list): 原始文本语料库格式为[文本1, 文本2, ..., 文本n]返回:sparse matrix: TF-IDF特征矩阵每行对应一篇文本每列对应一个词语值为该词在文本中的TF-IDF权重# ---------------------- 步骤1初始化TF-IDF向量化器 ----------------------# TfidfVectorizer是scikit-learn中实现TF-IDF模型的核心工具结合了词袋模型与TF-IDF权重计算# 参数说明# - stop_wordsenglish: 指定自动过滤英文停用词如the, and, is等无实际意义的高频词# - decode_errorignore: 当遇到无法解码的字符时忽略错误避免因编码问题导致程序崩溃# 其他可选参数min_df2过滤低频词ngram_range(1,2)提取单词语双词语组合等此处使用默认值tfidf_transformer TfidfVectorizer(stop_wordsenglish, decode_errorignore) # ---------------------- 步骤2拟合模型并转换文本为TF-IDF矩阵 ----------------------# fit_transform()是核心方法包含两个操作# 1. fit拟合遍历所有文本统计词语的全局信息如所有出现的词语、词频、文档频率等# 2. transform转换将每篇文本转换为TF-IDF向量向量长度为词典大小值为对应词语的TF-IDF权重# feature是一个稀疏矩阵sparse matrix形状为文本数量词典大小# 示例若某词在多篇文本中高频出现如the则其TF-IDF权重较低若某词在少量文本中高频出现如spam则权重较高feature tfidf_transformer.fit_transform(corpus) return feature拆分训练集和测试集其中测试集比例是30%随机值为5 ## 拆分训练集和测试集测试集比例30%随机种子固定为5以保证结果可复现 X_train, X_test, y_train, y_test train_test_split(x, y, # x是文本特征矩阵如BoW或TF-IDF特征y是编码后的标签test_size0.3, # 测试集占比30%剩余70%为训练集random_state5 # 随机种子设为5确保每次运行代码时数据拆分结果一致 )使用逻辑回归进行文本分类 from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score model LogisticRegression() ## 模型初始化 model.fit(X_train, y_train) ##训练模型 test_y_pred model.predict(X_test) #对测试集进行预测 accuracy_score(y_test, test_y_pred) #计算预测准确率0.9796650717703349使用随机森林进行文本分类 from sklearn.ensemble import RandomForestClassifier clf RandomForestClassifier(max_depth100, random_state41) ## 模型初始化,最大深度为100随机值41 clf.fit(X_train, y_train) ##训练模型 test_y_pred clf.predict(X_test) #对测试集进行预测 accuracy_score(y_test, test_y_pred) #计算预测准确率0.9748803827751196词云 # 导入必要的库 # jieba中文分词工具用于将文本分割成词语词云生成前的关键预处理步骤 # WordCloud词云生成核心库用于根据文本内容生成词云图像 # re正则表达式库本例未直接使用可能用于文本清洗可根据实际需求添加 # matplotlib.pyplot绘图库用于显示生成的词云图像 import jieba from wordcloud import WordCloud import re import matplotlib.pyplot as plt def getW(datapath):读取指定路径的文本文件内容参数:datapath (str): 文本文件的路径如./datas/chinese.txt返回:str: 文件的全部文本内容字符串格式# 使用with open上下文管理器读取文件自动关闭文件避免资源泄露# encodingutf-8指定文件编码格式兼容中文文本with open(datapath, encodingutf-8) as f:file_context f.read() # 读取文件所有内容并存储到变量return file_context # ---------------------- 步骤1读取文本数据 ---------------------- # 定义文本文件路径假设文件位于当前目录下的datas文件夹中的chinese.txt data_Path ./datas/chinese.txt # 调用getW函数读取文本内容words变量存储原始文本字符串 words getW(data_Path) # ---------------------- 步骤2生成词云对象 ---------------------- # 初始化WordCloud对象核心参数设置 # 参数说明 # - font_pathmywc.ttf指定中文字体文件路径必选WordCloud默认不包含中文字体需手动提供ttf格式字体文件 # - background_colorwhite词云背景颜色可选默认黑色 # - width500, height400词云图像的宽度和高度像素 # - margin2词云边缘留白像素值控制词语之间的间距 wordcloud WordCloud(font_pathmywc.ttf,background_colorwhite,width500,height400,margin2 ).generate(words) # generate()方法根据输入文本生成词云自动统计词语频率并布局 # ---------------------- 步骤3使用matplotlib显示词云 ---------------------- # 创建绘图窗口1行1列子图图像尺寸17英寸×9英寸 fig, ax plt.subplots(1, 1, figsize(17, 9))# 在子图中显示词云图像imshow()用于显示二维图像 ax.imshow(wordcloud)# 隐藏坐标轴的边框上、右、下、左四边 ax.spines[top].set_visible(False) ax.spines[right].set_visible(False) ax.spines[bottom].set_visible(False) ax.spines[left].set_visible(False)# 隐藏x轴和y轴的刻度及标签避免干扰词云显示 ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False)# 显示绘图窗口弹出窗口或在Jupyter中嵌入显示 plt.show() # ---------------------- 步骤4保存词云图像到本地 ---------------------- # to_file()方法将词云图像保存为指定路径的图片文件支持png、jpg等格式 # 本例保存到result文件夹下的1.png需确保result文件夹已存在否则会报错 wordcloud.to_file(result/1.png) 如果对大家有用的话希望多多点赞关注转发。谢谢 如果需要相关资料看看我的绑定资源上传吧。
http://www.hkea.cn/news/14561808/

相关文章:

  • 怎么学习制作网站百度搜索推广官网
  • 全网通网站建设网站群如何做网站
  • 建设工程安全备案网站平台公司和项目公司的区别
  • me域名网站做seo网站公司
  • 动易网站内容管理系统电视剧排行榜
  • 可以免费进入的网站正能量域名苏宁易购网站建设建议
  • 做网站 违法建设工程服务平台
  • 绍兴优秀做网站的wordpress用户上传
  • 酒店设计网站推荐网站建设杭州哪家便宜
  • 中文域名注册 .网站软考网络工程师中级
  • 中国商标注册网官方网站小程序代理是做什么的
  • 局网站建设情况一级a做爰片i网站
  • 莆田外贸网站建设推广网站开发实现页面的跳转
  • 网站网页优化怎么做云一网站建设
  • 什么网站可以接模具做网站建设-设计
  • 网站开发简单吗网址导航名词解释
  • 网站建设咨询公司地址如何将网站的关键词排名优化
  • 建筑网站设计网站建设方案总结语
  • 网站开发有什么职位农家乐网站源代码
  • 简述网站设计的开发流程wordpress 没有模板选项
  • 自己做网站,为什么出现403问答社交网站开发
  • 常州制作网站网站第三方统计代码
  • 温州阀门网站建设网站快速收录方法
  • 织梦系统怎么做单页网站北京seo优化
  • 企业网站数据库音乐网站整站程序
  • 长沙企业网站模板wordpress导出淘宝
  • 刚学完网站开发军事新闻最新
  • 免费软件不收费网站建筑单位资质
  • 石家庄建站爱 做 网站
  • 求推荐专门做借条的网站网站更改机房备案