Pythonで誤字脱字をチェックしたい
677, 2023-06-07
Pythonで誤字脱字をチェックしたい
Pythonで誤字脱字をチェックする方法ってないんでしょうか。
今回はとりあえずspacy
を使ってチャレンジしてみます。
$ pip install spacy ginza ja_ginza
以下のようなコードを書きます。
import spacy nlp = spacy.load('ja_ginza') doc = nlp('本日は聖典なり') d = {} for tok in doc: d[tok.text] = True print(list(d.keys()))
このようなコードを書いて実行すると以下の結果になります。
['本日', 'は', '聖典', 'なり']
上記のように単語に分割できるので、あとは目視で変な単語が無いかチェックすれば誤字脱字のチェックは行えそうです。
ためしにもっと長い文章を使ってみます。
import spacy nlp = spacy.load('ja_ginza') text = '''本日は聖典なり。いい気分なので外に出かけるが、あいにく飴が降ってきてしまった。 お陰で私はずぶぬれで嘉瀬を引いてしまいそうになる。どうしたもんか。 ''' doc = nlp(text) d = {} for tok in doc: d[tok.text] = True print(sorted(list(d.keys())))
['\n', '、', '。', 'あいにく', 'いい', 'お陰', 'か', 'が', 'き', 'し', 'しまい', 'しまっ', 'ずぶぬれ', 'そう', 'た', 'て', 'で', 'どう', 'な', 'なり', 'なる', 'に', 'の', 'は', 'もん', 'を', '出かける', '嘉瀬', '外', '引い', '本日', '気分', '私', '聖典', '降っ', '飴']
うーん、まあ単語を見ていけば「何だこの単語は?」と違和感を感じることはできますが、完全自動化で誤字脱字をチェックするのはなかなか難しそうですね。
単語の出現数の統計を取って、それで「出現率が低い=誤字の可能性が高い」と見なせば以下のようなコードも書けます。
import spacy nlp = spacy.load('ja_ginza') text = '''本日は聖典なり。いい気分なので外に出かけるが、あいにく飴が降ってきてしまった。 お陰で私はずぶぬれで嘉瀬を引いてしまいそうになる。どうしたもんか。 ''' doc = nlp(text) d = {} for tok in doc: if tok.text not in d.keys(): d[tok.text] = 1 else: d[tok.text] += 1 lis = sorted(list(d.items()), key=lambda item: item[1]) for item in lis: print(item)
('本日', 1) ('聖典', 1) ('なり', 1) ('いい', 1) ('気分', 1) ('な', 1) ('の', 1) ('外', 1) ('出かける', 1) ('、', 1) ('あいにく', 1) ('飴', 1) ('降っ', 1) ('き', 1) ('しまっ', 1) ('お陰', 1) ('私', 1) ('ずぶぬれ', 1) ('嘉瀬', 1) ('を', 1) ('引い', 1) ('しまい', 1) ('そう', 1) ('なる', 1) ('どう', 1) ('し', 1) ('もん', 1) ('か', 1) ('は', 2) ('に', 2) ('が', 2) ('た', 2) ('\n', 2) ('で', 3) ('て', 3) ('。', 4)
「聖典」は一回しか出てませんので誤字ってる可能性が高い?
しかし誤字った単語がよく使われてる単語だったらこの方法は使えませんね。
結論としてはPythonでAIを使わずに誤字・脱字を検出するのはけっこうムズイ、ということが言えると思います。
ChatGPTなんかを使えば検出してくれそうですけどね。
PythonでChatGPTのAPIを使って誤字・脱字を検出するスクリプトを作る、ということなら可能だと思います。
しかしAPIは今のところ有料ですのでそういう意味ではChatGPT3.5のプレイグランドで誤字・脱字を見つけてもらうのが現実的かもしれません。