[C#] Lucene.net - 使用盤古建立分詞 PanGuAnalyzer

有一篇文章說到有關於 盤古分詞 這東西…

可以參考這一篇 當麻許-盤古分詞,尋找句子中的分詞


之前我們建立Lucene.net 的索引的時候,我們用的都是Lucene 標準的分析器

 

有一篇文章說到有關於 盤古分詞 這東西…

可以參考這一篇 當麻許-盤古分詞,尋找句子中的分詞

 

之前我們建立Lucene.net 的索引的時候,我們用的都是Lucene 標準的分析器

 

IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true, IndexWriter.MaxFieldLength.UNLIMITED);

 

這時候我們用 NLuke  來看看我們建立得索引..

sshot-90

 

sshot-91

 

這時候我們使用 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 來看看用盤古分析器所建立的索引會有什麼不同?!

sshot-92

sshot-93

sshot-94

 

這裡面結構已經改變 透過 標準的 LuceneStandardAnalyzer 看到的都是一個一個的中文字 他根本就搞不懂中文..

但是 PanGuAnalyzer 不同 在他眼睛中所看到的是你事先建立的中文分詞,當然內建的字典檔已經建立些基本的分詞

 

通常自行使用的分詞都會在進行調整…

 

---

請你暫時把你的勇氣給我 在夢想快消失的時候 讓我的 Code 用力的穿過天空 為愛我的人做一秒英雄 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...