エラー修正プログラムのプリプロセッサとメタ言語

対象言語の前処理という非常に複雑なタスクを解決する膨大な数のプログラムが既に作成されているにもかかわらず、計算言語学は非常に保守的です(このようなプログラムはスペルチェックプログラムではほとんど使用されません)。 さらに、一般的に受け入れられている「to」および「to」を調整する「複雑な」ケースの例では、プログラマーの「保守主義」が特定のクラスのエラーにどのようにつながるかを示します。



A.改革は非常に辛perな言語学者であり、文法学校での不適切な教育の結果として誤りがあると書きました。 苛性アルカリの人であるアルパトフは、次のように述べ、引用しています。「ロシア語の文法は、ロシア語に関するピーターズバーグのドイツ人へのプレゼンテーションの基礎として採用されたと言えます。 学校教育の欠陥と、文法の編集者の特定の心理学を考えると、それらは、コンピュータスペルチェックプログラムで追放されたままです。



どうやら、これらのケースは、他の方法を除いて、文法が「何をすべきか」と「何をするか」という質問でスペルを「チェック」することを強く推奨するという事実にも陰鬱な栄光を負っています。 もちろん、推奨される方法で行動する場合、アルゴリズム化とそれに続く調整は不可能です。 残るのは「アナグラムのアプローチ」だけです(プログラムの出力で「修正された」単語のいくつかのバリエーションを取得する場合)。 どうやら、ここからSAを分割する試み 純粋主義者とラクシストのためのクリロフプログラム。



文の分析に関して専門の言語学者とチームで働くプログラマーの「固定」は、プログラミングの原則とプログラマーの言語表現の「賦課」の言語学者による理解の欠如と明らかに関連しています。 そして、ここで尊敬されるS. A.クリロフはこれを実証しています-有名なフォーラムの投稿を参照してください。 これは言語の見方ですが、プログラマーの見方ではありません。そのため、別の計画の質問が重要です。文法規則をアルゴリズム化することは可能か、アルゴリズム化が不可能か、「辞書」アプローチを使用して単語を確認してください。

40%(またはそれ以上)の場合、反射動詞のスペルを修正することは、「何をすべきか」を放棄し、その意味によって反射動詞を正確に本来の意味で理解する場合、驚くほど簡単です。 相互リターン; オブジェクトレスリターン; リバーシブルなど この場合、単語を修正するタスクは、a)フレーズ、単語の「前処理」処理に削減されます。 b)「ルール」に特定の説明を使用できる単純なメタ言語を作成します。このメタ言語は、古典的なストリームエディター、つまり、よく知られているプログラムのクラスのように見えます。



したがって、「プリプロセッサ」の「燃料」に、オンとオフの単語の最後の7文字(またはそれ以下)の配列があります(たとえば、Zaliznyakの辞書を取得します)。 より多くの文字を使用すると、「精度」が向上します。これは明らかです。

「空に根を持つヘリンボーン」の原則に従って、受信したデータを配列に配置します-これにより、検索が最適化および高速化され、エラーが発生する可能性がなくなります(コードを参照)。



誰かがZaliznyakの辞書を使って私の実験を敢えて繰り返す場合、結果は驚くことではありません。そのような配列では、明確にまたはtsyaで書かれたときに3548の末尾(つまり、単語の最後の7文字以下)しかありません。 「tsya」/「tsya」の交互がちょうど小さいエンディングの数はわずか407です。それは驚くべきことですよね? 結局のところ、配列を介して検証可能な単語を「駆動」するだけで十分であり、「seems」、「have to」などの誤ったスペルの単語を取り除くことができます。 悪名高い「アナグラム」。 (2番目の配列では、オプションを記述することが可能な場合、「メタ言語」を使用する必要があります。)



これは、「1つのオプションのみが可能」な配列の様子です(もちろん、これらは3548の数行です)。



//「クリスマスツリーから空へ」

tsyaの場合-セパレーターに誤ったつづりを付けた後-修正。

潜んでいる::ロリー

帆::帆

ぶらぶら::ぶらぶら

私は::私は

既存::既存

yız::yız

rts ::ラッシュ

otsya :: otsya

zt :: zt



tsyaの場合-区切り文字の前、後に-正しいスペル:



潜んでいる::ロリー

しがみつく:::道化

乗り物::乗り物

あくびする::あくび

ゼータ:: ya

呼び出される::呼び出される

呼ばれる:: rut

Oyut :: Oyut

oets :: oets

ハドル::は



//正しいスペルを判断することができない場合の配列(tsの場合、ただしtsにソフトサインを挿入するだけでよいことは明らかです)



かわいい

砲撃

hoる

耳を傾けた

勉強しています

集まる



生きる

努力する

nyutsya



しようとしている



stsa

走っている



アッシャ



たとえば、データベース内の一致を検索できる単純なコード:



string correction_verbs(string str) { //    map,   map    vector < pair < string, string > >data; vector < pair < string, string > >::iterator it; //     ,    . file_operations file_io; //          string_utilities str_ut; //  ,    replace_all string first_str, second_str, separator; //          string verbs = global::file_paths.find("verbs_cfg")->second; data = file_io.readf_vector_pair(verbs, separator); for (it = data.begin(); it != data.end(); ++it) { //     (  )    first_str = it->first; //   second_str = it->second; //  //     //   ,      ( ) if (str.find(second_str) != string::npos) { str = str_ut.replace_all(str, second_str, first_str); //    break; } } //   data.clear(); return str; }
      
      







プログラミングで非常に明白で頻繁に使用される解決策にもかかわらず、たとえば人工言語を解析する場合、市場のOrfo言語プログラム(最も失敗したものではなく、おそらく多くの点で完璧であっても)は問題を完全に解決することはできません-「プリプロセッサ」がありません、「プリプロセッサ」の代わりに、「距離を計算する」ための同じ悪名高いアナグマティックアルゴリズムが使用され、必然的にOrfoに修正のクレイジーバージョンを提供するように「強制」します。



こちらをご覧ください: online.orfo.ru

「エラーを修正する必要があります」というエラーを含むフレーズを入力します。

出口では、予想通り、次の通路があります:着飾るには、着る、着る、打つ必要があります。

独自の結論を導き出します。

(おそらく、言語学者がどのように「曲がった」プログラマーに価値のある例であり、劣った非識字の解決策を受けたのか。)



上記のプリプロセッサの動作を見てみましょう。 str変数には、「get it」という単語があります。 配列には、「明確なつづりを持つ」再帰動詞のみが含まれます。 出力では、(配列の先頭から始まる最後の文字で一致を検索します)ライドがライドに明確に置き換えられる単語を取得します(データベースを参照、他のオプションはありません)。 プログラムが配列内で一致するものを見つけられない場合、関数は変更せずに単語を返します。 もちろん、さらに特定の記述セットを使用して、データベース「tys」/「tts」をチェックインする必要があります。 しかし、メッセージがかさばらないように、次の投稿でそのような言語プログラムの「メタ言語」について書きます。



PSもちろん、「前処理」処理には欠点がありますが、プログラムは「人間的に考える」ので、出力はさらに健全な結果です。



All Articles