2

我想解析一个正则表达式列表来计算每个在某个文本/字符串中找到匹配项的可能性...

例如。在长度为 1 的字符串中找到 ' [AB]' 应该是 1/13 左右(仅考虑大写字母)。

是否有一个通用的正则表达式解析器,它返回各个位置/替代方案?我正在考虑获取职位列表作为回报(' [AB].A{2}'会产生' [['A','B'],'.',['AA']')

问题是用 pyparsing 解析正则表达式。简单的正则表达式没有问题,但是当谈到“替代”重复时,我迷失了:我发现很难解析像' ((A[AB])|(AB))'这样的嵌套表达式。

有什么想法吗?

4

2 回答 2

2

模拟而不是计算可能是要走的路。

设置一组具有代表性的文本字符串。(语言学家会将这样的集合称为语料库。)对于任何给定的正则表达式,找到它匹配的字符串数,然后除以语料库中的字符串总数。

你自己的例子给出了 '[AB]' 的可能性为 1/13 是基于这种思维方式,使用单大写字母字符串的语料库。通过看到语料库中的 26 个字符串中有两个匹配项,您得到 1/13。

创建一个更大的语料库:可能是达到一定长度的所有字母数字字符串的集合,或者达到一定长度的所有 ASCII 字符串,或者您选择的字典。思考什么语料库最适合您的目的是澄清“可能性”的意思的好方法。

于 2010-11-23T20:06:52.257 回答
0

您使用 ['A', 'B'] 来表示:或 A 或 B。然后您可以这样写:

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

在那里,您使用 [] 来“其中一个”,就像使用 {} 来“所有这些”一样

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 回答