private void FindAll(string text, int index, TrieNode3 ptr, List <WordsSearchResult> list) { for (int i = index; i < text.Length; i++) { var t = text[i]; TrieNode3 tn; if (ptr.TryGetValue(t, out tn) == false) { if (ptr.HasWildcard) { FindAll(text, i + 1, ptr.WildcardNode, list); } return; } if (tn.End) { foreach (var r in tn.Results) { var length = _keywordLength[r]; var start = i - length + 1; if (start >= 0) { var kIndex = _keywordIndex[r]; var matchKeyword = _matchKeywords[kIndex]; var keyword = text.Substring(start, length); var result = new WordsSearchResult(keyword, start, i, kIndex, matchKeyword); list.Add(result); } } } ptr = tn; } }
/// <summary> /// 在文本中查找所有的关键字 /// </summary> /// <param name="text">文本</param> /// <returns></returns> public List <WordsSearchResult> FindAll(string text) { List <WordsSearchResult> result = new List <WordsSearchResult>(); var p = 0; for (int i = 0; i < text.Length; i++) { var t = _dict[text[i]]; if (t == 0) { p = 0; continue; } int next; if (p == 0 || t < _min[p] || t > _max[p] || _nextIndex[p].TryGetValue(t, out next) == false) { next = _first[t]; } if (next != 0) { for (int j = _end[next]; j < _end[next + 1]; j++) { var index = _resultIndex[j]; var key = _keywords[index]; var r = new WordsSearchResult(key, i + 1 - key.Length, i, index); result.Add(r); } } p = next; } return(result); }
/// <summary> /// 在文本中查找所有的关键字 /// </summary> /// <param name="text">文本</param> /// <returns></returns> public List <WordsSearchResult> FindAll(string text) { TrieNode3 ptr = null; List <WordsSearchResult> list = new List <WordsSearchResult>(); for (int i = 0; i < text.Length; i++) { var t = text[i]; TrieNode3 tn; if (ptr == null) { tn = _first[t]; } else { if (ptr.TryGetValue(t, out tn) == false) { if (ptr.HasWildcard) { FindAll(text, i + 1, ptr.WildcardNode, list); } tn = _first[t]; } } if (tn != null) { if (tn.End) { foreach (var r in tn.Results) { var length = _keywordLength[r]; var start = i - length + 1; if (start >= 0) { var kIndex = _keywordIndex[r]; var matchKeyword = _matchKeywords[kIndex]; var keyword = text.Substring(start, length); var result = new WordsSearchResult(keyword, start, i, kIndex, matchKeyword); list.Add(result); } } } } ptr = tn; } return(list); }
/// <summary> /// 在文本中查找所有的关键字 /// </summary> /// <param name="text">文本</param> /// <returns></returns> public unsafe List <WordsSearchResult> FindAll(string text) { List <WordsSearchResult> root = new List <WordsSearchResult>(); var length = text.Length; fixed(int *_pnext = &_next[0]) fixed(int *_pcheck = &_check[0]) fixed(int *_pkey = &_key[0]) fixed(int *_pdict = &_dict[0]) fixed(char *_ptext = text) { var p = 0; for (int i = 0; i < length; i++) { var t = *(_pdict + (int)*(_ptext + i)); if (t == 0) { p = 0; continue; } var next = *(_pnext + p) + t; bool find = *(_pkey + next) == t; if (find == false && p != 0) { p = 0; next = *_pnext + t; find = *(_pkey + next) == t; } if (find) { var index = *(_pcheck + next); if (index > 0) { foreach (var item in _guides[index]) { var key = _keywords[item]; var r = new WordsSearchResult(key, i + 1 - key.Length, i, item); root.Add(r); } } p = next; } } } return(root); }
/// <summary> /// 在文本中查找所有的关键字 /// </summary> /// <param name="text">文本</param> /// <returns></returns> public List <WordsSearchResult> FindAll(string text) { List <WordsSearchResult> result = new List <WordsSearchResult>(); var p = 0; for (int i = 0; i < text.Length; i++) { var t1 = text[i]; var t = _dict[t1]; if (t == 0) { p = 0; continue; } int next; if (p == 0 || _nextIndex[p].TryGetValue(t, out next) == false) { if (_wildcard[p] > 0) { FindAll(text, i + 1, _wildcard[p], result); } next = _firstIndex[t]; } if (next != 0) { for (int j = _end[next]; j < _end[next + 1]; j++) { var idx = _resultIndex[j]; var length = _keywordLength[idx]; var start = i - length + 1; if (start >= 0) { var kIndex = _keywordIndex[idx]; var matchKeyword = _matchKeywords[kIndex]; var keyword = text.Substring(start, length); var r = new WordsSearchResult(keyword, start, i, kIndex, matchKeyword); result.Add(r); } } } p = next; } return(result); }
/// <summary> /// 在文本中查找所有的关键字 /// </summary> /// <param name="text">文本</param> /// <returns></returns> public List <WordsSearchResult> FindAll(string text) { List <WordsSearchResult> root = new List <WordsSearchResult>(); var p = 0; for (int i = 0; i < text.Length; i++) { var t = (char)_dict[text[i]]; if (t == 0) { p = 0; continue; } var next = _next[p] + t; bool find = _key[next] == t; if (find == false && p != 0) { p = 0; next = _next[0] + t; find = _key[next] == t; } if (find) { var index = _check[next]; if (index > 0) { foreach (var item in _guides[index]) { var key = _keywords[item]; var r = new WordsSearchResult(key, i + 1 - key.Length, i, item); root.Add(r); } } p = next; } } return(root); }
private void FindAll(string text, int index, int p, List <WordsSearchResult> result) { for (int i = index; i < text.Length; i++) { var t1 = text[i]; var t = _dict[t1]; if (t == 0) { return; } int next; if (p == 0 || _nextIndex[p].TryGetValue(t, out next) == false) { if (_wildcard[p] > 0) { FindAll(text, i + 1, _wildcard[p], result); } return; } for (int j = _end[next]; j < _end[next + 1]; j++) { var idx = _resultIndex[j]; var length = _keywordLength[idx]; var start = i - length + 1; if (start >= 0) { var kIndex = _keywordIndex[idx]; var matchKeyword = _matchKeywords[kIndex]; var keyword = text.Substring(start, length); var r = new WordsSearchResult(keyword, start, i, kIndex, matchKeyword); result.Add(r); } } p = next; } }