日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Lucence.Net学习+盘古分词

發布時間:2025/3/15 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucence.Net学习+盘古分词 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 創建索引庫

?

//讀取文件,存儲到索引庫

?

?

public string CreateDatebase() { //獲取索引庫的路徑 var indexPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["IndexDateBase"]; FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory()); IndexReader reader = IndexReader.Open(directory, true); var searcher = new IndexSearcher(reader); //搜索條件 var query = new PhraseQuery(); foreach (string word in GetPanGuAnalyzer(str))//先用空格,讓用戶去分詞,空格分隔的就是詞“計算機 ? 專業” { query.Add(new Term("body", word)); } //組成詞的字之間可以允許的距離 query.SetSlop(5); TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true); searcher.Search(query, null, collector);//根據query查詢條件進行查詢,查詢結果放入collector容器 ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;//得到所有查詢結果中的文檔,GetTotalHits():表示總條數 ? TopDocs(300, 20);//表示得到300(從300開始),到320(結束)的文檔內容. var ?list = new List<string>(); for (int i = 0; i < docs.Length; i++) { int docId = docs[i].doc;//得到查詢結果文檔的id(Lucene內部分配的id) Document doc = searcher.Doc(docId);//找到文檔id對應的文檔詳細信息 var _str = doc.Get("body"); list.Add(_str); } ViewBag.List = list; return View();

? ? ?}

?

? ? ? ?進行搜索

public ActionResult List(string ?str) { //獲取索引庫的路徑 var indexPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["IndexDateBase"]; FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory()); IndexReader reader = IndexReader.Open(directory, true); var searcher = new IndexSearcher(reader); //搜索條件 var query = new PhraseQuery(); foreach (string word in GetPanGuAnalyzer(str))//先用空格,讓用戶去分詞,空格分隔的就是詞“計算機 ? 專業” { query.Add(new Term("body", word)); } //組成詞的字之間可以允許的距離 query.SetSlop(5); TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true); searcher.Search(query, null, collector);//根據query查詢條件進行查詢,查詢結果放入collector容器 ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;//得到所有查詢結果中的文檔,GetTotalHits():表示總條數 ? TopDocs(300, 20);//表示得到300(從300開始),到320(結束)的文檔內容. var ?list = new List<string>(); for (int i = 0; i < docs.Length; i++) { int docId = docs[i].doc;//得到查詢結果文檔的id(Lucene內部分配的id) Document doc = searcher.Doc(docId);//找到文檔id對應的文檔詳細信息 var _str = doc.Get("body"); list.Add(_str); } ViewBag.List = list; return View(); }

?

/// 對傳遞過來的字符串進行盤古分詞 /// </summary> /// <returns></returns> public static List<string> GetPanGuAnalyzer(string txt) { List<string> list = new List<string>(); Analyzer analyzer = new PanGuAnalyzer(); TokenStream tokenStream = analyzer.TokenStream("", new StringReader(txt)); Lucene.Net.Analysis.Token token = null; while ((token = tokenStream.Next()) != null) { list.Add(token.TermText()); } return list; }

?

IndexReader?刪除數據

//獲取字典 var directory = LucenceHelp.GetDirectory(); //先刪除數據 IndexReader reader = IndexReader.Open(directory); reader.DeleteDocuments(new Term("number", "0")); reader.IsOptimized(); reader.Close();

?

?IndexWriter 刪除數據

?

//獲取字典 var directory = LucenceHelp.GetDirectory(); var writer = new IndexWriter(directory, new PanGuAnalyzer(), false, IndexWriter.MaxFieldLength.UNLIMITED); //刪除的是與要匹配的關鍵字相關的文件 var term = new Term("body", name); //刪除的是文件名為13的文件 //var term = new Term("number", "13"); writer.DeleteDocuments(term); writer.Optimize(); writer.Close();

?

?修改索引

Analyzer analyzer = new PanGuAnalyzer(); //獲取字典 var directory = LucenceHelp.GetDirectory(); //先刪除數據 IndexReader reader = IndexReader.Open(directory); reader.DeleteDocuments(new Term("number", "0")); reader.Close(); //再添加數據 IndexWriter writer = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.LIMITED); Document document = new Document(); document.Add(new Field("number", "0", Field.Store.YES, Field.Index.ANALYZED)); document.Add(new Field("body", "如家快捷酒店-0", Field.Store.YES, Field.Index.ANALYZED)); writer.AddDocument(document); writer.Close(); ?

?

?

要添加的文件

?

?

?

轉載于:https://www.cnblogs.com/xiaoyaodijun/p/4138189.html

總結

以上是生活随笔為你收集整理的Lucence.Net学习+盘古分词的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。