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