Python----NLP自然语言处理(英文分词器--NLTK)

一、NLTK_介绍

        NLTK(Natural Language Toolkit,自然语言处理工具包),一个主要用于清洗和处理英文文本的Python工具包。它有很多的功能,我们主要使用的是它的分词功能,之前讲过中文分词是比较复杂的,但是英文分词只需要按照空格分割就好了,英文分词的重点是词形还原,自定义词组等等这些需求。英文的它会随着单复数、时态、人称等等发生拼写的变化。我们在分词的时候就要还原这个单词的原型。

安装:

        pip install nltk -i https://pypi.tuna.tsinghua.edu.cn/simple 

下载语料库

import nltk
nltk.download()

下载punkt,averaged_perceptron_tagger,averaged_perceptron_tagger_eng,wordnet,stopwords

二、分词

# 导入NLTK的分词工具
from nltk import word_tokenize# 待处理的英文文本
text = '''
I have my own name. They all say it's a nice name. I'd like to know what your name is.
'''# 使用word_tokenize进行分词
tokens = word_tokenize(text)# 将所有单词转为小写
res = [i.lower() for i in tokens]# 输出结果
print(res)
['i', 'have', 'my', 'own', 'name', '.', 'they', 'all', 'say', 'it', "'s", 'a', 'nice', 'name', '.', 'i', "'d", 'like', 'to', 'know', 'what', 'your', 'name', 'is', '.']

三、词形还原

        NLTK可以将英文中的动词,名词,形容词等词形还原为原型

# 词形还原
from nltk.stem import WordNetLemmatizer
# 创建词形还原对象
wnl = WordNetLemmatizer()
# 词形还原,需要传入词和词形
print(wnl.lemmatize('better', pos='a'))
print(wnl.lemmatize('saddest', pos='a'))words = ['cars', 'men',"running","ate","saddest","fancier"]
pos_tags = ['n','n','v','v','a','a']for i in range(len(words)):print(words[i]+"--->"+ wnl.lemmatize(words[i],pos_tags[i]))

四、Text对象

        Text是NLTK中一个非常有用的对象,它提供了一种方便的方式来处理和分析文本数据。他可以进行文本统计,词频可视化,文本搜索等等文本操作。

from nltk.text import Text
from nltk import word_tokenize
text='''
I have my own name. They all say it's a nice name. I'd like to know what your name is.
'''
# 分词
tokens = nltk.word_tokenize(text)# 创建Text对象
text = nltk.Text(tokens)# 词频统计
print(text.count('to'))# 计算每个单词的频率
fdist = text.vocab()
print(fdist.most_common(10)) # 输出前10个最频繁的词# 查找某个单词的上下文
print(text.concordance('nice'))# 绘制词频个分布图
text.plot(5) # 绘制前5个最频繁的词
1
[('name', 3), ('.', 3), ('I', 2), ('have', 1), ('my', 1), ('own', 1), ('They', 1), ('all', 1), ('say', 1), ('it', 1)]
Displaying 1 of 1 matches:
e my own name . They all say it 's a nice name . I 'd like to know what your n

五、停用词

# 导入NLTK库中的停用词语料库
from nltk.corpus import stopwords# 打印所有可用的停用词语言列表
print(stopwords.fileids())  # 输出例如['arabic', 'azerbaijani', 'danish'...]# 获取英语停用词列表
english_stopwords = stopwords.words('english')  # 获取英语停用词列表
print(english_stopwords)  # 打印输出英语停用词,如['i', 'me', 'my'...]'''
中文注释说明:
1. stopwords.fileids() - 查看NLTK支持的所有停用词语言
2. stopwords.words('language') - 获取指定语言的停用词列表
3. 英语停用词包含"a", "the", "is"等常见但对语义分析无重要意义的词汇
'''

过滤停用词 

text = '''
I have my own name. They all say it's a nice name. I'd like to know what your name is.
'''# 使用word_tokenize对文本进行分词
tokenize = word_tokenize(text)# 创建不重复的小写单词集合
tokenize_word = set({i.lower() for i in tokenize})# 过滤停用词,只保留非停用词
[i for i in tokenize_word if i.lower() not in english_stopwa]'''
代码功能说明:
1. 定义了一个英文文本字符串
2. 使用word_tokenize将文本分割成单词列表
3. 通过集合推导式生成不重复的小写单词集合
4. 最后使用列表推导式过滤掉停用词,只保留有实际意义的词汇

六、词性标注

from nltk.tokenize import word_tokenize
from nltk.tag import pos_tagtext = "It's a leading platform for building Python programs to work with human language data."
tokens = word_tokenize(text)  # 分词
tags = pos_tag(tokens)        # 词性标注print(tags)
POS Tag指代
CC并列连词
CD基数词
DT限定符
EX存在词
FW外来词
IN介词或从属连词
JJ形容词
JJR比较级的形容词
JJS最高级的形容词
LS列表项标记
MD情态动词
NN名词单数
NNS名词复数
NNP专有名词
PDT前置限定词
POS所有格结尾
PRP人称代词
PRP$所有格代词
RB副词
RBR副词比较级
RBS副词最高级
RP小品词
UH感叹词
VB动词原型
VBD动词过去式
VBG动名词或现在分词
VBN动词过去分词
VBP非第三人称单数的现在时
VBZ第三人称单数的现在时
WDT以wh开头的限定词

七、分块功能

        英文中的词组数量非常多,很难全部表示出来,但英文的词组构成有一定规律,比如动词短语是动词+名词,形容词短语是形容词+名词。NLTK 提供了正则表达式分块的方式来识别和构建自定义词组。

        我们可以定义的正则表达式来匹配和组合文本中的词汇,从而创建自定义的词组。

from nltk.tokenize import word_tokenize
from nltk import pos_tag, RegexpParser# 示例文本
text = "The quick brown fox jumped over the lazy dog."# 分词和词性标注
tokens = word_tokenize(text)
tagged = pos_tag(tokens)# 定义名词短语规则
grammar = """NP: {<DT>?<JJ>*<NN>}  # 名词短语
"""# 创建语法分析器
parser = RegexpParser(grammar)
tree = parser.parse(tagged)# 打印结果
data = tree.pretty_print()# 提取并输出词组,查找所有名词短语
for subtree in tree.subtrees(filter=lambda t: t.label() == 'NP'):print(' '.join([token for token, pos in subtree.leaves()]))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915261.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统浏览器过时了?Dia如何用AI重新定义上网体验

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 传统浏览器过时了&#xff1f;Dia如何用AI重新定义上网体验它是什么核心功能搜索编程左右互动感谢…

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 1. 引言 在当今的互联网通信时代,实时语音通信已成为人们日常生活中不可或缺的一部分。然而,语音通信质量常…

Attu-Milvus向量数据库可视化工具

本文介绍了如何安装可视化工具Attu&#xff0c;包括使用Docker镜像启动并访问Attu服务。 目录 前言 一、Attu安装 1. Docker容器安装 2. 桌面程序安装 二、使用 Milvus Web U 前言 Attu是一款专为Milvus向量数据库打造的开源数据库管理工具&#xff0c;提供了便捷的图形化…

高效检测数据突变的MDAM算法详解

在数据分析领域&#xff0c;我们经常需要检测数据序列中的异常变化。今天给大家介绍一种简单但非常有效的算法——MDAM (Mean Drift Accumulation Monitor)&#xff0c;它能帮你轻松发现数据中的均值突变现象&#xff01;1. &#x1f50d; 算法原理累计数均值突变检测算法(MDAM…

记录一道sql面试题3

题目&#xff1a;有一张表a,和一张表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提问&#xff1a;将a和b两张表左连接查询&#xff0c;条件是a.id b.id会得到什么结果。查询的字段为a.*,b.* 。说明&#xff1a;左表 a 中 id1 …

linux系统------LVS+KeepAlived+Nginx高可用方案

目录 一、环境搭建 1.环境准备 2.安装ipvsadm 和 安装 keepalived&#xff08;Lvs服务器&#xff09; 3.为两台RS配置虚拟ip&#xff08;nginx服务器&#xff09; 1.配置虚拟网络子接口&#xff08;回环接口&#xff09; 2.修改内容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能优化实战指南:释放数据库潜能的艺术

文章目录MySQL性能优化实战指南&#xff1a;释放数据库潜能的艺术&#x1f680; 引言为什么需要MySQL性能优化&#xff1f;&#x1f4cb; 性能优化基础知识MySQL性能瓶颈分析1. 硬件资源瓶颈2. MySQL内部瓶颈&#x1f3c6; 优化配置策略大全&#x1f4be; 内存配置优化InnoDB缓…

Unity 3D碰撞器

在Unity中&#xff0c;碰撞器&#xff08;Collider&#xff09;是用于检测物体之间碰撞的组件&#xff0c;它们定义了物体的物理边界。碰撞器与刚体&#xff08;Rigidbody&#xff09;配合使用&#xff0c;实现物理模拟。下面我将按您的要求&#xff0c;从碰撞器的种类、常用参…

Windows批处理实现带时间戳ping

windows环境 &#xff0c; 将以下代码保存为 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市规划:Python 空间数据初学者指南

安装和设置 在深入研究数据之前&#xff0c;我们需要准备好工具。设置 GeoPandas 及其必要的依赖项是第一步。 我们将在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空间数据有多种格式&#xff0c;但 GeoJSON 是常见且易于访问的格式。Ge…

力扣面试150题--环形子数组的最大和

Day 80 题目描述思路 初次做法&#xff1a;在昨天代码的基础上修改 计算普通子数组的最大和 使用动态规划计算以每个位置为起点的最大子数组和&#xff08;存储在 val 中&#xff09;&#xff0c;并更新全局最大值 rightmax。计算后缀和与前缀和 sum[i]&#xff1a;从位置 i 到…

python类Keys

类Keys的定义:Elass Keys (object): 程轩开Set of special keys codes.#n# 第 15 章 网络爬虫 合情些准出照地限公轵 esms0 pro 瘀 Δ器代刍奄炖慧 图 15-39 工件肉业鱼光得 国有上子 理人场营&#xff0c;有司;可有B 相关围书 图 15-40 页源代码 ython". 名可能不鞋 NUL…

svn如何设置忽略文件夹或者文件的提交

使用svn&#xff0c;每次提交代码时&#xff0c;都会把java的编译文件target&#xff0c;或者前端的node_modules&#xff0c;dist等不需要提交的目录或这文件&#xff0c;列出来实现。通过配置svn&#xff0c;可以在提交代码时&#xff0c;自动忽略这些不需要提交到仓库的文件…

MonoGame 游戏开发框架日记 -06

第六章&#xff1a;动画类以及动画精灵 好久不见家人们好久没更新MonoGame系列了&#xff0c;不是主包弃坑了&#xff0c;主要是主包最近忙着搞项目学科一找暑假工打&#xff0c;这不一闲下来就立刻马不停蹄的来给大家更新了&#xff0c;今天的教程代码部分比较多接下来我们正式…

LVS四种工作模式深度解析

LVS&#xff08;linux virual server&#xff09;LVS四种工作模式深度解析 LVS-NAT模式 四台虚拟机 火墙关闭 关闭火墙 systemctl stop firewalldsystemctl disable firewalld关闭开机自启火墙1.clienteth0 IP&#xff1a;172.25.254.1002.lvs eth0ip :172.25.254.200; eth1ip:…

[设计模式]C++单例模式的几种写法以及通用模板

之前在这篇文章中简单的介绍了一下单例模式的作用和应用C中单例模式详解_c单例模式的作用-CSDN博客&#xff0c;今天我将在在本文梳理单例模式从C98到C11及以后的演变过程&#xff0c;探讨其不同实现方式的优劣&#xff0c;并介绍在现代C中的最佳实践。 什么是单例模式&#x…

小架构step系列19:请求和响应

1 概述作为Web程序&#xff0c;通用形式是发起HTTP请求并获取返回的结果&#xff0c;在这个过程中&#xff0c;需要把请求映射到代码的接口上&#xff0c;提供这种接口的类一般称为Controller&#xff0c;也就是需要把请求映射到Controller的接口方法上&#xff0c;把请求的参数…

论文分享 | LABRADOR:响应引导的针对物联网设备的黑盒模糊测试

由于固件仿真以及重托管的技术挑战&#xff0c;部分企业级 IoT 设备只能在黑盒环境下进行模糊测试。分享一篇发表于 2024 年 S&P 会议的论文 Labrador&#xff0c;它利用响应来引导请求变异&#xff0c;实现了针对 IoT 设备的高效黑盒模糊测试。 猴先生说&#xff1a;这篇论…

WPF为启动界面(Splash Screen)添加背景音乐

1. 添加音频文件到项目 将音频文件&#xff08;如.mp3/.wav&#xff09;放入项目文件夹&#xff08;如Resources&#xff09;在解决方案资源管理器中右键文件 → 属性&#xff1a; 生成操作&#xff1a;选择Resource&#xff08;嵌入资源&#xff09;或Content&#xff08;内容…

【Jmeter】报错:An error occured:Unknown arg

问题 调试Jmeter时&#xff0c;报错&#xff1a;‘An error occurred: Unknown arg: l’&#xff0c;脚本如下&#xff1a; $JMETER_PATH -n -t "$target_jmx" -l "$SCENARIO_REPORT_DIR/result_${threads}.jtl" -e -o "$SCENARIO_REPORT_DIR/htm…