---
# System prepended metadata

title: python PyEnchant（拼寫檢查）
tags: [Python]

---

# 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)]
```
