1

私は監視ソフトウェアを使用して、多くの Web ソースと数式に基づいて特定のトピックに関する記事を見つけています。方程式は次のようになります。

(K1 AND K2) OR K3 NOT "K4" OR "K5 K6"~5

上記の例は、ほぼすべての可能な演算子を示しています。~ は近接演算子であり、2 つの単語が検出され、最大で n 個の単語で区切られている場合に一致を要求します。

より正確な例を挙げると (? は 1 文字のワイルドカードです。* は任意の文字数です)。

("Game of Thrones" OR "George R. R. Martin") AND (Targaryen? OR Baratheon? NOT Lannister? OR "mother dragon?"~5)

私がやりたいのは、すべての括弧を書かなくても、キーワードを取り、方程式を形成するスクリプトまたはプログラムを提供することです。これにより、2 つの方程式の比較が容易になり、エラー率が低下すると思います。

最初に、デフォルトの「OR」演算子を使用した Excel ワークシートを考えました。

keyword | logical operator | depth of parentheses

しかし、それはすべての組み合わせでうまくいくわけではありませんでした -- プログラムは、実際には -1 +1 であるのに、2 つの線の間の深さが一定であることを推測できません。

おそらく平均的なユーザーに送信するので、できるだけ簡単な入力をお願いします。何か考えはありますか?その後、C++、Java、または VBA でインタープリターを実行できます。

編集/明確にするために、エンドユーザーが括弧を記述せず、キーワードとそれらの間の関係のみを気にできる入力形式を探しています。

4

3 に答える 3

1

これらの括弧は、正規表現では常に適切に実行できないと思います。

私が大学から覚えているように、私たちはCompilerFormal Languagesを学びました。

言語で許可されている単語といくつかの規則を定義して、有効な構文にする必要があります (例: 括弧を閉じる必要がある、単語の後に論理演算子が続く必要があるなど)。最終的に実行結果が得られます。

実行時に、これらの括弧でスタックを構築する必要があります。そして、値を入れて、覗いてみましょう。

お役に立てば幸いです。検索するキーワードがいくつかあります。

于 2013-03-29T08:35:41.810 に答える
1

あなたが探しているのは、文字列入力を特定のパターンと照合することです。 これは CS で非常に一般的な問題であり、一般に regexps と呼ばれる正規表現の概念によって適切に対処されています。

しかし、特に初心者にとっては、正規表現を書くのはそれほど簡単ではありません。経験豊富なプログラマーでさえ、自分が望む正確な正規表現を書くのに苦労することがあります。

正規表現を生成するための便利な Web サイトがここにあります。それがどのように機能するかを理解するには少し時間がかかりますが、その後は信じられないほど時間の節約になります.

于 2013-03-29T08:31:18.680 に答える
1

必要なのはスキャナーとパーサーです。

スキャナーとパーサーを自分で書くのはそれほど難しくありません。単純なRECURSIVE DESCENT PARSER ( http://en.wikipedia.org/wiki/Recursive_descent_parser ) を 100 行で作成できます。

ただし、コンパイラ-コンパイラ (lex/yacc など) ツールを使用して、特定の文法からパーサーを生成することもできます。

于 2013-03-29T09:02:50.313 に答える