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)

显示结果如下:

Python如何把英文句子切分成单词列表_第1张图片

 二、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!=""])

Python如何把英文句子切分成单词列表_第2张图片

 结果与第一种方法一样。

三、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()])

最终结果展示:

Python如何把英文句子切分成单词列表_第3张图片

五、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])

Python如何把英文句子切分成单词列表_第4张图片

 

 六、学后反思

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

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

你可能感兴趣的:(python,基础操作,python,nlp)