else
return false;
}
public static PersonName chineseNameSplit( PosTagger personTagger,String word, int index) {
PersonName result = null;
if ( word != null && personTagger != null) {
Dictionary personDict = personTagger.getUnknownDict();
int len = word.length();
if (len < 2 || len > 4)
return null;
String[] atoms = GFString.atomSplit(word);
for (String s : atoms) {
if (Utility.charType(s) != Utility.CT_CHINESE && Utility.charType(s) != Utility.CT_OTHER)
return null;
}
String surName = null;
int surNameLen = 2;
if (len > 2)
surName = word.substring(0, surNameLen);
else if (len == 2)
surName = word;
if (!personDict.isExist( surName, 1,index)) {
surNameLen = 1;
if (len > 1)
surName = word.substring(0, surNameLen);
else if (len == 1)
surName = word;
if (!personDict.isExist( surName, 1,index)) {
surName = null;
surNameLen = 0;
}
}
String giveName = word.substring(surNameLen);
if (len > 3) {
String temp = word.substring(surNameLen, surNameLen + 1);
if (personDict.isExist( temp, 1,index)) {
giveName = word.substring(surNameLen + 1);
}
}
double freq = personDict.getFreq( surName, 1,index);
String temp = giveName.substring(0, 1);
double freq2 = personDict.getFreq( temp, 2,index);
if (surNameLen != 2
&& ((surNameLen == 0 && len > 2) || giveName.length() > 2 || getForeignCharCount(word) >= 3
&& freq < personDict.getFreq( "��", 1,index) / 40 && freq2 < personDict.getFreq( "��", 2,index) / 20 || (freq < 10 && getForeignCharCount(giveName) == (len - surNameLen) / 2)))
return null;
if (len == 2 && personTagger.isGivenName(word))
return null;
result = new PersonName();
result.setFirstName(surName);
result.setLastName(giveName);
}
return result;
}