首页 > 其他分享 >01NLP开始入门

01NLP开始入门

时间:2024-12-31 22:52:49浏览次数:5  
标签:入门 开始 compile re 01NLP str pattern print findall

WEB项目看来是完不成了,先把论文做了吧,我干嘛选NLP。。。

一、经典的NLP和现在的NLP

  • 经典的NLP
    经典的NLP需要学习词袋模型,TF IDF,word to vector,LSTM,LDA,很多都是传统算法和传统模型。
    这些东西完全不用学习了,完全用不上。

  • 现在的NLP
    是一个纯的Transformer的模型
    拼的是预选模型
    和之前的经典NLP一点的相关性都没有了
    想要快速上手,需要将Transformer熟练起来
    然后找HUGGING FACE这样的一个工具
    或者找PyTorch中的一些模板
    直接上手开始做,主要是分类的模型

二、python字符串的处理

关于环境什么都不用搭建,直接使用下面这个网站即可:
https://www.kaggle.com/

# 1 去掉字符串前后的空白
str = " 今天天气真好,你那里天气好吗? "
str.strip()
# 2 去掉字符串左边或者右边的空白
str = " 今天天气真好,你那里天气好吗? "
print(str.lstrip())
print(str.rstrip())
# 3 去除指定的字符(将需要去除的字符全部放进去)
str = "*&^#$%F今天天气真好,你那里天气好吗?*&%#@A"
print(str.strip("*&^#$%F*&%#@A"))
# 4 替换
str = "今天天气真好今,天,你那里天气好吗?"
print(str.replace("今天", "明天"))
# 5 利用替换去除中间内容
str = "今天天气真好今,天,你那里天气好吗?"
print(str.replace("今天", ""))
# 6 查找一个单词的位置
str = "今天天气真好今,天,你那里天气好吗?"
print(str.find("今天"))
# 7 判断字符串里面是否全部是字母
str = "Hello World!"
print(str.isalpha())
str = str.replace(" ", "")
str = str.replace("!", "")
print(str.isalpha())
# 8 判断字符串里面是否全部是数字
str = "1020103455"
print(str.isdigit())
# 9 指定字符对字符串进行分割操作
str = "今天 天气 好晴朗, 处处 好风光"
print(str.split(" "))
# 10 指定字符对字符串列表合并
str = "今天 天气 好晴朗, 处处 好风光"
str = str.split(" ")
print("&&".join(str))
# 11 查看字符串对象有什么方法
help(str)

# 因为字符串是不可变类型,所以如果需要对字符串进行修改需要重新赋值来创建一个新的字符串对象。

二、正则表达式语法





在python中re模块是正则表达式的模块,re模块在python当中已经默认进行安装了。

# 1 预先创建一个正则模板
import re
pattern = re.compile(f".")
# 2 根据正则模板在字符串中进行匹配,这里点表示匹配字符串中每一个字符
str = "你对我来说很重要。11aabb"
print(re.findall(pattern, str))
# 3 字符集合[],在中括号里面的字符都会被匹配掉
pattern = re.compile(f"[ab]")
print(re.findall(pattern, str))
# 4 字符集合的范围写法,这里匹配所有的大写字母和所有的小写字母
str = "你好啊我是am78星云的uUrRTh5533号机器人。"
pattern = re.compile(f"[a-zA-Z]")
print(re.findall(pattern, str))
# 5 指定匹配不包括字符集合中的元素
pattern = re.compile(f"[^a-zA-Z]")
print(re.findall(pattern, str))
# 6 将字符集合取并集进行匹配
pattern = re.compile(f"[a-zA-Z]|[0-9]")
print(re.findall(pattern, str))

# 1 匹配数字,可以等价的使用字符集合来匹配
import re
str = "你好啊我是am78星云 的uUrRTh5533号\n机器人。"
pattern = re.compile(f"\d")
print(re.findall(pattern, str))
# 2 使用对应字母的大写表示取反的
pattern = re.compile(f"\D")
print(re.findall(pattern, str))
# 3 匹配数字和字母(注意汉字也算是字母)
pattern = re.compile(f"\w")
print(re.findall(pattern, str))
# 4 匹配非数字和字母
pattern = re.compile(f"\W")
print(re.findall(pattern, str))
# 5 匹配空白
pattern = re.compile(f"\s")
print(re.findall(pattern, str))

# 1 匹配零次或者多次数字
import re
str = "你好啊我是am78星云 的uUrRTh5533号\n机器人。"
pattern = re.compile(f"\d*")
print(re.findall(pattern, str))
# 2 匹配1次或者多次数字
pattern = re.compile(f"\d+")
print(re.findall(pattern, str))
# 3 匹配0次或者1次数字
pattern = re.compile(f"\d?")
print(re.findall(pattern, str))
# 4 匹配多少次,注意这里需要加上r不然这里会出现问题
str = "你好啊我是am78星云 的uUrRTh5533号\n机器人。"
pattern = re.compile(r"\d{2}")
print(re.findall(pattern, str))
# 5 指定匹配次数的范围,能够匹配更多就默认会匹配更多,所以最后一次匹配的是5553
str = "你好啊我是am78星云 的uUrRTh5533号\n机器人。"
pattern = re.compile(r"\d{2,4}")
print(re.findall(pattern, str))

三、match和search

两个方法返回的不是列表,而是一个Match类对象,如果匹配不成功返回的是None类型,一般使用的时候都需要进行判断是否为None类型。
match是从头开始,search可以跳过开头。

# 1 match
import re
pattern = re.compile(r"\d")
str = "123木头人,不许说话,不许动。"
print(re.match(pattern, str))  # <re.Match object; span=(0, 1), match='1'>
print(re.match(pattern, str).group())
# str = "木头人123,不许说话不许动。"
# print(re.match(pattern, str).group())  # 报错
# 2 search
str = "木头人123,不许说话不许动。"
print(re.search(pattern, str).group())  # 正常

四、sub替换

# 1 sub,正则模板,替换成,原字符串,替换的次数
import re
str = "aabbcc112233hhg23gss"
pattern = re.compile(r"\d")
print(re.sub(pattern, '数字', str, 2))
# 2 subn多返回一个替换的次数
pattern = re.compile(r"\d")
print(re.subn(pattern, '数字', str, 2))

五、split

# 1 split
import re
str = "所有老婆:大老婆二老婆小老婆"
pattern = re.compile(r"[大二小]")
print(re.split(pattern, str))

六、命名组

# 1 命名组
import re
str = "机器学习,人工智能123深度学习"
pattern = re.compile(r"(?P<d>\d+)(?P<nd>\D+)")
print(re.search(pattern, str).group())
print(re.search(pattern, str).group("d"))
print(re.search(pattern, str).group("nd"))
print(re.search(pattern, str).groups())

对于正则表达式来说只需要学习简单的语法,剩下的交给gpt即可。

七、NLTK

老牌自然语言处理工具包,主要用于处理英文数据。

# import nltk
# nltk.download()  # 需要安装额外的工具包

from nltk.tokenize import word_tokenize  # 分词器
from nltk.text import Text  # 创建Text对象
input_str = "Today's weather is good,very windy and sunny, we have no classes in the afternoon,We have to play backetball tomorrow."
# 1 分词操作
tokens = word_tokenize(input_str)
tokens = [word.lower() for word in tokens]
print(tokens)
# 2 将分好的词初始化为Text对象,接下来好对Text对象进行别的操作
t = Text(tokens)
good_count = t.count('good')  # 统计这个单词出现的次数
print(good_count)
good_index = t.index('good')  # 这个单词出现在单词列表的索引位置
print(good_index)
t.plot(8)  # 展示前八个出现次数最多的词语

八、停用词及词性标注

from nltk.corpus import stopwords  # 导入停用词
# stopwords.readme().replace('\n', ' ')  # 停用词说明文档
print(stopwords.fileids())  # 看看支持哪些语言的停用词,之前是没有中文的这里居然有中文的停用词了真牛逼
# 查看指定的语言的停用词
# print(stopwords.raw('chinese'))  # 感觉中文的停用词有些少
print(stopwords.raw('english').replace('\n', ' '))
# 1 去掉停用词
from nltk.tokenize import word_tokenize  # 分词器
input_str = "Today's weather is good,very windy and sunny, we have no classes in the afternoon,We have to play backetball tomorrow."
tokens = word_tokenize(input_str)
test_words = [word.lower() for word in tokens]
test_words_set = set(test_words)
test_words_set.intersection(set(stopwords.words('english')))  # 与停用词词典的交集
filtered = [w for w in test_words_set if (w not in stopwords.words('english'))]  # 如果单词不在停用词表中就进行保留-过滤停用词
print(filtered)
# 2 词性标注
from nltk import pos_tag
tags = pos_tag(test_words)
for tag in tags:
    print(tag)
# 3 分块
from nltk.chunk import RegexpParser
sentence = [('the', 'DT'), ('little', 'JJ'), ('yellow', 'JJ'), ('dog', 'NN'), ('died', 'VBD')]
grammer = "MY_NP: {<DT>?<JJ>*<NN>}"  # 有点类似正则表达式
cp = nltk.RegexpParser(grammer)  # 生成规则
result = cp.parse(sentence)  # 进行分块
print(result)
print(type(result))  # <class 'nltk.tree.Tree'>,这里使用draw画不出来,有点难受result.draw()
# 4 命名实体识别
from nltk import ne_chunk
sentence = "Edison went to Tsinghua University today."
print(ne_chunk(pos_tag(word_tokenize(sentence))))

下一节:数据清洗
看的B站的小迪,一个个慢慢看吧,反正也不会。
到时候论文请教导师吧,哈哈哈

标签:入门,开始,compile,re,01NLP,str,pattern,print,findall
From: https://www.cnblogs.com/wumouhao/p/18644868

相关文章

  • Linux入门基础(Centos7)
    Linux入门基础Linux内核Linux的目录结构Linux的层级关系表示Linux命令基础格式ls命令cd命令pwd命令相对路径和绝对路径特殊路径符mkdir命令touch命令cat命令more命令cp命令mv命令rm命令which命令find命令grep命令wc命令管道符echo命令反引号重定向符tail命令vim编辑器命......
  • Python入门教程 —— 安装软件
    1.安装python下载python访间Python官网:https:/www.python.org  安装python自定义安装,配置Python的环境变量。 选着安装路径,然后安装安装成功后,查看python版本:python-V2.安装 pycharm选着安装路径......
  • 关于C++游戏开发入门:如何从零开始实现一个完整的游戏项目!
      成长路上不孤单......
  • MongoDB 入门操作(Introduction to MongoDB Operations)
    MongoDB入门操作目录MongoDB是非关系型文档数据库的典型代表,非常适合写入大批量、高并发以及不规则的数据,因此广泛应用于爬虫开发的存储后端。✍当业务需求对联表查询不是很强烈,相反需要存储大量关联性不是很强的数据时,可以考虑使用MongoDB文档型数据库。在Mon......
  • 袁町招教---从12月开始备考语文教师编攻略计划(自学版)
    语文学科一直都是教师编考试里数一数二的卷,想要上岸还真是不容易。去年我能以高分上岸我们市区语文教师编也是努力了很久的,下面给大家分享我的备考经验,希望能帮到你们顺利一战上岸!!-......
  • 从零开始的Python世界生活——语法基础先导篇(Python小白零基础光速入门上手)
    从零开始的Python世界生活——语法基础先导篇(Python小白零基础光速入门上手)1.准备阶段1.1下载并安装Python1.1.1下载步骤:访问Python官方网站:点击这里下载Python在页面上,选择适合你操作系统的Python版本(Windows、macOS或Linux)。点击下载按钮,开始下载安装程序。1.1.2安......
  • Stable Diffusion完整入门指南,保姆级教程!
    StableDiffusion的问世,引领了AI图像生成领域的新热潮。紧接着,在StableDiffusion模型的基础上,各种风格和内容的再训练模型不断涌现,极大地扩展了AI图像生成的多样性和细节;Lora、ControlNet等插件的推出,进一步降低了模型训练的复杂度,并提升了图像生成的效果。然而,许多初学者......
  • 速成AI绘画大师:Stable Diffusion(SD)入门指南与安装实操
    2024Ai绘画技术大爆发的一年,目前两款Ai神器大火,一款是大名鼎鼎的Midjourney,另外一款—StableDiffusion。而StableDiffusion它究竟能做什么?看来这么多那么要开始讲一讲今天的重点东西了更多实操教程和AI绘画工具,可以扫描下方,免费获取1,StableDiffusion原理:Stable......
  • Vue 3 + TypeScript 从入门到进阶:快速上手指南
    Vue3+TypeScript从入门到进阶:快速上手指南Vue3是Vue.js的最新版本,而TypeScript是一种可以极大提升开发效率和代码质量的强类型语言。当Vue3与TypeScript结合使用时,可以带来更高效的开发体验。本文将重点介绍Vue3与TypeScript的结合使用方式,并提供详细的代码......
  • Vue 3 从入门到进阶:快速上手指南
    Vue3从入门到进阶:快速上手指南Vue3是Vue.js的最新版本,引入了许多强大的新特性,如CompositionAPI、全新的响应式系统等,为开发者提供了更高的灵活性和性能优化。本文将带你快速了解Vue3的核心概念,并提供代码示例帮助你上手。一、Vue3新特性概览1.CompositionAPIC......