python如何精确过滤出一个串里的英文单词

首先我们来看一下让人尴尬的几个outcome

这里写图片描述

如果说我们有一个需求要精确过滤出一些英语单词,那么原生字符串方法根本不能达到要求,那么我们就需要找其他方法了:

pyenchant

1 installing PyEnchant

pip install pyenchant

如果安装不成功,提示C库缺失之类的,可以先执行以下命令:

sudo yum install enchant
or
sudo apt-get install enchant

然后再次:

pip install pyenchant

安装好enchant之后,在使用pip安装pyenchant即可。但是在python中使用enchant时,会发现刚刚装好的enchant没有安装默认字典。这就需要另外安装常用英语字典,来支持pyenchant的正常使用,使用如下指令:

sudo yum install aspell-en
sudo yum install enchant-aspell

2 基础用法

2.1 创建和使用Dictionary Object
在PyEnchant中最主要的就是Dict对象,我们可以使用它来检查单词的拼写是否正确,同时还可以对拼写错误的单词提供几个可能的正确拼写。
首先介绍如何创建Dict对象,并用其检查某个单词的拼写:

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False


>>> d.check(x)
False
>>> d.check(y)
False
>>> 

创建Dict对象可以使用如下方式:

方法  描述
d = enchant.Dict(language)  使用指定语言创建Dict对象
d = enchant.request_dict(language)  使用指定语言创建Dict对象
d = enchant.request_pwl_dict(filename)  只用本地文件中的词汇创建Dict对象
d = enchant.DictWithPWL(language, filename) 将内置某语言以及本地文件中的词汇合并来创建Dict对象
注意上述方法中用到了本地文件filename,文件中每一行只存放一个单词。

enchant模块还提供了如下几个关于语言的方法:

方法  描述
enchant.dict_exits(language)    查看当前enchant模块是否支持某种语言
enchant.list_languages()    查看当前enchant模块支持的所有语言
Dict对象有如下方法与属性方便用户使用:

方法or属性  描述
d = enchant.Dict(language)  指定语言创建一个Dict对象
d.tag   当前Dict使用的语言
d.check(word)   检查word的拼写是否正确
d.suggest(word) 对拼写错误的word提供几个正确拼写的单词
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.tag
'en_US'
>>> d.check("Hello")
True
>>> d.check("Helo")
False
>>> d.suggest("helo")
['hole', 'hello', 'helot', 'halo', 'hero', 'hell', 'held', 'helm', 'help', 'he lo']
>>> enchant.dict_exists("aa")
False
>>> enchant.dict_exists("en_US")
True
>>> enchant.list_languages()
['de_DE', 'en_AU', 'en_GB', 'en_US', 'fr_FR']

2.2 检查一段文本的拼写
这里使用enchant.checker中的SpellChecker类来解决对一整段文本中的单词进行拼写检查

>>> from enchant.checker import SpellChecker
>>> chkr = SpellChecker("en_US")
>>> chkr.set_text("This is sme sample txt with erors.")
>>> for err in chkr:
...     print "ERROR", err.word
...
ERROR sme
ERROR txt
ERROR erors

2.3 英语分词器(Tokenization)
将英语文本进行分词,返回结果格式(word, pos),其中pos是word在整个文本中出现的位置

>>> from enchant.tokenize import get_tokenizer
>>> tknzr = get_tokenizer("en_US")
>>> [w for w in tknzr("this is some simple text.")]
[('this', 0), ('is', 5), ('some', 8), ('simple', 13), ('text', 20)]

官方文档在此

猜你喜欢

转载自blog.csdn.net/lockey23/article/details/80301016