Python如何把英文句子切分成单词列表

在语料库语言学中,为了得到词表,有时需要把英文切分成列表。这时就需要对字符串中的标点进行处理。

本人经过探索发现了几种不错的方法,供大家参考使用。

一、maketrans法

这种方法的原理就是导入string中的punctuation,然后利用maketrans建立起一个映射字典,均指向一空格键名。再通过str.translate()清除掉文本中的所有标点符号并替换为空格。

然后利用split()的方法,把字符按照空格来切分,这样所有的单词都会切分出来,不会出现单词和标点连在一起的情况了。

from string import punctuation as punct  #引入punctuation模块,给它起个别名:punct

s="Hello! Life is short, and I like Python. Do you like it?" # 设定要替换的字符串

transtab=str.maketrans({key:" " for key in punct}) #生成映射字典,把所有标点映身为空格

s1=s.translate(transtab) # 批量映射后,把结果赋值给s1

print(s1)

显示结果如下:

 二、re.split()切分法

和第一种方法类似,我们先导入string中的punctuation,获取标点符号的字符串,然后我们利用re.split(‘[,.!]’,string)的切分方法,再加入一个空格。最后,再利用列表推导式来去除原结果中的空元素。

import re

from string import punctuation as punct #引入punctuation模块,给它起个别名:punct
# 
s="Hello! Life is short, and I like Python. Do you like it? Do" # 设定要替换的字符串

text = re.split("[{} ]".format(punct),s)

print([i for i in text if i!=""])

 结果与第一种方法一样。

三、NLTK中的word_tokenize()法

这种方法需要导入自然语方处理工具包NLTK,然后利用其中的word_tokenize这个分词工具进行分词,接着再用列表推导式去除标点符号。代码如下:

from nltk import word_tokenize
s="Hello! Life is short, and I like Python. Do you like it? Do" # 设定要替换的字符串
print([i for i in word_tokenize(s) if i.isalpha()])

最终结果展示:

五、re. findall()法

我们利用正则表达式模块中的findall(), 根据正则表达式【[A-z-]+】查找所有的单词,并生成这些单词的列表。最后再通过i.lower()来最小化单词。

import re
 
s="Hello! Life is short, and I like Python. Do you like it? Do" # 设定要替换的字符串
 
text = re.findall("[A-z-]+",s)
 
print([i.lower() for i in text])

 

 六、学后反思

1. 在实际操作中以上方法还存在一些问题。比如有些文本中的题目后面没有标点,所以切分规则里要加上【\n】,另外还有一些Dr. etc.这些词需要加入例外,这样切分时会保留标点符号。更为细致的分词我们后续可以继续探讨。

2.  以上方法中NLTK法需要安装nltk工具包,速度有点儿慢,配置上有点儿麻烦。maketrans法比较不太好理解,相比之下re.split()方法简单实用,可以随意添加规则,推荐大家使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值