顯示具有 Lucene.net 標籤的文章。 顯示所有文章
顯示具有 Lucene.net 標籤的文章。 顯示所有文章

[C#] 盤古分詞,動態增加字典分詞+詞性

2017年4月11日

很久很久以前,寫過透過外部程式去編修字典檔,但是如果要靠程式自己學習,就要自己能夠用程式去新增分詞字典庫,所以這篇是要做這件事情。

我輸入一句話"Hello ,您好,今天主要是來解析的是當麻的杜拜塔!" 字典一定不認識 "當麻"跟 "杜拜",用預設的分詞看看
Image 228


[C#] 盤古分詞,尋找句子中的分詞+詞性

2017年4月10日

很久很久以前寫過一篇文章 [C#] 盤古分詞,尋找句子中的分詞 ,今天這邊用新版的盤古,然後加上分詞的屬性,首先透過nuget 下載一個 PanGu.Segment 來輔助,因為這包裝的還不錯
Image 220


[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  來看看我們建立得索引..


2012-10-04_135158



[C#] 盤古分詞,尋找句子中的分詞

2012年10月29日


大家在學英文的時候,不是有學過..
主詞 + 動詞 + 受詞 ex. I love you.
主詞 +be 動詞 + 形容詞 / 名詞 ex. I am a developer.I am happy.

其實中文也有,只是從小就很熟習用法..
所以不太會去注意…
但是 一句話 你可以看得出中間的每一個分詞..
譬如例句:
當麻跟一群正妹去散步,不小心碰到阿凱凱
在你腦中會解釋:
當麻  跟   一群   正妹  去  散步  不  小心 碰到  阿凱凱
但是其實這都是要靠中文分詞的 Library 才會辦到..
這也是各大搜尋的原理之一,必須去判斷分詞跟斷句 …
對這一塊有興趣的 可以問一下一位高手學長 陳智揚老師
之前跟他聊過 他對這一塊頗有深入研究…
最近在看一套分詞軟體叫做盤古, 接下來做很簡單的介紹...

下載網址:http://pangusegment.codeplex.com
sshot-42_5

下載後,可以引入 Library : PanGu.dll
之後我們就來測試一下分詞能力…


[C#] Lucene.net - 模糊搜尋FuzzyQuery

2012年10月28日


這一篇來簡單說一下關於還很有改進空間的 FuzzyQuery ..
關於 Fuzzy :

概念是思維的基本形式之一,它反映了客觀事物的本質特征。人類在認識過程中,把感覺到的事物的共同特點抽象出來加以概括,這就形成了概念。比如從白雪、白馬、白紙等事物中抽象出“白”的概念。一個概念有它的內涵和外延,內涵是指該概念所反映的事物本質屬性的總和,也就是概念的內容。外延是指一個概念所確指的對象的範圍。例如“人”這個概念的內涵是指能製造工具,並使用工具進行勞動的動物,外延是指古今中外一切的人。
來源 : http://wiki.mbalib.com/zh-tw/%E6%A8%A1%E7%B3%8A%E7%90%86%E8%AE%BA


[C#] Lucene.net 日期範圍搜尋

2012年10月5日

 

筆記一下,因為之前都是做關鍵字搜尋,其實國外有人寫過範圍搜尋範例,

我只是小咖,只是他們加入許許多多條件,花了一點時間才搞懂,這方法不一定是最好的..

但是至少解決我暫時遇到的範圍搜尋..

public List<Dict> SearchDateRangeSample(string searchContent)
{
 
        DirectoryInfo dirInfo = new DirectoryInfo(ArticlePath);
        FSDirectory dir = FSDirectory.Open(dirInfo);
        IndexSearcher  search = new IndexSearcher(dir, true);
 
        List<Dict> lst = new List<Dict>();
        Filter f=new RangeFilter("DateField", "20120101","20120622",true,true);
        Query q = new MatchAllDocsQuery();
        FilteredQuery filteredQuery = new FilteredQuery(q, f);
 
 
        Hits hits = search.Search(filteredQuery, f);
 
        
        for (int i = 0; i < hits.Length(); i++)
        {
            Dict dm = new Dict();
            dm.Tag = hits.Doc(i).GetField("Tag").StringValue();
            dm.Id = hits.Doc(i).GetField("Id").StringValue();
 
            dm.Date1 = DateTime.ParseExact(hits.Doc(i).GetField("Date1").StringValue(), "yyyyMMdd", CultureInfo.InvariantCulture);
            lst.Add(dm);
        }
 
        return lst;
 
 
}

 

Dict 只是我訂立的物件名稱,暫時先不用看他


[C#] 如何從大量JSON檔案中找尋關鍵字 (Regular Expression篇)

 

上一篇文章 如何從大量 JSON 檔案中找尋關鍵字 (JSON.net 還原篇)

提到在十萬筆資料下面,對某一欄位 (案例為 Memo 欄位) 的內容進行關鍵字搜尋..

可以搜尋出我要的關鍵字資料,拿去給老闆看…

 

老闆問我說,你這 2x 秒鐘的搜尋有啥用嗎?!

所以我在想…

如何才能夠更快..


[C#] 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net篇-建立索引)

 

 如何從大量 JSON 檔案中找尋關鍵字 (JSON.net 還原篇)如何從大量 JSON 檔案中找尋關鍵字 (Regular Expression 篇)

中對 10 萬筆個別 JSON 資料進行測試,但是結果卻是非常的慢…

大概都要花到 25~30 秒的時間…

 

正所謂..

20091213_7603ed814ea10fa6874dc5j88ho5hZqp_2

 

如何更快.. 是我腦中一直想到的…


[C#] 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net 篇 - 關鍵字搜尋)


上一篇文章 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net 篇 - 建立索引)
我們提到如何將十萬筆資料製作索引..
接下來我們就是對索引進行搜尋..

資料來源 (前情提要)

首先我在 Source 這檔案夾下面建立 10 萬筆資料,不多,但是也不太少,但是產生跟複製的時候足以讓我電腦 hang 住..
這資料結構長這樣
{

"Id":"4",

"Memo":"的,你快挖了丁老賊的眼珠出來,給我報仇。」蕭峰一時難以明白其間真相,目光環掃,在人君中見到了段正淳和",

"Birthday":"1900-01-05T00:00:00",

"Age":4

}



[C#] Lucene.net - 透過 IndexReader 刪除索引中的指定資料…

 

使用 Lucene 建立索引後基本上,更新他做的動作都是刪除後,全部重做..

但是如果是要刪除某筆資料是可以做到的,這樣可以避免重新再製作一次 index ..

如何建立索引資料可以參考此篇 http://www.dotblogs.com.tw/junegoat/archive/2012/08/03/c-sharp-lucene-create-index.aspx

畢竟當資料一大,製作 index 是很花時間的…

原本製作 index 後我搜尋資料…

 

sshot-33_2


[C#] Lucene.net–對於搜尋結果進行排序

 

上次有篇文章 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net 篇 - 關鍵字搜尋)

有朋友提到說,為什麼搜尋結果怪怪的,跟之前幾篇..

如何從大量 JSON 檔案中找尋關鍵字 (JSON.net 還原篇) 為什麼不同..

其實是因為搜尋出來的結果,並沒有排序,這篇文章我們來看看怎麼進行排序 …

看一下原本的搜尋..


[C#] Lucene.net–透過 TermRangeQuery 進行日期搜尋

 

平常在做專案尤其是處理訂單時候,日期搜尋是一定要具備的..

在 Lucene.net 下面如何進行日期搜尋..

目標資料簡述

每一筆資料大概結構為

{
"Id":"1200",
"Memo":"都是暗自忌憚,同時退開數尺,跟著各自反手,又抓了一名弟子,向前擲出。那兩名弟子又是在半空中一撞,發出",
"Birthday":"1903-04-16T00:00:00",
"Age":1200
}

編號 1~ 1200 其中 Birthday 欄位為 1900/1/2 ~ 1903/4/6



[C#] Lucene.net–透過 Filter 過濾條件

 

上一篇文章 談到 透過 TermRangeQuery 進行日期搜尋

其實透過查詢的方法不只有 Query 還有 Filter 可以用..

像是原本使用 Query 查詢 日期範圍:

C# Code :

// 其 parameters 為  欄位名稱, 下底 (小值), 上底 (大值), 是否包含最小值, 是否包含最大值
Query query1 = new TermRangeQuery("BirthDay", "19001101", "19001202", true, true);
var hits = search.Search(query1, null, search.MaxDoc()).ScoreDocs;

可以直接使用 Filter 做過濾..


TermRangeFilter 過濾時間



[C#]Lucene.net–搜尋數字範圍問題以及暫時解答

 

上一片文章提到過有關於日期搜尋  透過 TermRangeQuery 進行日期搜尋

其中 我們也可以對一般數字欄位 譬如 年紀、數量 進行搜尋…

資料 :

{"Id":"9",
"Memo":"當麻左手凌空劈出,右掌跟著迅捷之極的劈出,左手掌力先發後到,右手掌力後發先到,兩股力道交錯而前,詭異之極",
"Birthday":"1900-01-10T00:00:00",
"Age":9}


[C#]Lucene.net–增加索引,清除所有索引


如何增加索引,這問題從我寫這一系列文章以來已經被問很多次了~哈哈~
其實看過一些文件..在Lucene. 中,其實都是重做index ..

但是你確保,你的資料是新的,也就是你的定義的Id 欄位不會重複



[C#]Lucene.net–合併索引

2012年10月4日


這一篇來說一下一個我覺得也會常用到的合併索引..

資料概述

在  CIndex1 中有已存在資料索引 1~1200
其搜尋'當麻'關鍵字結果為
2012-10-04_163420_thumb[1]


[C#]Lucene.net–使用RAMDirectory、 優化Index

 

過去介紹過如何透過 Lucene.net 去製作 index ..

其中我所使用的都是..

FSDirectory dir = FSDirectory.Open(new DirectoryInfo("Index 目錄"));

但是其實有一種方法可以加快,製作 index 的速度也就是  RAMDirectory



[C#]Lucene.net–透過 NumericField , NumericRangeQuery 建立數字範圍索引,搜尋數字範圍


上次 寫一篇有關於 Lucene.net–搜尋數字範圍問題以及暫時解答 之後..
有一位前輩 sholfen 給了我一個 關鍵字提示 NumericField
我上網查了一下文件,果然這就是我要的東西.. 在也不用利用小技巧來解決數字的問題了.. OH~Ya..
感謝 sholfen 大大~果然寫 blog 也可以學東西..


[C#]Lucene.net–跨字搜尋(詞組搜尋) PhraseQuery

 

PhraseQuery 詞組搜尋,主要是可以達到跨字數範圍搜尋,

舉例來說 假設 你希望找尋 我…你 中間可能模糊範圍在 3 個字以內..

這時候要使用 PhraseQuery
PhraseQuery phraseQuery = new PhraseQuery();

// 其中  3 這數字代表 允許中間的插入數值 為三個字

phraseQuery.SetSlop(3);

// 搜尋 Memo 此欄位 出現 我 還有 你 中間間最多三個字..

phraseQuery.Add(new Term("Memo", "我"));
phraseQuery.Add(new Term("Memo", "你"));


[C#] Lucene.net–Index 查看工具

 

看到一篇一篇 網路上面由網路上面高手開發的工具 NLuke

NLuke 是一個基於.NetFramework 所開發的檢視所做出來的 Index  的狀況..

SnapShot:

2012-10-04_150205


當麻許的超技八 2014 | Design: no2don.