Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在lucene.net中使用函数同义词分析器_C#_Asp.net_Lucene.net - Fatal编程技术网

C# 如何在lucene.net中使用函数同义词分析器

C# 如何在lucene.net中使用函数同义词分析器,c#,asp.net,lucene.net,C#,Asp.net,Lucene.net,我在应用程序中使用了Lucene.Net.SynonymEngine.dll作为引用 我在使用同义词分析器、ISynonymEngine等函数时遇到问题 public class MySynonyms : Lucene.Net.SynonymEngine.ISynonymEngine { public IEnumerable<string> GetSynonyms(string word) { if (word == "quick") return

我在应用程序中使用了Lucene.Net.SynonymEngine.dll作为引用

我在使用同义词分析器、ISynonymEngine等函数时遇到问题

public class MySynonyms : Lucene.Net.SynonymEngine.ISynonymEngine
{
    public IEnumerable<string> GetSynonyms(string word)
    {
        if (word == "quick") return  new List<string>{"fast"};
        return new List<string>();
    }
}
SynonymAnalyzer sa = new SynonymAnalyzer(new MySynonyms());
我试过使用

SynonymAnalyzer syn=新的SynonymAnalyzer(ISynonymEngine引擎)

Analyzer a=新的同义词分析器(ISynonymEngine引擎)

但这两种方法似乎都不管用,有人能帮忙吗?
提前感谢您…

您可以像下面这样创建您的分析器

public class SynonymAnalyzer : Analyzer
{
    public ISynonymEngine SynonymEngine { get; private set; }

    public SynonymAnalyzer(ISynonymEngine engine)
    {
        SynonymEngine = engine;
    }

    public override TokenStream TokenStream
    (string fieldName, System.IO.TextReader reader)
    {
        //create the tokenizer
        TokenStream result = new StandardTokenizer(reader);

        //add in filters
        // first normalize the StandardTokenizer
        result = new StandardFilter(result); 

        // makes sure everything is lower case
        result = new LowerCaseFilter(result);

        // use the default list of Stop Words, provided by the StopAnalyzer class.
        result = new StopFilter(result, StopAnalyzer.ENGLISH_STOP_WORDS); 

        // injects the synonyms. 
        result = new SynonymFilter(result, SynonymEngine); 

        //return the built token stream.
        return result;
    }
}
SynonymAnalyzer sa = new SynonymAnalyzer(new XmlSynonymEngine(yourXmlFilesPath)); 
但首先应该为同义词创建一个xml文件

<?xml version="1.0" encoding="utf-8" ?>
<synonyms>
  <group>
    <syn>fast</syn>
    <syn>quick</syn>
    <syn>rapid</syn>
  </group>

  <group>
    <syn>slow</syn>
    <syn>decrease</syn>
  </group>

  <group>
    <syn>google</syn>
    <syn>search</syn>
  </group>

  <group>
    <syn>check</syn>
    <syn>lookup</syn>
    <syn>look</syn>
  </group>

</synonyms>

快速的
快的
迅速的
缓慢的
减少
谷歌
搜索
检查
查找
看
------编辑---------

请参阅ISynonymEngine的原语实现

public class MySynonyms : Lucene.Net.SynonymEngine.ISynonymEngine
{
    public IEnumerable<string> GetSynonyms(string word)
    {
        if (word == "quick") return  new List<string>{"fast"};
        return new List<string>();
    }
}
SynonymAnalyzer sa = new SynonymAnalyzer(new MySynonyms());
公共类MySynonyms:Lucene.Net.SynonymEngine.ISynonymEngine
{
公共IEnumerable同义词(字符串字)
{
if(word==“quick”)返回新列表{“fast”};
返回新列表();
}
}
同义词分析器sa=新同义词分析器(new mysynoyms());

您可以像下面这样创建分析仪

SynonymAnalyzer sa = new SynonymAnalyzer(new XmlSynonymEngine(yourXmlFilesPath)); 
但首先应该为同义词创建一个xml文件

<?xml version="1.0" encoding="utf-8" ?>
<synonyms>
  <group>
    <syn>fast</syn>
    <syn>quick</syn>
    <syn>rapid</syn>
  </group>

  <group>
    <syn>slow</syn>
    <syn>decrease</syn>
  </group>

  <group>
    <syn>google</syn>
    <syn>search</syn>
  </group>

  <group>
    <syn>check</syn>
    <syn>lookup</syn>
    <syn>look</syn>
  </group>

</synonyms>

快速的
快的
迅速的
缓慢的
减少
谷歌
搜索
检查
查找
看
------编辑---------

请参阅ISynonymEngine的原语实现

public class MySynonyms : Lucene.Net.SynonymEngine.ISynonymEngine
{
    public IEnumerable<string> GetSynonyms(string word)
    {
        if (word == "quick") return  new List<string>{"fast"};
        return new List<string>();
    }
}
SynonymAnalyzer sa = new SynonymAnalyzer(new MySynonyms());
公共类MySynonyms:Lucene.Net.SynonymEngine.ISynonymEngine
{
公共IEnumerable同义词(字符串字)
{
if(word==“quick”)返回新列表{“fast”};
返回新列表();
}
}
同义词分析器sa=新同义词分析器(new mysynoyms());
同义词过滤器C#类

公共类同义词过滤器:令牌过滤器
{
public ISynonymEngine同义词引擎{get;private set;}
private Queue splittedQueue=新队列();
私有只读ITermAttribute_termAttr;
私有只读IPositionIncrementAttribute\u posAttr;
私有只读ITypeAttribute_typeAttr;
私人国家;
公共同义词过滤器(令牌流输入,ISynonymEngine同义词引擎)
:基本(输入)
{
if(同义词引擎==null)
抛出新的ArgumentNullException(“同义词引擎”);
同义词引擎=同义词引擎;
_termAttr=AddAttribute();
_posAttr=AddAttribute();
_typeAttr=AddAttribute();
}
公共覆盖bool IncrementToken()
{
如果(splittedQueue.Count>0)
{
string splitted=splittedQueue.Dequeue();
恢复不动产(当前状态);
_termAttr.SETTERBUFFER(拆分);
_posAttr.PositionIncrement=0;
返回true;
}
如果(!input.IncrementToken())
返回false;
var currentTerm=新字符串(_termAttr.TermBuffer(),0,_termAttr.TermLength());
IEnumerable同义词=同义词引擎.GetSynonyms(currentTerm);
if(同义词==null)
{
返回false;
}        
foreach(同义词中的字符串syn)
{                
如果(!currentTerm.Equals(syn))
{
splittedQueue.Enqueue(syn);
}
}            
返回true;
}
}
同义词过滤器C#类

公共类同义词过滤器:令牌过滤器
{
public ISynonymEngine同义词引擎{get;private set;}
private Queue splittedQueue=新队列();
私有只读ITermAttribute_termAttr;
私有只读IPositionIncrementAttribute\u posAttr;
私有只读ITypeAttribute_typeAttr;
私人国家;
公共同义词过滤器(令牌流输入,ISynonymEngine同义词引擎)
:基本(输入)
{
if(同义词引擎==null)
抛出新的ArgumentNullException(“同义词引擎”);
同义词引擎=同义词引擎;
_termAttr=AddAttribute();
_posAttr=AddAttribute();
_typeAttr=AddAttribute();
}
公共覆盖bool IncrementToken()
{
如果(splittedQueue.Count>0)
{
string splitted=splittedQueue.Dequeue();
恢复不动产(当前状态);
_termAttr.SETTERBUFFER(拆分);
_posAttr.PositionIncrement=0;
返回true;
}
如果(!input.IncrementToken())
返回false;
var currentTerm=新字符串(_termAttr.TermBuffer(),0,_termAttr.TermLength());
IEnumerable同义词=同义词引擎.GetSynonyms(currentTerm);
if(同义词==null)
{
返回false;
}        
foreach(同义词中的字符串syn)
{                
如果(!currentTerm.Equals(syn))
{
splittedQueue.Enqueue(syn);
}
}            
返回true;
}
}

这些是定义,你能给我一个例子,它在c程序中是如何使用的吗?这些是定义,你能给我一个例子,它在c程序中是如何使用的吗?我实际上想通过我的程序得到一个单词的同义词,有没有一种不用我手动设置同义词的方法?你可以实现吗
ISynonymEngine
接口,它返回同义词并将您自己的类传递给
SynonymAnalyzer
,因此基本上我必须自己设置所有同义词????先生,你有使用wordNet的想法吗???这将是一个很大的帮助…@user111你问的
我在使用同义词分析器之类的函数时遇到问题,ISynonymEngine
得到了你的答案。你不接受答案的原因是什么?我实际上想通过我的程序得到一个单词的同义词,有没有办法不用我手动设置同义词?你可以实现
ISynonymEngine
接口,返回同义词并将自己的类传递给
同义词分析器
因此基本上我必须设置所有