SPLプログラミング言語-問題解決の例

この記事では、SPLプログラミング言語の古典的な問題を解決する方法について説明します。テキスト内で最も頻繁に出現する単語のリストを取得します。 テキストのサンプルとして、シェークスピアハムレットの作品を取り上げます。



次に、プログラムの例とその作業の結果をすぐに示します。その後、すべてを段階的に詳細に分析します。



プログラムテキスト:



text = #.readtext("hamlet.txt") words = #.split(text, " ", ".", ",", ";", "'", "!", "?", "-", "(", ")", "[", "]", #.crlf, #.quot) > i, 1..#.size(words) >> words[i] = "" key = #.lower(words[i]) dict[key] += 1 total += 1 < #.sortval(dict) #.reverse(dict) #.output(total, " ; ", #.size(dict), "  ") > i, 1..10 key = dict[i] #.output(i, " : ", key, " = ", dict[key]) <
      
      





プログラムの結果:



 32885 ; 4634   1 : the = 1091 2 : and = 969 3 : to = 767 4 : of = 675 5 : i = 633 6 : a = 571 7 : you = 558 8 : my = 520 9 : in = 451 10 : it = 421
      
      





次に、これがどのように機能するかを詳しく調べます。



最初の行:



 text = #.readtext("hamlet.txt")
      
      





ファイル「hamlet.txt」のテキストを変数「text」に読み込みます。



次に、次の行で:



 words = #.split(text, " ", ".", ",", ";", "'", "!", "?", "-", "(", ")", "[", "]", #.crlf, #.quot)
      
      





「#.split」関数は、指定された区切り文字を使用してテキスト「text」を個別の単語に分割し、結果を「単語」の配列に格納します。 区切り文字のリストには、システム定数「#.crlf」および「#.quot」も含まれます。これらは、CRLF(改行)および引用符の文字を示します。



次は「>」コマンドで始まるループです。 ループの最初の行で:



 > i, 1..#.size(words)
      
      





1から「words」配列内の単語数まで変化する変数「i」を循環することが示されており、「#.size」関数が返します。



次の行で:



 >> words[i] = ""
      
      





次の単語「words [i]」が空でない場合、サイクル「>>」の先頭に移動するコマンドがあります。 これは、テキストを分割するときに取得された空の単語を考慮しないためです。



次に、テキスト変数「key」で、関数「#.lower」のおかげで小文字の次の単語を取得します。



 key = #.lower(words[i])
      
      





そして次の行:



 dict[key] += 1
      
      





主な作業を実行します-キー「key」によって辞書「dict」のエントリに1が追加され、各単語の量がカウントされます。



インライン:



 total += 1
      
      





カウントされた単語の総数が計算され、結果が変数「total」に保存されます。



次の行:



 <
      
      





これがサイクルの終わりです。



dict辞書を値でソートします:



 #.sortval(dict)
      
      





ソートは昇順で行われるため、次の行で:



 #.reverse(dict)
      
      





辞書は降順で反転されます。



原則として、作業は完了し、結果を印刷する必要があります。 次の行は、いくつかの統計情報を提供します。



 #.output(total, " ; ", #.size(dict), "  ")
      
      





##size関数によって返される辞書辞書のサイズは、一意の単語の数を示します。



次のサイクル:



 > i, 1..10
      
      





最も頻繁に使用される10個の単語を表示します。



この行:



 key = dict[i]
      
      





次の辞書キー、つまり単語を取得します。



そして次の行:



 #.output(i, " : ", key, " = ", dict[key])
      
      





この単語が印刷され、テキストに何回表示されます。 したがって、数値インデックスによる辞書の呼び出しは、この順序インデックスを持つレコードキーを返し、テキストキーによる辞書の呼び出しは、レコードの値を返します。これは、数値-テキスト内でこの単語が出現する回数です。



最後のコマンド:



 <
      
      





ループを閉じます。



この例からわかるように、SPLはすべてのオブジェクトのタイプ(数値およびテキスト変数、配列、その他のオブジェクト)を完全に自動的に決定します。 辞書を使用する場合、新しいエントリの追加は自動的に行われます。



あなたの注意とプログラミングの成功に感謝します!



All Articles