-
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.Web;
- using System.IO;
- 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.Standard;
- using Lucene.Net.SynonymEngine;
-
- /// <summary>
- /// Анализатор текста для Lucene.Net с использованием морфологического анализа и словаря синонимов
- /// </summary>
- public class MorphologyAnalyzer : Analyzer
- {
- public MorphologyAnalyzer(ISynonymEngine engine)
- {
- //запомнили откуда брать синонимы
- SynonymEngine = engine;
- isSearchQuery = false;
- //грузим словари
- Morph = new MorphENRU();
- }
-
- private MorphENRU Morph;
- private ISynonymEngine _SynonymEngine;
- private Boolean isSearchQuery;
-
- /// <summary>
- /// Объект для перечисления синонимов слова
- /// </summary>
- public ISynonymEngine SynonymEngine {
- get {
- return _SynonymEngine;
- }
- private set
- {
- _SynonymEngine = value;
- }
- }
-
- /// <summary>
- /// Выключаем проверку синонимов
- /// </summary>
- /// <returns></returns>
- public MorphologyAnalyzer SetQuerySynonym()
- {
- this.isSearchQuery = true;
- return this;
- }
-
- /// <summary>
- /// Анализуем текст и возвращаем в виде нобора слов для помещения в индекс и подсчета частот
- /// </summary>
- /// <param name="fieldName">Имя индексируемого файла</param>
- /// <param name="reader">Поток для чтнения файла</param>
- /// <returns>TokenStream</returns>
- public override TokenStream TokenStream(string fieldName, TextReader reader)
- {
- //создаем обход слов
- TokenStream result = new StandardTokenizer(reader);
-
- //преобразуем исходную строчку
- result = new StandardFilter(result); // выделение слов при помощи StandardTokenizer
- result = new LowerCaseFilter(result);// Приведение к нижнему регистру
-
- // простой фильтр английских местоимений,
- // русских, к сожалению нету
- result = new StopFilter(result, StopAnalyzer.ENGLISH_STOP_WORDS);
- result = new MorphFilter(result, Morph); // вставляем морфологическую модификацию
- result = new SynonymFilter(result, SynonymEngine, this.isSearchQuery); // вставляем синонимы
-
- //возвращаем набор токенов для помещения в индекс
- return result;
- }
- }
-
- }
|