Lucene 英语分析软件,最好停止世界过滤?

Lucene 英语分析软件,最好停止世界过滤?,lucene,mahout,tf-idf,Lucene,Mahout,Tf Idf,我正在使用ApacheMahout创建TFIDF向量。我指定EnglishAnalyzer作为文档标记化的一部分,如下所示: DocumentProcessor.tokenizeDocuments(documentsSequencePath, EnglishAnalyzer.class, tokenizedDocumentsPath, configuration); 这为我调用的business.txt文档提供了以下向量。我很惊讶地看到里面有一些无用的词,比如have,on,I,,例如。我的

我正在使用ApacheMahout创建TFIDF向量。我指定EnglishAnalyzer作为文档标记化的一部分,如下所示:

DocumentProcessor.tokenizeDocuments(documentsSequencePath, EnglishAnalyzer.class, tokenizedDocumentsPath, configuration); 
这为我调用的
business.txt
文档提供了以下向量。我很惊讶地看到里面有一些无用的词,比如
have
on
I
,例如
。我的另一个文档加载了更多

对于我来说,最简单的方法是什么来提高它所发现的术语的质量?我知道EnglishAnalyzer可以被传递一个停止词列表,但是构造函数是通过反射调用的,所以看起来我不能这样做

我应该编写自己的分析器吗?我对如何编写标记器、过滤器等有点困惑。我可以将EnglishAnalyzer与我自己的过滤器一起重用吗?以这种方式将EnglishAnalyzer子类化似乎是不可能的

# document: tfidf-score term
business.txt: 109 comput
business.txt: 110 us
business.txt: 111 innov
business.txt: 111 profit
business.txt: 112 market
business.txt: 114 technolog
business.txt: 117 revolut
business.txt: 119 on
business.txt: 119 platform
business.txt: 119 strategi
business.txt: 120 logo
business.txt: 121 i
business.txt: 121 pirat
business.txt: 123 econom
business.txt: 127 creation
business.txt: 127 have
business.txt: 128 peopl
business.txt: 128 compani
business.txt: 134 idea
business.txt: 139 luxuri
business.txt: 139 synergi
business.txt: 140 disrupt
business.txt: 140 your
business.txt: 141 piraci
business.txt: 145 product
business.txt: 147 busi
business.txt: 168 funnel
business.txt: 176 you
business.txt: 186 custom
business.txt: 197 e.g
business.txt: 301 brand

您可以将自定义停止字集传递给。此停止字列表通常从文件加载,该文件为纯文本,每行一个停止字。看起来是这样的:

String stopFileLocation=“\\path\\to\\my\\stopwords.txt”;
CharArraySet stopwords=StopwordAnalyzerBase.loadStopwordSet(
get(StopFileLocation));
EnglishAnalyzer analyzer=新的EnglishAnalyzer(停止词);
我现在不知道应该如何将ctor参数传递给所指示的Mahout方法。我真的不知道看象人。如果您不能,那么是的,您可以通过复制
EnglishAnalyzer
来创建一个自定义分析器,并在那里加载您自己的停止词。下面是一个从文件中加载自定义停止词列表的示例,没有词干排除(即,为了简洁起见,删除了词干排除内容)

public final类EnglishAnalyzerCustomStops扩展了StopwordAnalyzerBase{
私有静态字符串StopFileLocation=“\\path\\to\\my\\stopwords.txt”;
public EnglishAnalyzerCustomStops()引发IOException{
super(StopwordAnalyzerBase.loadStopwordSet(path.get(StopFileLocation));
}
受保护的TokenStreamComponents createComponents(字符串字段名){
最终标记器源=新的标准标记器();
TokenStream结果=新标准过滤器(源);
结果=新的EnglishPassessiveFilter(结果);
结果=新的小写过滤器(结果);
结果=新的停止过滤器(结果,停止字);
结果=新PorterStemFilter(结果);
返回新组件(源、结果);
}
受保护的令牌流规范化(字符串字段名,令牌流输入){
令牌流结果=新的标准过滤器(in);
结果=新的小写过滤器(结果);
返回结果;
}
}

谢谢,我非常感谢您在提供代码方面提供的帮助。我有点惊讶,没有一种更聪明的方法可以在不复制和粘贴的情况下重用分析器。@Sridhar-Sarnobat-分析器非常容易组装。您几乎只需要在
createComponents
中实现分析链。很确定这就是为什么他们被评为决赛。一般来说,扩展它们没有多大意义,如果您正在实现一个自定义分析器,那么您真的应该看看正在应用的标记器和过滤器。好的,谢谢您的建议。我需要开始学习如何编写自己的分析器,以及它的每个组件的实际功能。