我正在尝试计算文本中单词对出现的Log Likelihood得分,并且在我的Delphi实现中得到了相同的异常结果,我从在线发现的Java和Python源代码中得到了这些结果.1993年在这个来源上发表的Ted Dunning给出了一对特定的结果:
并给出所需的结果为270.72
Dunning还在http://tdunning.blogspot.co.uk/2008/03/surprise-and-coincidence.html中给出了一个实现.
计算对数似然比得分(也称为G2)非常简单,
LLR = 2 sum(k) (H(k) - H(rowSums(k)) - H(colSums(k)))
其中H是香农熵,计算为和的总和(k_ij / sum(k)) log (k_ij / sum(k)).在R中,此函数定义为H = function(k) {N = sum(k) ; return (sum(k/N * log(k/N + (k==0)))}
但我不知道R并且不确定如何将其转换为Pascal.
我的翻译尝试包括这些功能
function LnOK(x : integer): extended;
begin
if x<=0 then Result :=0
else Result := Ln(x);
end;
function Entropy2(a, b: Integer): extended;
begin
Result := LnOK(a + b) - LnOK(a) - LnOK(b); …Run Code Online (Sandbox Code Playgroud)