# python PyEnchant(拼寫檢查)
###### tags: `Python`
參考:[python PyEnchant(拼写检查)](https://www.jianshu.com/p/96c01666aeeb)
## 簡介
本文主要是記錄了一下pyenchant包的安裝以及簡單使用。這個包主要功能是對英語單詞進行拼寫檢查,並可以對拼寫錯誤的單詞推荐一些可能的正確單詞。
## 安裝 PyEnchant
使用pip直接安装即可,指令如下:
```
pip3 install pyenchant
```
使用上述指令,如果安裝沒有錯誤就是安裝成功了,一般情況下(mac、ubuntu等系統)是沒有任何問題的。但是在亞馬遜的EC2機器上,使用上述指令會提示錯誤。主要原因是EC2系統上缺少enchant組建,這裡就需要在EC2機器上安裝該組建。使用如下指令:
```
sudo yum install enchant
```
安裝好enchant之後,在使用pip安裝pyenchant即可。但是在python中使用enchant時,會發現剛剛裝好的enchant沒有安裝默認字典。這就需要另外安裝常用英語字典,來支持pyenchant的正常使用,使用如下指令:
```
sudo yum install aspell-en
sudo yum install enchant-aspell
```
## 基礎用法
### 創建和使用Dictionary Object
在 PyEnchant 中最主要的就是`Dict`對象,我們可以使用它來檢查單詞的拼寫是否正確,同時還可以對拼寫錯誤的單詞提供幾個可能的正確拼寫。
首先介紹如何創建`Dict`對象,並用其檢查某個單詞的拼寫:
```python=
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
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提供幾個正確拼寫的單詞|
```python=
>>> 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']
```
## 檢查一段文字的拼寫
這裡使用`enchant.checker`中的`SpellChecker`類來解決對一整段文本中的單詞進行拼寫檢查
```python=
>>> 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
```
## 英語分詞器(Tokenization)
將英語文本進行分詞,返回結果格式(word, pos),其中pos是word在整個文本中出現的位置
```python=
>>> 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)]
```