2

正規表現のリストを解析して、それぞれが特定のテキスト/文字列で一致する可能性を計算したいと思います...

例えば。長さ 1 の文字列で' ' を見つける[AB]と、約 1/13 になるはずです (大文字のみを考慮して)。

個々の位置/代替を返す汎用正規表現パーサーはありますか? リターンとして位置のリストを取得することを考えています (' ' は ' [AB].A{2}' を生成し[['A','B'],'.',['AA']ます)

問題は、pyparsing による正規表現の解析です。単純な正規表現は問題ありませんが、「代替」繰り返しになると途方に暮れます。「 」のようなネストされた式を解析するのは難しいと思います((A[AB])|(AB))

何かご意見は?

4

2 に答える 2

2

計算ではなくシミュレーションが進むべき道かもしれません。

代表的なテキスト文字列の母集団を設定します。(言語学者はそのようなセットをコーパスと呼びます。)任意の正規表現について、一致する文字列の数を見つけ、コーパス内の文字列の総数で割ります。

'[AB]'の可能性を1/13として示す独自の例は、単一大文字の文字列のコーパスを使用したこの考え方に基づいています。コーパスの26の文字列のうち2つの一致があることを確認すると、1/13になります。

より大きなコーパスを作成します。特定の長さまでのすべての英数字文字列のセット、特定の長さまでのすべてのASCII文字列、または選択した辞書などです。どのコーパスがあなたの目的に最も適しているかを考えることは、あなたが「可能性」によって何を意味するかを明確にする良い方法です。

于 2010-11-23T20:06:52.257 に答える
0

['A'、'B']を使用して、次のように言います。またはAまたはB。次に、次のように入力できます。

'[{'A', ['A', 'B']}, {'A', 'B'}]'

そこで、[]を使用して「これらの1つ」を使用し、{}を使用して「これらすべて」を使用します

1/2 to '{'A', ['A', 'B']}'
   'A' => 1/1
   ['A', 'B'] => 1/2
   (1/1) * (1/2) = 1/2
   this (1/2) times the extern (1/2) = (1/4)
1/2 to '{'A', 'B'}' -> (1/26) to each.
Multiplify two times: 1/(26^2) and multiplify by the 1/2 = (1/(26^2))/2.

Now multiplify both:  (1/4) * ((1/(26^2))/2)

それはとても悪い説明でした...私は再試行します...

[] => Calc de probability: {probability of each term} / {num of terms}
{} => Calc de probability of each term and multiplify all

理解する?

于 2010-11-23T20:07:01.543 に答える