これはPeter Norvigのalgorithmによってわずかな変更で達成できました。トリックは、アルファベットにスペース文字を追加し、すべてのバイグラムをスペース文字で区切って一意の単語として扱うことです。
big.txtにはdeep learning
バイグラムが含まれていないので、少し多くのテキストを辞書に追加する必要があります。より多くのテキストを入手するにはwikipedia library(pip install wikipedia
)を使用します。
fo = open("new_dict.txt", "w")
for u in unigrams:
fo.write(u + "\n")
bigrams = list(nltk.bigrams(unigrams))
for b in bigrams:
fo.write(" ".join(b)+ "\n")
fo.close()
今だけnew_dict.txt
からbig.txt
を変更、edits1
機能にletters
変数にspace
文字を追加し、変更するには、この機能:
import re
import wikipedia as wiki
import nltk
from nltk.tokenize import word_tokenize
unigrams = re.findall(r"\w+", open("big.txt").read().lower())
for deeplerning in wiki.search("Deep Learning"):
try:
page = wiki.page(deeplerning).content.lower()
page = page.encode("ascii", errors="ignore")
unigrams = unigrams + word_tokenize(page)
except:
break
私はすべてのユニグラムとバイグラムを使用して新しい辞書を作成します。
def words(text): return re.findall(r'\w+', text.lower())
to this:
def words(text): return text.split("\n")
今すぐcorrection("deeplerning")
が返されます。'deep learning'
!
このトリックは、特定のドメインのスペルチェックが必要な場合に効果的です。このドメインが大きい場合は、最も一般的なunigrams/bigramsだけを辞書に追加しようとすることができます。
このquestionも役立ちます。
これは難しい問題です。多くの研究がこれに入ります。 – erip
この問題の調査に関する記事をご存知ですか? –