テキストからいくつかのキーワードを抽出しようとしています。それは非常にうまく機能しますが、複数形を削除する必要があります。
私はすでにLuceneを検索目的で使用しているので、それを使用して索引付けされた用語からキーワードを抽出しようとしています。
まず、ドキュメントを RAMDirectory インデックスでインデックス付けします。
RAMDirectory idx = new RAMDirectory();
using (IndexWriter writer =
new IndexWriter(
idx,
new CustomStandardAnalyzer(StopWords.Get(this.Language),
Lucene.Net.Util.Version.LUCENE_30, this.Language),
IndexWriter.MaxFieldLength.LIMITED))
{
writer.AddDocument(createDocument(this._text));
writer.Optimize();
}
次に、キーワードを抽出します。
var list = new List<KeyValuePair<int, string>>();
using (var reader = IndexReader.Open(directory, true))
{
var tv = reader.GetTermFreqVector(0, "text");
if (tv != null)
{
string[] terms = tv.GetTerms();
int[] freq = tv.GetTermFrequencies();
for (int i = 0; i < terms.Length; i++)
list.Add(new KeyValuePair<int, string>(freq[i], terms[i]));
}
}
用語のリストには、「大統領」や「大統領」などの用語を含めることができますが、
どうすれば削除できますか?
私のCustomStandardAnalyzerはこれを使用します:
public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
{
//create the tokenizer
TokenStream result = new StandardTokenizer(this.version, reader);
//add in filters
result = new Lucene.Net.Analysis.Snowball.SnowballFilter(result, this.getStemmer());
result = new LowerCaseFilter(result);
result = new ASCIIFoldingFilter(result);
result = new StopFilter(true, result, this.stopWords ?? StopWords.English);
return result;
}
そのため、私はすでに SnowballFilter を使用しています (正しい言語固有のステマーを使用)。どうすれば複数形を削除できますか?