通过前人的不断研究和实验结果数据,我们可以得出下面的一些规则:
1.语料库中词频越高的越易于成词;
2.尽量不切分长词;
3.无论对真歧义还是假歧义,最准确的和最有意义的切分是依赖语境、上下文的切分;
4.逆向最大匹配优先;
5.链长大于2的交集型歧义字段的切分取决于第一个交集型歧义字段的切分;
基于这些规则,吉林大学几位老师提出了一种称为RemoveAmb的消解算法,算法的ADL描述如下:
算法 RemoveAmb(STR, len)
输入:歧义字段 STR,歧义字段链长 len
输出:用“/”分割的歧义字段消解结果 new sen
FUNCTION MULTY_1(STR)
{
AJB ← STR.
IF ( flag == FAlSE) THEN [应用规则 1] //极高频词优先
( // f(x)表示 x 在语料库中词频, 设 f(AJ) ≥f(JB) ,
// f(AJ) < f(JB)的处理方法是相对应的
Fc ← ( f(AJ) – f(JB) ) / max( f(AJ), f(JB) ).
IF( fc ≥ α) THEN
//α 可以取0.98
New sen ← AJ/B. flag ← TRUE. RETURN.) )
IF( flag == FALSE) THEN [应用规则2] //长词优先
// size(x) 表示 x的长度
( IF( size(AJ/B) > size(JB) ) THEN
( new sen ← AJ/B. flag ← TRUE RETURN. )
ELSE IF ( size(AJ) < size(JB) ) THEN
(new sen ← A/JB. Flag ← TRUE. RETURN.) )
IF( flag == FALSE) THEN [应用规则3] //语境内词频比较
// t(x) 表示 x在语境中词频,γ可以取0.4
( IF( t(AJ) – t(JB) /max( t(AJ), t(JB) ) > γ) THEN
(new sen ← AJ/B. flag ← TRUE. RETURN. )
ELSE IF( ( t(JB) – t(AJ) ) /max( t(AJ), t(JB) ) > 0 ) THEN
(flag ← TRUE new sen ← A/JB. RETURN.) )
IF( flag == FALSE) THEN [应用规则1] //语料库高频词优先
( // f(x) 表示 x在语料库中词频,设 f(AJ) ≥ f(JB)
// f(AJ) < f(JB) 的处理方法是相对的
fc ←( f(AJ) – f(JB) ) /max( f(AJ), f(JB)).
IF( fc≥β) THEN
//β 可以取0.40
(new sen ← AJ/B. flag ← TRUE RETURN.) )
IF(flag == FALSE) THEN [应用规则4]
(new sen ← A/JB. RETURN. )
}
FUNCTION MULTY_5(STR) [应用规则5]
{
ABCDEFG = STR.
// RMM(BCDEFG)返回 BCDEFG的逆向最大匹配结果
IF(flag == FALSE && MULTY1(ABC) == A/BC) THEN RETURN(A/RMM(BCDEFG))
IF( flag == FALSE && MULTY1(ABC) == AB/C THEN RETURN (AB/MULTY_3(CDEFG).
}
FUNCTION MAN()
{
Flag == FALSE
CASE DO
(len == 1):ETURN MULTY_1(ABC).
(len == 3):ETURN MULTY_3(ABC).
(len == 5):ETURN MULTY_3(ABC).
}
)END RemoveAmb