加了这个判断后,如果有个词"###"符合BCD模式,但最后一个#不满足小于Utility.LITTLE_FREQUENCY,导致
personName 中没有该字,最后分词结果中就丢了这个字,而且人名识别中只有这一处用到了nr字典,如果这个判断不用的话就不需要加载nr字典
了吧.
Utility.LITTLE_FREQUENCY=6.为什么要加频率小于6的判断呢?
...
int nLittleFreqCount;//Counter for the person name role with little
frequecy
...
//Get the possible name
nPos=j;//Record the person position in the tag sequence
sPersonName[0]=0;
nLittleFreqCount=0;//Record the number of role with little
frequency
while(nPos<j+nPatternLen[k])
{//Get the possible person name
//
if(m_nBestTag[nPos]<4&&personDict.GetFrequency(m_sWords
[nPos],m_nBestTag[nPos])<LITTLE_FREQUENCY)
nLittleFreqCount++;//The counter increase
strcat(sPersonName,m_sWords[nPos]);
nPos+=1;
}
这应该是对小频率的字进行特殊的处理,6只是表示一个小频率而已,没有来源,应该是经验数据。至于丢字,那应该是bug。
> > Utility.LITTLE_FREQUENCY=6.为什么要加频率小于6的判断呢?- 隐藏被引用文字 -
>
> - 显示引用的文字 -
至于nr字典,我印象中无论如何都需要加载的。因为调用维特比算法判断当前角色的时候,一定会需要未登录词词典来计算词频。因此即使
PersonRecognize()函数不需要这个词典,其它的地方也需要加载的。
FreeICTCLAS的bug很多,我建议你针对问题解决问题,比如最后一个字吃掉了,那你就添加补丁,让它在这种情况下不吃掉就好了。