-
Code's Tags
-
Your Codes
-
Reffers
-
Linked Codes
|
Code:
Short link for Twitter:
HTML:
HTML view:
Copy Source | Copy HTML- namespace Lucene.Net.Analysis.Morphology
- {
- using System;
- using System.Data;
- using System.Configuration;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- using Lucene.Net.Analysis;
-
- /// <summary>
- /// Обход набора слов и вставка морфологических модификаций
- /// </summary>
- public class MorphFilter : TokenFilter
- {
- private Queue<Token> morphTokenQueue
- = new Queue<Token>();
-
- private MorphENRU _MorphEngine;
- public MorphENRU MorphEngine { get { return _MorphEngine; } private set { _MorphEngine = value; } }
-
- public MorphFilter(TokenStream input, MorphENRU morphEngine)
- : base(input)
- {
- if (morphEngine == null)
- throw new ArgumentNullException("morphEngine");
-
- MorphEngine = morphEngine;
- }
-
- public override Token Next()
- {
- // Если есть слова в очереди, то надо их поместить в поток прежде чем одти дальше
- if (morphTokenQueue.Count > 0)
- {
- return morphTokenQueue.Dequeue();
- }
-
- //Берем след. слово из текста
- Token t = input.Next();
-
- //если пусто, то конец потока
- if (t == null)
- return null;
-
- //разбор морфологии только для слов длинною более 4х символов
- if (t.TermText().Length > 4)
- {
-
- //получение актуальных морфологий
- IEnumerable<string> mWords = MorphEngine.NormalizeWord(t.TermText());
-
- //если нет слов то вернем слово просто
- if (mWords != null)
- {
- //Переберем все морфологические формы которые более употребляемы
- foreach (string word in mWords)
- {
- //убедимся, что не дублируем слово
- if (!t.TermText().Equals(word))
- {
- //делаем морфологический токен
- Token mToken = new Token(word, t.StartOffset(), t.EndOffset(), "<MORPH>");
-
- // устанавливаем относительное смещение в 0,
- // это нужно, чтобы отразить то, что добавляемое слово соответствует
- // старому месту в изначальном тексте
- mToken.SetPositionIncrement(0);
-
- //помещаем в очередь на помещенее в поток
- morphTokenQueue.Enqueue(mToken);
- }
- }
- }
- }
- //
- return t;
- }
- }
-
- }
|