/// <summary> /// 人名和前面的词词性匹配 /// </summary> /// <param name="nextStr"></param> /// <returns></returns> public bool MatchNameInTail(String preStr) { bool isReg; InnerPos[] preList = _POS.GetPos(preStr, out isReg); if (preList.Length == 0) { return(false); } foreach (InnerPos pre in preList) { if (pre == InnerPos.POS_UNK) { continue; } DualityWordBin posBin = new DualityWordBin(pre, InnerPos.POS_D_N); if (_PosBinTbl[posBin.HashCode] != null) { return(true); } posBin = new DualityWordBin(pre, InnerPos.POS_A_NR); if (_PosBinTbl[posBin.HashCode] != null) { return(true); } } return(false); }
/// <summary> /// 人名和后面的词词性匹配 /// </summary> /// <param name="str1"></param> /// <param name="str2"></param> /// <returns></returns> public bool MatchNameInHead(String nextStr) { bool isReg; InnerPos[] nextList = _POS.GetPos(nextStr, out isReg); if (nextList.Length == 0) { return(false); } foreach (InnerPos next in nextList) { if (next == InnerPos.POS_UNK) { continue; } DualityWordBin posBin = new DualityWordBin(InnerPos.POS_D_N, next); if (_PosBinTbl[posBin.HashCode] != null) { return(true); } posBin = new DualityWordBin(InnerPos.POS_A_NR, next); if (_PosBinTbl[posBin.HashCode] != null) { return(true); } } return(false); }
public void Traffic(List <string> words) { foreach (string word in words) { bool isReg; InnerPos[] curPos = this.POS.GetPos(word, out isReg); InnerPos[] nextPos = this.POS.GetPos(word, out isReg); if (curPos.Length != 1) { continue; } InnerPos pos1 = curPos[0]; if (pos1 == InnerPos.POS_UNK) { continue; } if (nextPos.Length != 1) { continue; } InnerPos pos2 = (InnerPos)nextPos[0]; if (pos2 == InnerPos.POS_UNK) { continue; } DualityWordBin bin = new DualityWordBin(pos1, pos2); Hit(bin); } }
private void Hit(DualityWordBin posBin) { DualityWordBin bin = (DualityWordBin)_PosBinTbl[posBin.HashCode]; if (bin == null) { bin = new DualityWordBin(posBin._Pos1, posBin._Pos2); bin._Count = 1; _PosBinTbl[bin.HashCode] = bin; _PosBinList.Add(bin); } else { bin._Count++; } }
public int CompareTo(object obj) { DualityWordBin dest = (DualityWordBin)obj; if (dest._Count == _Count) { return(0); } else if (dest._Count > _Count) { return(1); } else { return(-1); } }
public bool Match(String str1, String str2) { bool isReg; InnerPos[] posList1 = _POS.GetPos(str1, out isReg); if (!isReg) { return(false); } InnerPos[] posList2 = _POS.GetPos(str2, out isReg); if (!isReg) { return(false); } if (posList1.Length == 0 || posList2.Length == 0) { return(false); } foreach (InnerPos pos1 in posList1) { if (pos1 == InnerPos.POS_UNK) { continue; } foreach (InnerPos pos2 in posList2) { if (pos2 == InnerPos.POS_UNK) { continue; } DualityWordBin posBin = new DualityWordBin(pos1, pos2); if (_PosBinTbl[posBin.HashCode] != null) { return(true); } } } return(false); }