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

自然语言处理(jieba库分词)

1、完全切分法、正向最大匹配算法、逆向最大匹配算法和双向最大匹配算法

一、实验内容

一个好的NLP系统一定要有完备的词典,用于判断算法分出的词是否是具有实际意义的词。自定义一个词典,比如dic = ["项目", "研究", "目的", "商品", "服务", "和服", "和尚", "尚未", "生命", "起源", "当下", "雨天", "地面", "积水", "下雨天", "欢迎", "老师", "生前", "就餐", "迎新", "师生", "前来"]。实现相关的分词方法:完全切分、正向最长匹配、逆向最长匹配、双向最长匹配算法,并输入一些句子验证分词结果的正确性

二、实现步奏

(一)新建Python工程NLPExp01

1.打开编辑器,新建NLPExp01工程

 2.打开对应工程,在对应目录下新建python文件exp01.py

(二)定义字典内容,实现不同的分词模式

1.字典内容可自定义,如 ["项目", "研究", "目的", "商品", "服务", "和服", "和尚", "尚未", "生命", "起源", "当下", "雨天", "地面", "积水", "下雨天", "欢迎", "老师", "生前", "就餐", "迎新", "师生", "前来"]

2.实现对应的分词匹配算法:完全切分法、正向最大匹配算法、逆向最大匹配算法和双向最大匹配算法

3.输入验证字符,检查分词结果,至少输入“和尚尚未结婚”、“中外科学研究”、“商品和服务”“研究生命起源”“当下雨天地面积水”“结婚的和尚未结婚的”“欢迎新老师生前来就餐”,检查对应的分词结果

三、实现代码

#my_dic为自定义字典,内容可更改
my_dic = ["项目", "研究", "目的", "商品", "服务", "和服", "和尚", "尚未", "生命", "起源", "当下", "雨天", "地面", "积水", "下雨天", "欢迎", "老师", "生前", "就餐", "迎新", "师生", "前来"];#在双向匹配中调用,用于比较列表元素位置
def select_word(text):result = 0for i in text:if (len(i) == 1):result += 1return result#在main函数中调用,将输入数据初始化为列表数据
def fully_segment(text, dic):word_list = []for i in range(len(text)):for j in range(i + 1, len(text) + 1):word = text[i:j]if word in dic:word_list.append(word)return word_list#正向最大匹配
def positive_max_match(text, dict):word_list = []i = 0while(i<len(text)):longest_word = text[i]for j in range(i+1, len(text) + 1):#从字典里开始找词,如果找到,先记录,如果有更长的,保存,直到遍历结束word = text[i:j]if word in dict:if len(word) > len(longest_word):longest_word = wordword_list.append(longest_word)i += len(longest_word)return word_list#逆向最大匹配
def backward_segment(text, dict):word_list = []i = len(text) - 1while (i >= 0):longest_word = text[i]for j in range(0, i):word = text[j:i + 1]if word in dict:if len(word) > len(longest_word):longest_word = wordword_list.insert(0, longest_word)i -= len(longest_word)return word_list#双向最大匹配
def all_segment(text, dic):list_forward = positive_max_match(text, dic)list_backward = backward_segment(text, dic)list_final = []if (len(list_forward) > len(list_backward)):list_final = list_backward[:]elif (len(list_forward) < len(list_backward)):list_final = list_forward[:]else:if (select_word(list_forward) > select_word(list_backward)):list_final = list_backward[:]elif (select_word(list_forward) < select_word(list_backward)):list_final = list_forward[:]else:list_final = list_backward[:]return list_finalif __name__ == "__main__":#使用自定义词库进行分词练习while (1):a = input("请输入你要分词的句子:(输入0结束输入)")if (a == '0'):print("输入结束!")breakb = fully_segment(a, my_dic)print("分词的结果", b)list_forward = positive_max_match(a, my_dic)list_backward = backward_segment(a, my_dic)list_all = all_segment(a, my_dic)print("正向最长匹配", list_forward)print("逆向最长匹配", list_backward)print("双向最长匹配", list_all)

2、使用jieba库进行中文分词、词组特性标注、关键词提取的相关方法 

一、实验内容

安装jieba分词库,并调用其中的分词、词组特性标注、关键词提取的相关方法,查看对应的功能。

二、实现步奏

1.安装jieba工具包:pip install jieba;

2.调用jieba分词功能:

seq_list = jieba.cut(“中外科学研究”,cut_all=True)

print(“全模式”+“/”.join(seq_list))

seq_list = jieba.cut(“中外科学研究”,cut_all=False)

print(“精确模式”+“/”.join(seq_list))

seq_list = jieba.cut_for_search(“中外科学研究”)

print(“全模式”+“/”.join(seq_list))

三、实现代码 

if __name__ == "__main__":# 使用jieba词库进行不同模式的分词,词性标注方法和关键字的提取seq_list = jieba.cut("中外科学研究", cut_all=True)print("全模式:" + "/".join(seq_list))seq_list = jieba.cut("中外科学研究", cut_all=False)print("精确模式:" + "/".join(seq_list))seq_list = jieba.cut_for_search("中外科学研究")print("搜索模式:" + "/".join(seq_list))

二、实现步奏

1.调用词性标注功能;

import jieba.posseg as psg

text=”去北京大学学习”

seg = psg.cut(text)

for ele in seg:

    print(ele)

三、代码实现 

import jieba.posseg as psgif __name__ == "__main__":# 使用jieba词库进行不同模式的分词,词性标注方法和关键字的提取text = "去北京大学学习"seg = psg.cut(text)for ele in seg:print(ele)
http://www.lryc.cn/news/448286.html

相关文章:

  • MYSQL-查看函数创建语句语法(五)
  • 图解IRF
  • 关于Chrome浏览器F12调试,显示未连接到互联网的问题
  • 南沙csp-j/s一对一家教 解一本通题: 1937:【06NOIP普及组】数列
  • 【分布式微服务云原生】K8s(Kubernetes)基本概念和使用方法
  • 引入Scrum激发研发体系活力
  • JAVA开源项目 技术交流分享平台 计算机毕业设计
  • Linux学习笔记之重点概念、实用技巧和常见问题解答。
  • “数字武当”项目荣获2024年“数据要素×”大赛湖北分赛文化旅游赛道一等奖
  • 开箱即用的大模型应用跟踪与批量测试方案
  • 在MySQL中,要查询所有用户及其权限,您可以使用以下命令:
  • VMware下载安装教程
  • AI跟踪报道第58期-新加坡内哥谈技术-本周AI新闻: OpenAI动荡时刻和Meta从未如此动人
  • 深入理解 Nuxt.js 中的 app:error:cleared 钩子
  • 国内白帽子能赚多少钱?有多少白帽子全职挖洞能养活自己?零基础兼职挖漏洞收藏这一篇就够了
  • 速盾:cdn是怎么加速视频的?
  • 前台项目启动/打包报错 Error: error:0308010C:digital envelope routines::unsupported
  • IPEmotion 2024 R2现支持Amazon S3和Windows SMB服务器
  • Cache与内存-系统架构师(七十三)
  • Synchronized和 ReentrantLock有什么区别?
  • 加速链游Web2.5过渡到 Web3,一文读懂 Zypher Network 的 Zytron 引擎
  • 是否是递增的字符串(c语言)
  • Unity 资源 之 PoseAI 基于肌肉的姿势创作工具
  • 【IP限流】⭐️通过切面实现无校验保护接口的防刷逻辑
  • SwiftUI简明概念(3):Path.addArc的clockwise方向问题
  • $attrs 和 $listeners
  • 智尚招聘求职小程序V1.0.17
  • C语言编程-经典易错题1
  • 联宇集团:如何利用CRM实现客户管理精细化与业务流程高效协同
  • 如何排查 Windows 无法连接ubuntu远程服务器