[C#] Lucene.net - 使用盤古建立分詞 PanGuAnalyzer
2012-10-30
有一篇文章說到有關於 盤古分詞 這東西…
可以參考這一篇 當麻許-盤古分詞,尋找句子中的分詞
之前我們建立Lucene.net 的索引的時候,我們用的都是Lucene 標準的分析器
IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true, IndexWriter.MaxFieldLength.UNLIMITED);
這時候我們用 NLuke 來看看我們建立得索引..
這時候我們使用 Lucene4Pangu
下載網址:
http://pangusegment.codeplex.com/
Source Code :
Stopwatch sw = new Stopwatch();
// 讀取所有資料
var di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Source\\");
sw.Start();
var allObjects = di.GetFiles().Select(
x => JObject.Parse((File.ReadAllText(x.FullName)))).ToArray();
//Index 存放路徑
string indexPath = AppDomain.CurrentDomain.BaseDirectory + "\\Index1\\";
FSDirectory dir = FSDirectory.Open(new DirectoryInfo(indexPath));
//IndexWriter
//使用盤古分詞
var analyzer = new Lucene.Net.Analysis.PanGu.PanGuAnalyzer();
IndexWriter indexWriter = new IndexWriter(dir, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.DeleteAll();
// 還原且加入需做 index 的欄位
foreach (JObject ds in allObjects)
{
Document doc = new Document();
// 把每一個欄位都建立索引
Field f_Id = new Field("Id", ds["Id"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);
Field f_Age = new Field("Age", ds["Age"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);
Field f_Memo = new Field("Memo", ds["Memo"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);
Field f_BirthDay = new Field("BirthDay", DateTime.Parse(ds["Birthday"].ToString()).ToString("yyyyMMdd"), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);
doc.Add(f_Id); doc.Add(f_Age); doc.Add(f_Memo); doc.Add(f_BirthDay);
indexWriter.AddDocument(doc);
}
indexWriter.Optimize();
indexWriter.Commit();
indexWriter.Close();
sw.Stop();
Response.Write("建立" + allObjects.Length + "筆索引花費時間: " + sw.Elapsed + "");
這時候我們使用NLuke 來看看用盤古分析器所建立的索引會有什麼不同?!
這裡面結構已經改變 透過 標準的 LuceneStandardAnalyzer 看到的都是一個一個的中文字 他根本就搞不懂中文..
但是 PanGuAnalyzer 不同 在他眼睛中所看到的是你事先建立的中文分詞,當然內建的字典檔已經建立些基本的分詞
通常自行使用的分詞都會在進行調整…
標籤:
ASP.net
,
C#
,
Lucene.net
-- Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer. 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...