"大規模のスペルチェックPython
-
27-09-2019 - |
質問
驚くことにしていを見つけることができず誰も行っていることが確実にいる。ようにpythonのプロジェクトは現在、このスペルチェックも16万語。この数字は今後も、成長できます。まずは引き言葉からもんごういか,を繰り返し処理し、その後のスペルチェックしpyenchant.私は削除もんごういかとしての可能性ボトルネックによる掴む全ての項目があります。がないといけないのは約20分間の処理を通じて16k語のことが明らかである以上に過ごしたい.こないといけないのカップルでのアイデア/ご不明な点がございましたら:
明らかにしたレバレッジスレッドまたは何らかの形での並列性.ってもchopのこの4作品が含まれており、今後とも見約5分でピーク時を想定します。
はしてもらえると助かりますかスペル図書館エンチャントを利用下pyenchant?エンチャントサイトのようでもいいので利用可能なすべてスペルの図書-辞書きのスペルチェックしている。そのような場合は、私が潜在的に走行各単語を通じて三つの綴りdicts.この私の課題だが、うまく実証ことになる。でも、私のオプションもアンインストールその他の図書館?音声う?
なので、アイデアで絞り少なくとも以下の成果を出す。今のチョッピングその並列タスクが、いようになったのだが、重要な要素であるビット高速化前の違いについての質問です。
編集:で投稿前に朝のコーヒー---エンチャントの発生のリストをご提案いた場合の単語が正しく綴った.これが私はこの処理です。
解決
私たちに同意することになりの性能ボトルネックはエンチャント;このサイズのデータセットで瞬時に行うboolean isSpeltCorrectly
.いません:
建設定メモリの非常に良く出来たらつの言葉を使用し、辞書とエンチャントが取得自分の例 OpenOfficeの).
オプションとして、uniquify文書の言葉を言うことは、
set
.こんに保存ありがとうございます。チェックとどのような言葉がセットになった。これは高速でかけセットのルックアップ.(おそらく
O(log N)
ここで、Nは数かがでしょうか。仮にset
バケットによるハッシュしたように、バイナリ検索---Pythonグが修正できる私として知られています。だん, その お願いエンチャントお薦めするという意味です。これは必ずしも遅くなります。
これは、多くのばらつ正;がない場合だきcleverer.
他のヒント
私はピーター・ノーヴィグスタイルのスペルチェッカーを使用します。これに関する完全な投稿を書きました。
http://blog.mattalcock.com/2012/12/5/python-pell-checker/
これは、チェックする単語の編集の可能性を調べるコードのスニペットです。
def edits1(word):
s = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in s if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1]
replaces = [a + c + b[1:] for a, b in s for c in alphabet if b]
inserts = [a + c + b for a, b in s for c in alphabet]
return set(deletes + transposes + replaces + inserts)
このコードを確認するために非常に迅速にチェックするには、単語のデータファイルを繰り返してください。詳細については、完全な投稿をご覧ください。
おそらく、これを行うより良い方法は、ドキュメントを圧縮することです。これにより、実際には1回だけスペルチェックする必要がある単語の繰り返しインスタンスが削除されるためです。おそらくあなた自身のユニークな単語ファインダーを書くよりも速くパフォーマンスを発揮するので、これを提案します。
圧縮バージョンには、ファイル内のどこかにあるユニークな単語への参照が必要である必要があります。それらがどのように構造化されているかを調べる必要があるかもしれません。
その後、すべてのユニークな単語をスペルチェックできます。個々のSQLクエリなどでそれらをチェックしていないことを願っています。辞書をメモリに辞書をロードしてから、それに対して単語を確認する必要があります。
これが完了したら、単純に圧縮してください ちょっとプレスト それはすべてスペルチェックされています。これはかなり高速な解決策である必要があります。
あるいは、スペルチェックが本当に速く示唆されているほど速い場合、ジッピングプロセス全体を通過する必要はないかもしれません。